2016-04-19 9 views
1

は、私は、次の行動Matlabの透明性が透明性に違反するのはなぜですか? Matlabの<code>parfor</code>を使用している間

parpool(2) 
parfor j=1:100 
    v = j+1; 
    clear v 
end 
> Error in ==> parallel_function>make_general_channel/channel_general at 886 
> Transparency violation error. 

I looked into itに出くわした、と確かに1がparforclearを使用することを許可されていません。

私の質問がその理由です。 vはすべての特定のワーカーの内部に作成されるため、他のワーカーに干渉することはありません。

答えて

1

Matlabは、静的コードアナライザを使用して、parforループの本体がメインワークスペースとどのように相互作用するか、つまりどの変数をワーカーに戻す必要があるかを理解します。このような('caller'として指定されたワークスペース引数で)evalevalcevalinassigninload(出力変数に割り当てられていない限り)、saveclearなどの機能の数が、によって予測できない方法で、ワークスペースを変更することができ静的アナライザー。複数の作業者が作業しているときに作業領域の完全性を保証する方法はなく、そのような機能が使用されます。

重要なことは、コマンド構文を使用してclear vthe argument is passed as a string literalなどの関数を呼び出すと、静的アナライザがクリアしようとしている変数を理解できないことを意味するため、コマンドがワークスペースに与える影響を把握します。

としてはin documentationを提案し、内部のparfor変数が使用するメモリのほとんどを解放する問題を回避するには、次のとおりです。v = [];

関連する問題