迭代次数较多的MATLAB Parfor不启动。

问题描述 投票:0回答:1

我正在运行Matlab 2014a,试图用parfor启动一个脚本。然而它卡在了

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

我之前运行了一个测试脚本,工作正常。不同的是,测试脚本有4个parfor迭代和2个5x12x3x4大小的数组,这些数组被填充在parfor循环中,而主脚本有100个迭代和2个31x12x3x100大小的数组。

EDIT:这是我的代码的简化版本来说明这个问题,请注意,这个版本,我没有包含计算,实际上是可行的。因为涉及到其他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
matlab parfor matlabpool
1个回答
1
投票

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

disp() 在一个parfor循环里面,并不能保证在工人到达它的时候准确地打印到屏幕上,而是要排队,当工人空闲的时候,它会把它送到客户端去打印。

为了保持一个parfor执行的进度,你需要 parallel.pool.DataQueue

还请阅读其他Mathworks关于同一主题的帖子。https:/uk.mathworks.commatlabcentralanswers372416-how-can-i-display-the-progress-of-a-parfor-or-parfeval-loop-in-matlab-r2017a-and-newer。

© www.soinside.com 2019 - 2024. All rights reserved.