上のドキュメントから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はありません。