【问题标题】:Parfor-loop restarts after executing the first set of iterationsParfor 循环在执行第一组迭代后重新启动
【发布时间】:2020-05-05 15:06:02
【问题描述】:

我在执行 parfor 循环的脚本中遇到问题,希望您能帮我解决。

我以前没有遇到过这个问题,我想我没有更改任何可能导致它的东西。

问题在于 parfor 循环在启动具有 4 个工作人员的并行组并执行前 4 次迭代后重新启动。这发生一次,然后正常执行所有迭代。

这是我的代码,为了显示这个问题而进行了简化:

parfor loopVariable = 1 : 21
    fprintf('%s - Running iteration %i/%i \n', datestr(datetime), loopVariable, 21)
    *statements*
end

这是我得到的输出,你会注意到前 4 次迭代是重复的:

Starting parallel pool (parpool) using the 'local' profile ...
connected to 4 workers.
04-May-2020 11:43:21 - Running iteration 1/21
04-May-2020 11:43:21 - Running iteration 2/21
04-May-2020 11:43:21 - Running iteration 4/21
04-May-2020 11:43:21 - Running iteration 7/21

Analyzing and transferring files to the workers ...done.

04-May-2020 15:01:12 - Running iteration 7/21
04-May-2020 15:01:12 - Running iteration 1/21
04-May-2020 15:01:12 - Running iteration 2/21
04-May-2020 15:01:12 - Running iteration 4/21
04-May-2020 15:24:29 - Running iteration 3/21
04-May-2020 16:21:16 - Running iteration 6/21
04-May-2020 16:12:52 - Running iteration 13/21
04-May-2020 16:20:32 - Running iteration 10/21
04-May-2020 18:34:27 - Running iteration 12/21
04-May-2020 18:39:20 - Running iteration 9/21
04-May-2020 20:33:04 - Running iteration 5/21
04-May-2020 20:50:08 - Running iteration 11/21
04-May-2020 21:07:43 - Running iteration 8/21
04-May-2020 22:42:34 - Running iteration 15/21
05-May-2020 01:09:18 - Running iteration 14/21
04-May-2020 23:05:16 - Running iteration 18/21
04-May-2020 23:53:35 - Running iteration 19/21
05-May-2020 01:50:12 - Running iteration 17/21
05-May-2020 04:40:23 - Running iteration 16/21
05-May-2020 01:52:47 - Running iteration 21/21
05-May-2020 03:34:10 - Running iteration 20/21

我不知道这是否相关,但我正在远程运行脚本:

nohup matlab -nodisplay -nosplash  -r scriptFile -logfile outputFile.txt < /dev/null &

提前感谢您的帮助。

【问题讨论】:

    标签: matlab parallel-processing


    【解决方案1】:

    您显示的代码段是正确的。您确定不是代码的其他部分或*statements* 的某些部分吗?

    >> parfor loopVariable = 1 : 21
        fprintf('%s - Running iteration %i/%i \n', datestr(datetime), loopVariable, 21)
       end
    Starting parallel pool (parpool) using the 'local' profile ...
    Connected to the parallel pool (number of workers: 4).
    05-May-2020 11:10:56 - Running iteration 1/21 
    05-May-2020 11:10:56 - Running iteration 6/21 
    05-May-2020 11:10:56 - Running iteration 5/21 
    05-May-2020 11:10:56 - Running iteration 15/21 
    05-May-2020 11:10:56 - Running iteration 19/21 
    05-May-2020 11:10:56 - Running iteration 2/21 
    05-May-2020 11:10:56 - Running iteration 8/21 
    05-May-2020 11:10:56 - Running iteration 7/21 
    05-May-2020 11:10:56 - Running iteration 13/21 
    05-May-2020 11:10:56 - Running iteration 17/21 
    05-May-2020 11:10:56 - Running iteration 3/21 
    05-May-2020 11:10:56 - Running iteration 10/21 
    05-May-2020 11:10:56 - Running iteration 9/21 
    05-May-2020 11:10:56 - Running iteration 14/21 
    05-May-2020 11:10:56 - Running iteration 18/21 
    05-May-2020 11:10:56 - Running iteration 4/21 
    05-May-2020 11:10:56 - Running iteration 12/21 
    05-May-2020 11:10:56 - Running iteration 11/21 
    05-May-2020 11:10:56 - Running iteration 16/21 
    05-May-2020 11:10:56 - Running iteration 21/21 
    05-May-2020 11:10:56 - Running iteration 20/21 
    

    【讨论】:

    • 感谢您的回复,您是对的!为了保存工作场所变量,我在创建的 parfor 循环中包含了对本地函数的调用。我删除了调用此函数的行,问题就消失了。我不知道为什么会这样。再次感谢!
    猜你喜欢
    • 2023-04-03
    • 2016-08-18
    • 2020-01-25
    • 1970-01-01
    • 2015-03-14
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多