MATLAB Parfor с большим количеством итераций не запускается - PullRequest
0 голосов
/ 28 мая 2020

Я запускаю Matlab 2014a и пытаюсь запустить сценарий с помощью parfor. Однако он застревает на

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

. Раньше я запускал тестовый скрипт, и он работал нормально. Разница в том, что тестовый скрипт имеет 4 итерации parfor и 2 массива размером 5x12x3x4, которые заполняются parfor l oop, тогда как основной скрипт имеет 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

1 Ответ

1 голос
/ 28 мая 2020

Ваш вывод неверен, потому что ваши измерения неверны.

disp() внутри parfor l oop не гарантируется печать на экран именно тогда, когда работник добирается до него, вместо этого он ставится в очередь, и когда работник свободен, он отправляет его клиенту на Распечатать.

Чтобы сохранить прогресс выполнения parfor, вам нужно parallel.pool.DataQueue

Прочтите также этот другой пост Mathworks о том же топе c: https://uk.mathworks.com/matlabcentral/answers/372416-how-can-i-display-the-progress-of-a-parfor-or-parfeval-loop-in-matlab-r2017a-and-newer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...