【问题标题】:MATLAB Parfor with high number of iterations not starting具有大量迭代的 MATLAB Parfor 未开始
【发布时间】:2020-05-28 11:44:28
【问题描述】:

我正在运行 Matlab 2014a 并尝试使用 parfor 启动脚本。但是它卡在了

Starting parallel pool (parpool) using the 'local' profile ... connected to 16 workers.

我之前运行了一个测试脚本,它工作正常。不同之处在于,测试脚本有 4 次 parfor 迭代和 2 个 5x12x3x4 大小的数组,它们填充在 parfor 循环中,而主脚本有 100 次迭代和 2 个 31x12x3x100 大小的数组。 任何想法如何让它运行? 谢谢!

编辑:这里是我的代码的简化版本来说明问题,请注意这个版本,其中我不包括实际工作的计算。包含计算是不可行的,因为它们涉及其他 Matlab 和 Python 脚本。另外,当我说卡住时,我的意思是我没有从 disp(output) 行获得任何输出。

close all;
clear all;
clc;

disp('starting');
results_nb = zeros(31,12,3,100);
results_ht = zeros(31,12,3,100);
progress = zeros(1,100);

parfor iter = 1:100

    t = getCurrentTask(); 
    output = ['Worker:' num2str(t.ID) ', Iteration:' num2str(iter)];
    disp(output);
    j_idx=0;
    results_nb_iter=zeros(31,12,3);
    results_ht_iter=zeros(31,12,3);
    for j=[10,20,50]
        j_idx=j_idx+1;
        for i=1:31
            line_nb = zeros(1,12);
            line_ht = zeros(1,12);

            %line_nb = some calculations
            %line_ht = some calculations

            results_nb_iter(i,:,j_idx)=line_nb;
            results_ht_iter(i,:,j_idx)=line_ht;

        end
    end
    results_nb(:,:,:,iter)=results_nb_iter;  
    results_ht(:,:,:,iter)=results_ht_iter;

end

save('results')

exit

【问题讨论】:

  • 你认为它为什么卡住了?也许它只需要很长时间
  • @SardarUsama 不确定在这种情况下如何提供一个,我的脚本中发生了很多事情,涉及 matlab 和 python 脚本。当我简单地将 0-s 分配给循环中的行时,它可以工作。我想我不是在寻找确切的解决方案,而是在寻找可以让我的循环运行的提示。
  • @AnderBiguri 这是可能的,但花 1 天时间开始循环对我来说就像被卡住一样。
  • @shiftyscales 但disp() 只会显示在最后,当核心完成任务时,不按顺序显示。你不是在衡量你认为自己是什么。您不能将打印语句添加到并行循环以了解它何时被执行。在某些时候,下降会排队到 IO 流,当进程空闲时(通常在并行池结束其数学运算之后),它将处理 IO 流并实际打印到屏幕上。这一切都暗示了我一开始所说的:“这需要很长时间”。

标签: matlab parfor matlabpool


【解决方案1】:

你的推论是错误的,因为你的测量是错误的。

disp() 在 parfor 循环内不能确保在工作人员到达它时准确地打印到屏幕,而是排队,当工作人员空闲时,它会将其发送给客户端进行打印。

要保持parfor执行的进度,您需要parallel.pool.DataQueue

另请阅读有关同一主题的其他 Mathworks 帖子:https://uk.mathworks.com/matlabcentral/answers/372416-how-can-i-display-the-progress-of-a-parfor-or-parfeval-loop-in-matlab-r2017a-and-newer

【讨论】:

  • 谢谢,这看起来正是我所需要的。然而,DataQueue 显然是在 2017 年推出的,而我正在运行 2014a。我可以使用该版本中的替代品吗?
  • @shiftyscales 呵呵,那是 6 岁的版本……我不知道当时是否有这样的东西。
  • 我最后为此使用了 parfor_progress:uk.mathworks.com/matlabcentral/fileexchange/…
  • @shiftyscales 太棒了。这是由并行工具箱的作者之一编写的,因此parallel.poop.DataQueue 很可能是同一事物的高级版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2023-03-11
  • 2016-09-12
相关资源
最近更新 更多