Как периодически сохранять матрицы в пределах PARFOR l oop? - PullRequest
1 голос
/ 13 марта 2020

Я использовал параллель l oop (Parfor) в Matlab, и вот часть моего кода. (Он должен работать несколько дней, поэтому я хочу периодически сохранять свои выходные данные.

  parfor i = 1:N_boot

                      ...

           out1(i,:) = result1;
           out2(i,:) = result2;

       if mod(i,100) == 0
        % Here, I want to save out1 and out2 (export with .mat file) 

       end


  end

Как мне сохранить out1 и out2 для каждой 100-й итерации?

( Сохранение рабочего пространства для каждой 100-й итерации также хорошо для меня)

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Я бы порекомендовал переписать ваш код, используя parfeval, тогда вы можете позвонить fetchNext, чтобы получить вывод. Имейте в виду, что fetchNext возвращает индекс, потому что результаты могут не соответствовать порядку. Поэтому, в основном, вызовите fetchNext 100 раз, объедините результаты, сохраните

Альтернативой может быть использование parallel.pool.DataQueue в вашем файле l oop, возврат данных через send и сбор их с помощью обратного вызова afterEach.

0 голосов
/ 14 марта 2020

э-э, я не знаю, должно ли это существовать. Вам придется собирать данные от всех работников. Быстрый обходной путь будет, если вы просто оберните обычный for l oop вокруг parfor:

stp = 100;
for j = 1:stp:N_boost/stp
   parfor i = j:stp

                      ...

           out1(i,:) = result1;
           out2(i,:) = result2;

       if mod(i,100) == 0
        % Here, I want to save out1 and out2 (export with .mat file) 

       end
  end
end
...