MATLAB Parfor具有大量未启动的迭代

MATLAB Parfor具有大量未启动的迭代,matlab,parfor,matlabpool,Matlab,Parfor,Matlabpool,我正在运行Matlab2014a,并试图用parfor启动一个脚本。然而,它却陷入了困境 Starting parallel pool (parpool) using the 'local' profile ... connected to 16 workers. 我以前运行过一个测试脚本,它工作正常。不同之处在于,测试脚本有4次parfor迭代和2个5x12x4x4大小的数组,这些数组填充在parfor循环中,而主脚本有100次迭代和2个31x12x3x100大小的数组。 有什么办法让它运行

我正在运行Matlab2014a,并试图用parfor启动一个脚本。然而,它却陷入了困境

Starting parallel pool (parpool) using the 'local' profile ... connected to 16 workers.
我以前运行过一个测试脚本,它工作正常。不同之处在于,测试脚本有4次parfor迭代和2个5x12x4x4大小的数组,这些数组填充在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

你的推断是错误的,因为你的测量是错误的

parfor循环中的
disp()
无法确保在工作人员到达时准确打印到屏幕上,而是将其排队,当工作人员空闲时,它会将其发送到客户端进行打印

要保持执行过程的进度,您需要


另请阅读另一篇关于同一主题的Mathworks文章:

请提供一个答案,你认为它为什么会卡住?也许只是花了很长时间long@SardarUsama不知道如何在这种情况下提供一个,在我的脚本中发生了很多事情,涉及matlab和python脚本。当我简单地将0-s分配给循环中的行时,它就起作用了。我想我不是在寻找确切的解决方案,而是寻找一个让我的循环运行的技巧。@AnderBiguri这是可能的,但花一天时间启动循环对我来说就像被卡住一样。@shiftyscales但是
disp()
只会在核心完成任务时的最后显示,不按顺序显示。你不是在衡量你认为自己是什么。您不能向并行循环中添加print语句来了解它的执行时间。该dips将在某个点排队等待IO流,当进程空闲时(通常在并行池结束其数学运算后),它将处理IO流并实际打印到屏幕上。这些都暗示了我一开始所说的:“这只是花了很长时间。”谢谢,这看起来正是我需要的。然而,DataQueue显然是在2017年引入的,我正在运行2014a。在那个版本中有我可以使用的替代品吗?@shiftyscales,这是一个6年前的版本。。。。我不知道当时是否有类似的情况。我最后用Paru progress来表示:@shiftyscales太棒了。这是由parallel toolbox的一位作者编写的,因此很可能
parallel.poop.DataQueue
是同一事物的高级版本。