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中编写了代码)