Matlab で parfor を使用すると問題が発生しました。parfor ループ内で呼び出される関数内で以下のコードを実行します。
- matlabpool を開くと、関数でプログラムがクラッシュし
saveas
ます。 - matlabpool を開かなければ、すべてうまくいきます。
- 両方の呼び出しにコメントする
surf
と、matlabpool が開いていても、すべてが正常に機能します。
私は通常、.pdf 形式で名前を付けて保存しますが、.fig 形式で名前を付けて保存すると、すべてうまくいきます。.fig 形式は、問題を引き起こさない唯一の形式です。もちろん、matlabpool open を使用した parfor ではステップインできないため、並列ループをデバッグすることはできません。したがって、matlabpool open がないと、すべての変数が適切であることがわかります。
何か不足していますか?parfor ループ内で surf を使用すると、既知の問題が見つかりません。本当の問題がどこにあるのかを理解しようとする奇妙な問題が多すぎるので、誰かが同様の問題を抱えているかどうか尋ねます。
threads=4;
matlabpool(threads);
parfor i=1:threads
t=getCurrentTask();
tmpPath=['tmp' num2str(t.ID)];
importaData = open([tmpPath '\' 'Title','.mat']);
if isempty(importaData) == 0
f8 = importaData.data; %clear importaData;
hf8 = figure('Name','Title','NumberTitle','off', 'Color',[1 1 1], 'visible', 'off');
hold on; grid on; subplot(f8.subplot1);
title('Title');
h = surf(f8.x1,f8.y1,f8.surfVal1); set(h, 'EdgeAlpha', 0.05); axis('square'); view(0,90);
xlabel(f8.xLabel1); ylabel(f8.yLabel1); zlabel(f8.zLabel1);
hold on; subplot(f8.subplot2);
h = surf(f8.x2,f8.y2,f8.surfVal2); set(h, 'EdgeAlpha', 0.05); axis('square'); view(0,90);
xlabel(f8.xLabel2); ylabel(f8.yLabel2); zlabel(f8.zLabel2);
cd(tmpPath);
saveas(hf8, 'Title', 'pdf'); close(hf8);
cd('..');
delete([tmpPath '\' 'Title','.mat']);
else
error = -1;
end;
end;
UP: OK、これはエラーを引き起こす完成したプログラムです:
distcomp.remoteparfor/getCompleteIntervals の使用中にエラーが発生しました (22 行目) parfor が使用しているセッションがシャットダウンされました。
私の目標はTitle.mat
、pdfファイルに保存することです。もちろん、Title.mat には一貫性のある正しいデータが含まれています。すべてのスレッドは、.mat ファイルを含む専用のディレクトリに移動する必要がありますtranslate
。プールを開かない場合、すべてが期待どおりに機能します。.fig 形式で保存すると、すべてが期待どおりに機能します。