小编Aar*_*onD的帖子

ForkJoinPool parallelism = 1死锁

我正在使用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)

java concurrency multithreading

8
推荐指数
1
解决办法
2092
查看次数

我应该考虑使用哪种学习算法来训练对数线性回归模型?

我需要在大量训练样本上训练回归模型,并且可能包含任意特征.我应该考虑哪些学习算法?为什么?

问题的快速摘要:

  • 大约500万个培训示例
  • 以每年2-4百万的速度添加培训示例
  • 培训示例目前每个包含10个功能
  • 大约400k填充功能(总功能空间大得多)
  • 随着时间的推移添加其他功
  • 每天重新训练或调整模型(至少)以包含新的示例
  • 优化标准:最小平方百分比误差
  • 输出:单个实数值

我有一些在类似大小的分类问题(使用SVM,平均和投票感知器等)上训练对数线性模型的经验.添加任意特征的能力很重要,但在这种情况下,训练时间也很有价值.

例如,到目前为止,我用SVMLight进行的一项实验花了几周的时间来收集这些数据的一个子集.我们可以跨多核机器或(可能)集群进行并行化,但我们需要在几分钟内训练模型.在线培训会更好.

我成功(并且很快)训练了一个平均感知器模型.但是,据我所知,AP通常不适用于回归.AP是否为回归模型提供任何收敛保证?还有其他正式理由不应该适用吗?或者这是否符合我的要求?

我应该研究哪些其他选择?SVM可能提供更高的准确性,但二次训练时间是不可接受的.如果可以访问线性时间SVM算法,那么可以很好地工作.

潜在的优势:

  • 在线培训
  • 可用的开源实现(理想情况下是Java).如有必要,我们可以推出自己的实现,但如果可能的话我会避免这种情况.

感谢您的输入.

machine-learning

6
推荐指数
1
解决办法
1128
查看次数