我正在使用jsr166y ForkJoinPool在线程之间分配计算任务.但我显然必须做错事.
如果我创建并行度> 1的ForkJoinPool(默认为Runtime.availableProcessors();我已经运行2-8个线程),我的任务似乎完美无缺.但是如果我创建具有parallelism = 1的ForkJoinPool,我会在不可预测的迭代次数之后看到死锁.
是的 - 设置parallelism = 1是一种奇怪的做法.在这种情况下,我正在分析并行算法随着线程数的增加,我想比较并行版本,运行到单个线程,到基线串行实现,以便准确地确定并行实现的开销.
下面是一个简单的例子,说明了我所看到的问题."任务"是对固定数组的虚拟迭代,递归地划分为16个子任务.
如果以THREADS = 2(或更多)运行,它可靠地运行完成,但如果以THREADS = 1运行,则它总是死锁.在不可预测的迭代次数之后,主循环在ForkJoinPool.invoke()中挂起,等待task.join(),并且工作线程退出.
我在Linux下运行JDK 1.6.0_21和1.6.0_22,并且几天前使用Doug Lea的网站(http://gee.cs.oswego.edu/dl/concurrency-interest/)下载的jsr166y版本index.html)
对我遗失的任何建议?提前谢谢了.
package concurrent;
import jsr166y.ForkJoinPool;
import jsr166y.RecursiveAction;
public class TestFjDeadlock {
private final static int[] intArray = new int[256 * 1024];
private final static float[] floatArray = new float[256 * 1024];
private final static int THREADS = 1;
private final static int TASKS = 16;
private final static int ITERATIONS = 10000;
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 我需要在大量训练样本上训练回归模型,并且可能包含任意特征.我应该考虑哪些学习算法?为什么?
问题的快速摘要:
我有一些在类似大小的分类问题(使用SVM,平均和投票感知器等)上训练对数线性模型的经验.添加任意特征的能力很重要,但在这种情况下,训练时间也很有价值.
例如,到目前为止,我用SVMLight进行的一项实验花了几周的时间来收集这些数据的一个子集.我们可以跨多核机器或(可能)集群进行并行化,但我们需要在几分钟内训练模型.在线培训会更好.
我成功(并且很快)训练了一个平均感知器模型.但是,据我所知,AP通常不适用于回归.AP是否为回归模型提供任何收敛保证?还有其他正式理由不应该适用吗?或者这是否符合我的要求?
我应该研究哪些其他选择?SVM可能提供更高的准确性,但二次训练时间是不可接受的.如果可以访问线性时间SVM算法,那么可以很好地工作.
潜在的优势:
感谢您的输入.