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( は、pool,___), statements, endparallel.Pool オブジェクト pool で指定された並列プールで statements を評価します。この構文は、gcp 関数から返されるプール以外のプールで spmd ステートメントを評価する場合に使用します。 (R2025a 以降)
例
入力引数
ヒント
spmdブロックは既存の並列プールのワーカーで実行されます。プールがない場合、並列設定でプールの自動起動が無効になっていなければ、spmdにより新しい並列プールが起動されます。並列プールがなく、spmdによる並列プールの起動もできない場合、コードはクライアント セッションで逐次実行されます。並列プールのクラスター プロファイルの
AutoAttachFilesプロパティがtrueに設定されている場合、MATLAB はspmdブロックを解析して実行に必要なコード ファイルを決定し、自動的にそれらのファイルを並列プール ジョブに加えて、コードをワーカーで使用できるようにします。spmdを使用する際の制約と制限の詳細については、複数のデータセットでの単一プログラムの実行を参照してください。spmdおよび他の並列プログラミング構成のパフォーマンスの詳細については、spmd、parfor、および parfeval からの選択を参照してください。
拡張機能
バージョン履歴
R2008b で導入参考
batch | Composite | spmdReduce | spmdIndex | parallel.pool.Constant | parpool | spmdSize
