parfor
ループまたはspmd
ステートメント内での透過性の確保
parfor
ループまたはspmd
ブロックの本体は "透過的"でなければなりません。透過性とは、変数への参照がすべて、コードのテキスト内で可視でなければならないことを意味します。
次の例で、変数X
はワーカーに転送されません。文字ベクトル'X'
のみがeval
に渡され、X
はループまたはブロックの本体において入力変数として不可視です。その結果、MATLAB®は実行時にエラーを発行します。
X = 5;parforii = 1:4 eval('X');end |
X = 5;spmdeval('X');end |
同様に、parfor
またはspmd
ステートメント内でclear
を実行して、ワークスペースから変数を消去することはできません。
parforii = 1:4 |
spmd; clear('X');end |
別のやり方として、変数が不要になったときにその値を空にすることで、変数により使用されていたメモリを解放できます。
parforii = 1:4...>X = []; ...>end
spmd
ブロックの場合には,クライアントワークスペースから复合を消去できます。
一般に、任意のワーカーに変数全体が存在しない可能性があるため、透過性が要求される場合には変数へのすべての動的アクセスが制限されます。透過的なワークスペースでは、コード内に明示的に指定されていない変数の作成、削除、変更、アクセスまたはクエリはできません。
parfor
ループ内での透過性に違反する他のアクションまたは関数の例には、以下が含まれます。
メモ
透過性はparfor
またはspmd
の構成の直接的な本体のみに適用され、そこから呼び出される関数には適用されません。save
およびload
用の回避策は、save
およびload
の呼び出しを関数内部に隠すことです。
MATLAB は、parfor
本体から呼び出される関数に含まれるeval
およびevalc
ステートメントを正常に"実行します"。
並列の万博1manbetxシミュレーション
parfor
ループを使用する代わりに、parsim
コマンドを使用して Simulink®モデルを並列実行できます。Simulink の並列使用の詳細と例については、Running Multiple Simulations(Simulink)を参照してください。
Simulink モデルから
.mat
ファイルに含まれる変数にアクセスする必要がある場合、これらのパラメーターを各ワーカーのワークスペースに読み込まなければなりません。これは、parpool
を開いた後にparfor
ループの前で行わなければなりません。このためには、例に示すようにspmd
またはparfevalOnAll
を使用できます。spmdevalin('base','load(''path/to/file'')')end
parfevalOnAll(@evalin, 0,'base','load(''path/to/file'')')
また、MATLAB スクリプト本体で定義された変数がモデルに必要な場合、
parfor
の反復のたびにassignin
またはevalin
を使用して、それらの変数を各ワーカーのベース ワークスペースに移動しなければなりません。