我正在构建一个大型的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并且每隔一段时间对它们求和?也许某种方法可以确定表中哪些元素已经被内核修复了?