spmd
並列プールのワーカーでコードを並列実行する
構文
spmd
statements
end
説明
spmd,
は statements
, endspmd
ステートメントを単一行で定義します。MATLAB® は、statements
で示された spmd
の本体を複数の MATLAB ワーカーで同時に実行します。各ワーカーは異なるデータセット、または分散データの異なる部分を処理することができ、並列計算の実行中に他の参加ワーカーと通信できます。spmd
ステートメントは、Parallel Computing Toolbox™ がインストールされている場合に限り使用できます。ステートメントを並列実行するには、まず parpool
を使用して MATLAB ワーカーのプールを作成するか、並列基本設定でプールの自動起動を許可しなければなりません。
spmd
ステートメントの本体において、各 MATLAB ワーカーには一意の spmdIndex
値が設けられ、spmdSize
によりブロックを並列で実行するワーカーの合計数が指定されます。spmd
ステートメントの本体内では、通信ジョブの通信関数 (spmdSend
や spmdReceive
など) はワーカー間でデータを転送できます。
spmd
ステートメントの本体から返される値は、MATLAB クライアントで Composite
オブジェクトに変換されます。Composite オブジェクトには、リモートの MATLAB ワーカーに保存されている値への参照が含まれます。この値は cell 配列インデックスを使用して取得できます。Composite がクライアントに存在し並列プールが開いている限り、ワーカーにある実際のデータは、以降の spmd
実行でも引き続き使用可能です。
既定では、MATLAB はプール内のすべてのワーカーを使用します。どのプールもアクティブではない場合、MATLAB はプールを作成し、そのプールのすべてのワーカーを使用します。基本設定でプールの自動作成が許可されていない場合、MATLAB はローカルでブロック本体を実行し、必要に応じて Composite オブジェクトを作成します。いずれかのワーカーが parfeval
要求を実行中の場合、spmd(0)
を使用しない限り、spmd
ブロックを実行することはできません。
spmd
と Composite オブジェクトの詳細については、配列の分散および SPMD の実行を参照してください。
メモ
clear
を使用する場合は、parfor
や spmd
ではなくparfevalOnAll
を使用してください。これにより、ワークスペースの透過性が維持されます。parfor ループまたは spmd ステートメント内での透過性の確保を参照してください。
spmd(
は、並列プールで n
), statements
, endn
個のワーカーが使用可能な場合、statements
を評価する MATLAB ワーカーの正確な数を n
を使用して指定します。十分な数のワーカーが使用可能でない場合は、エラーがスローされます。n
がゼロの場合、MATLAB は、使用可能なプールがない場合と同様にブロックの本体をローカルで実行し、Composite オブジェクトを作成します。
spmd(
は最小で m
,n
), statements, endm
個、最大で n
個のワーカーを使用して statements
を評価します。十分な数のワーカーが使用可能でない場合は、エラーがスローされます。m
はゼロとすることもでき、その場合、使用可能なワーカーがなければブロックはローカルで実行されます。
例
ヒント
spmd
ブロックは既存の並列プールのワーカーで実行されます。プールがない場合、並列基本設定でプールの自動起動が無効になっていなければ、spmd
により新しい並列プールが起動されます。並列プールがなく、spmd
による並列プールの起動もできない場合、コードはクライアント セッションで逐次実行されます。並列プールのクラスター プロファイルの
AutoAttachFiles
プロパティがtrue
に設定されている場合、MATLAB はspmd
ブロックを解析して実行に必要なコード ファイルを決定し、自動的にそれらのファイルを並列プール ジョブに加えて、コードをワーカーで使用できるようにします。spmd
を使用する際の制約と制限の詳細については、複数のデータセットでの単一プログラムの実行を参照してください。spmd
および他の並列プログラミング構成のパフォーマンスの詳細については、spmd、parfor、および parfeval からの選択を参照してください。
バージョン履歴
R2008b で導入
参考
batch
| Composite
| spmdReduce
| spmdIndex
| parallel.pool.Constant
| parpool
| spmdSize