このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
parfor
ワーカーで for
ループの反復を並列実行
構文
説明
parfor
は、並列プール内のワーカーで loopVar
= initVal
:endVal
; statements
; end for
ループの反復を並列実行します。
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
; end M
を使用して、ループ本体で statements
の評価に使用する並列プールの最大ワーカー数を指定します。M
は非負の整数でなければなりません。
既定では、MATLAB は並列プール内で使用可能なワーカーを使用します。既定のプロファイルの PreferredPoolNumWorkers
プロパティを使用して、並列プール内の既定のワーカー数を変更できます。既定のプール サイズに影響を及ぼす可能性のあるすべての要因については、プール サイズに影響する要因を参照してください。関数 parpool
を使用して、並列プール内の既定のワーカー数をオーバーライドできます。プールに使用可能なワーカーがない場合や M
が 0 の場合でも、MATLAB はループ本体を非確定的な順序で実行しますが、これは並列実行ではありません。コードをテストするときには、この構文を使用して並列実行と逐次実行を切り替えます。
この構文を使用して反復を並列で実行するには、ワーカーの並列プールが必要です。既定では、parfor
を実行すると、既定のプロファイルで定義された並列環境にワーカーの並列プールが自動的に作成されます。既定の並列環境は [Processes] です。プロファイルは [並列基本設定] で変更できます。詳細については、並列基本設定の指定を参照してください。
parfor (
は、loopVar
= initVal
:endVal
,opts
); statements
; endopts
を使用して、ループ本体での 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)を参照してください。
拡張機能
バージョン履歴
R2008a で導入参考
for
| gcp
| listAutoAttachedFiles
| parpool
| parfeval
| ticBytes
| tocBytes
| send
| afterEach
| parforOptions