如何在PARFOR循环中定期保存矩阵



我一直在Matlab中使用并行循环(Parfor(,这是我的部分代码。(它应该运行几天,所以我想定期保存我的输出。

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

如何为每100次迭代保存out1out2

(为每100次迭代保存工作空间对我来说也没问题(

提前感谢!

嗯,我不知道这是否应该存在。你必须从所有员工那里收集数据。一个快速的解决方法是,如果您只在parfor:周围缠绕一个正常的for循环

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

我的建议是使用parfeval重写代码,然后可以调用fetchNext来获得输出。请记住,fetchNext返回索引是因为结果可能不按顺序出现。所以基本上调用fetchNext 100次,将结果拼接在一起,保存。

另一种选择可能是在parfor循环中使用parallel.pool.DataQueue,通过send返回数据,并使用afterEach回调收集数据。

相关内容

  • 没有找到相关文章

最新更新