共享变量和parallel.forEach

时间:2017-06-22 00:15:20

标签: c# multithreading parallel.foreach

我得到了一点奇怪的计算,过去需要很长时间。 直到我开始使用嵌套并行

double[] epochs={0.001,0.003,0.0013,0.04    .... }
double[] variate= {0.001,0.003,0.0013,0.04    .... }
Parallel.ForEach(ep, epochs => 
{
    parallel.foreach(vr ,variate =>
    {
        //heavy calculation..
    }
}

在调试过程中,我注意到有时会跳过更好的解决方案

计算是关于数据集并找到最佳解决方案。 它有很多代码,但最终它会对自身进行评分,如果更好,它应该传递一个double []数组,由更好的遗传解决方案组成。 然后我可以使用该解决方案阵列进一步的parallel.foreach循环基于。

调试时我注意到全局变量对并行代码的效果不好。一种(一种矫枉过正的)解决方案可以是让每个线程cal一个winsock连接,而套接字监听器在线程之间执行数据交换。写入磁盘可能更容易,让每个线程观察它们与磁盘上的结果相比是否更好,如果这样,则覆盖磁盘文件。

这种更好的比较通常不会发生(因为计算需要很长时间~7分钟左右),因此不太可能发生文件锁定。 但它不会错过使用文件系统或套接字协议。 对于某种共享内存构造,这不可能吗?

也许是一些静态列表或者一个词典(按结果分数索引?)。 或者是否有另一种方法可以使用parralel.forEach

(我在c#6 .net 4.6中编写了代码)

0 个答案:

没有答案
相关问题