0
我掙扎保存每個PARFOR迭代的輸出的各個迭代,但是到現在爲止都沒有成功。我在網上搜索了很多東西,根據一些官方的新羣體回覆,處理保存在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」的持久性使變量「老大難」 在調用同一個工作的,但不跨越PARFOR環 ,所以在任何時候你只有他的全部設法保存的最後一名工人的修養;下一個PARFOR迭代(來自不同的工作人員)將用(僅)該工作人員的整個歷史覆蓋此記錄,等等。
我該如何逐步保存所有員工的歷史記錄?
謝謝
謝謝。這種需求背後的原因主要是防止由於潛在的停電/軟件崩潰導致的數據丟失,因爲我需要將腳本運行數天。一對夫婦(小)校正在你的例子是必需的:1)singleRecord處於ParToolbox行話非分類變量,並且不能以這種方式被使用,2)爲了節省,人們仍然需要調用外部函數。但是,總的來說,你的想法很有用,並且實際上可以繞開這個問題。唯一的缺點是,如果數量或迭代數量非常大,則最終會得到數千個文件。 – AndreaG
@AndreaGiannuzzi我不確定你的意思是'singleRecord'沒有被分類。我很確定它是一個臨時變量,因爲它在循環內創建的是不能在循環外部訪問的。 http://www.mathworks.com/help/toolbox/distcomp/brdqtjj-1.html#bq_of7_-5如果你發現你越來越不堪重負,你可能會考慮一個臨時目錄中明確用於保存文件的文件。 – slayton
由於parfor內部不允許「保存」,因此不起作用 – nahsivar