parfor
ワーカーでfor
ループの反復を並列実行
構文
説明
parfor
は、並列プール内のワーカーでloopVar
=initVal
:endVal
;statements
; endfor
ループの反復を並列実行します。
MATLAB®は、loopVar
の値がinitVal
からendVal
までの範囲に含まれる間、statements
内のループ本体のコマンドを実行します。loopVar
は 1 ずつ増加する整数値のベクトルを指定します。Parallel Computing Toolbox™ がある場合は、マルチコア コンピューターまたはクラスター上のワーカーからなる並列プールでstatements
の反復を実行できます。for
ループと同様、statements
に単一または複数の行を含めることができます。
parfor
がスループットの増加にどう役立つかについては、parfor を使用するタイミングの決定を参照してください。
parfor
は、次の点で従来のfor
ループとは異なります。
ループの反復が非確定的な順序で並列実行されます。これは、
parfor
を使用するためにコードの変更が必要になる場合があるということです。詳しいヘルプは、for ループから parfor ループへの変換を参照してください。ループ反復は、連続的に増加する整数値でなければなりません。
parfor
ループの本体は独立していなければなりません。あるループの反復が前の反復に依存していてはなりません。これは、反復が非確定的な順序で実行されるためです。詳しいヘルプは、parfor ループ反復が独立していることの確認を参照してください。ある
parfor
ループを他のparfor
ループ内で使用することはできません。詳しいヘルプは、入れ子にされた parfor ループおよび for ループ、およびその他の parfor の要件を参照してください。
parfor (
はloopVar
=initVal
:endVal
,M
);statements
; endM
を使用して、ループ本体でstatements
の評価に使用する並列プールの最大ワーカー数を指定します。M
は非負の整数でなければなりません。
既定では、MATLAB は並列プール内で使用可能なワーカーを使用します。[ホーム]タブの[環境]セクションで、[並列]、[並列基本設定]を選択してワーカー数を変更することができます。parpool
を使用して、並列プール内の既定のワーカー数をオーバーライドできます。プールに使用可能なワーカーがない場合やM
が 0 の場合でも、MATLAB はループ本体を非確定的な順序で実行しますが、これは並列実行ではありません。コードをテストするときには、この構文を使用して並列実行と逐次実行を切り替えます。
この構文を使用して反復を並列で実行するには、ワーカーの並列プールが必要です。既定では、parfor
を実行すると、既定のクラスター プロファイルで定義されたクラスターにワーカーの並列プールが自動的に作成されます。既定のクラスターは[local]です。[並列基本設定]でクラスターを変更できます。詳細については、並列基本設定の指定を参照してください。
parfor (
は、loopVar
=initVal
:endVal
,选择
);statements
; end选择
を使用して、ループ本体でのstatements
の評価に使用するリソースを指定します。parfor
のオプション セットを作成するには、関数parforOptions
を使用します。この方法では、最初に並列プールを作成せずにparfor
をクラスター上で実行して、parfor
により反復をワーカーのサブレンジに分割する方法を制御できます。
例
入力引数
ヒント
以下の場合に
parfor
ループを使用します。簡単な計算のループ反復が多数ある場合。
parfor
は、ループ反復をグループに分割し、各スレッドで 1 つのグループの反復を実行できるようにします。実行に長時間かかるループ反復がいくつかある場合。
ループの反復が他の反復の結果に依存する場合は、
parfor
ループを使用しないでください。リダクションはこのルールの例外です。"リダクション"変数は、すべての反復に全体として依存する一方で、反復順序には依存しない値を累積します。詳細については、リダクション変数を参照してください。
parfor
を使用する際、結果を取得するにはループが完了するまで待たなければなりません。クライアントの MATLAB がブロックされ、ループを早期に終了することができません。中間結果を取得する場合や、for
ループを早期終了する場合は、代わりにparfeval
を試用してください。クラスター オブジェクトを指定しない限り、
parfor
ループは既存の並列プールで実行されます。プールがない場合、並列基本設定でプールの自動起動が無効になっていなければ、parfor
により新しい並列プールが起動されます。並列プールがなく、parfor
による並列プールの起動もできない場合、ループはクライアント セッションで逐次実行されます。並列プールのクラスター プロファイルで
AutoAttachFiles
プロパティがtrue
に設定されている場合、MATLAB はparfor
ループを解析して実行に必要なコード ファイルを決定します。listAutoAttachedFiles
を参照してください。次に、MATLAB はそれらのファイルを自動で並列プールに加え、ワーカーでコードを使用できるようにします。スクリプトを
parfor
ループ内で直接呼び出すことはできません。ただし、スクリプトを呼び出す関数を呼び出すことは可能です。parfor
ループ内でclear
を使用しないでください。ワークスペースの透過性に違反します。parfor ループまたは spmd ステートメント内での透過性の確保を参照してください。parfor
ループを使用する代わりに、parsim
コマンドを使用して Simulink®モデルを並列実行できます。Simulink の並列使用の詳細と例については、Running Multiple Simulations(Simulink)を参照してください。