我有以下代码;虽然结果与非并行版本不一致,但它在大循环计数上执行,但如果loopcount为1则失败。我的Parallel.For有什么问题?
我正在计算约1000个股票与~500个指数的相关系数;随着时间的推移每个都有~250次测每个股票(目标)与每个指数(测试)相关联。目标循环是串行的,我想并行进行测试循环,因为对于每个测试,目标数据都是相同的。
在方法DoOneTest中针对此一个目标的一个测试计算相关性,使用两个索引调用它,并且目标数据数组表示要对所有测试保持不变的目标数据。
teststart = 0;
UserUnique.TestRank = 1; //# of tests
var options = new ParallelOptions { MaxDegreeOfParallelism = 1 };
Parallel.For(teststart, UserUnique.TestRank - 1, options, paralleltestcounter =>
{
int testindex = paralleltestcounter;
UserUnique.outputGrid = DoOneTest(tgtindx, testindex, x);
});
答案 0 :(得分:4)
它失败,因为循环计数设置为1,然后从中减去1:
UserUnique.TestRank = 1; //# of tests
Parallel.For(teststart, UserUnique.TestRank - 1, options, paralleltestcounter =>
因此,fromInclusive
和toExclusive
都是0
,因此循环永远不会进入。将你的循环改为:
Parallel.For(teststart, UserUnique.TestRank, options, paralleltestcounter =>
了解更多信息see MSDN.
同样@juharr评论:
将
MaxDegreeOfParallelism
设置为1似乎首先打败了使用Parallel.For的目的。