小编Jer*_*ver的帖子

监控Mathematica中并行计算的进度

我正在构建一个大型的ParallelTable,并且想要了解计算的进展情况.对于非并行表,以下代码可以很好地完成:

counter = 1;
Timing[
 Monitor[
  Table[
   counter++
  , {n, 10^6}];
 , ProgressIndicator[counter, {0, 10^6}]
 ]
]
Run Code Online (Sandbox Code Playgroud)

结果{0.943512, Null}.但是,对于并行情况,有必要counter在内核之间进行共享:

counter = 1;
SetSharedVariable[counter];
Timing[
 Monitor[
  ParallelTable[
   counter++
  , {n, 10^4}];
 , ProgressIndicator[counter, {0, 10^4}]
 ]
]
Run Code Online (Sandbox Code Playgroud)

结果{6.33388, Null}.由于counter需要在每次更新时在内核之间来回传递值,因此性能损失将非常严重.有关如何了解计算方法的任何想法?也许让每个内核都有自己的值counter并且每隔一段时间对它们求和?也许某种方法可以确定表中哪些元素已经被内核修复了?

parallel-processing wolfram-mathematica progress-bar

19
推荐指数
2
解决办法
5558
查看次数