上のドキュメントからparfor
:
parfor-loopの本体には、グローバル変数宣言または永続変数宣言を含めることはできません。
問題のコンテキストで、つまり、内で関数を呼び出してaparfor
を参照するglobal
場合、これは次のように変換されます。「parfor
期待される結果または意味のある結果が得られない可能性があります」。
これは完全に理にかなっています。次のことを考慮してください
Lab 1: Lab 2:
GetB(); GetB();
の内容GetB()
がこれである場合:
function GetB()
global B;
%# do something useful
B = rand;
end
B
参照されたときの値はどうなりLab 1
ますか?とLab 2
?rand
コミュニケーションのさまざまな結果はどのようになっていますか?めちゃくちゃになりそうです!
ループに適したコードを書くことは、そのコードが通常のループしか念頭に置いparfor
ていないものからのものである場合、非常に苦痛になる可能性があります。for
一般に、計算量の多いMatlabコードを作成することが事前にわかっている場合は、すべての関数とループをparfor
最初からループとして作成します。これが、このようなバグが関数のトランスコードに1日もかからない唯一の方法です。
for
からへの変換は、まったく簡単でparfor
はありません。