gpt4 book ai didi

wolfram-mathematica - 监控Mathematica中并行计算的进度

转载 作者:行者123 更新时间:2023-12-03 12:45:40 25 4
gpt4 key购买 nike

我正在构建一个大型的ParallelTable,并希望对计算的运行情况保持一定的了解。对于非并行表,以下代码可以很好地完成工作:

counter = 1;
Timing[
Monitor[
Table[
counter++
, {n, 10^6}];
, ProgressIndicator[counter, {0, 10^6}]
]
]


结果为 {0.943512, Null}。但是,对于并行情况,必须在内核之间共享 counter

counter = 1;
SetSharedVariable[counter];
Timing[
Monitor[
ParallelTable[
counter++
, {n, 10^4}];
, ProgressIndicator[counter, {0, 10^4}]
]
]


结果为 {6.33388, Null}。由于 counter的值需要在每次更新时在内核之间来回传递,因此性能下降的严重程度已不至于严重。关于如何进行计算的任何想法?也许让每个内核都有其自己的 counter值并定期对其求和?也许某种确定表中哪些元素已经被植入内核的方法?

最佳答案

您说“也许让每个内核都有自己的计数器值并按间隔求和吗?”时,您几乎自己给出了答案。

尝试这样的事情:

counter = 1;
SetSharedVariable[counter];
ParallelEvaluate[last = AbsoluteTime[]; localcounter = 1;]
Timing[Monitor[
ParallelTable[localcounter++;
If[AbsoluteTime[] - last > 1, last = AbsoluteTime[];
counter += localcounter; localcounter = 0;], {n, 10^6}];,
ProgressIndicator[counter, {0, 10^6}]]]


请注意,它比第一个单CPU情况花费的时间更长,这仅是因为它实际上在循环中执行了某些操作。

您可以将测试AbsoluteTime []-last> 1更改为更频繁的内容,例如AbsoluteTime []-last> 0.1。

关于wolfram-mathematica - 监控Mathematica中并行计算的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com