各PARFOR反復の出力を保存するのに苦労していますが、これまで成功しませんでした。私はオンラインでたくさん検索しましたが、いくつかの公式の新しいグループの回答によると、PARFORでの節約に対処する(つまり、「透明性」の問題に対処する)正しい方法は、次の方法で外部関数を使用することです(基本例) :
parfor i=1:120
display(i);
[LL ll] = eig(rand(1000,1000));
record(:,i) = diag(ll);
samplesave('save.mat',record(:,i),i);
end
一緒に
function samplesave(fname, data,i)
persistent st;
store(:,i)=data;
save(fname);
end
問題は、「st」をPERSISTENTとして宣言すると、同じワーカーの呼び出し全体で変数が「persistent」になるが、PARFORループ全体では作成されないため、任意の時点で、保存できた最後のワーカーの履歴全体しか得られないことです。 ; (別のワーカーからの)次のPARFOR反復は、このレコードをそのワーカーの(のみ)履歴全体で上書きします。
すべてのワーカーの履歴を段階的に保存するにはどうすればよいですか?
ありがとうございました、