ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

spmd

並列プールのワーカーでコードを並列実行する

構文

spmd, statements, end
spmd(n), statements, end
spmd(m,n), statements, end

説明

spmd (Single Program Multiple Data) ステートメントの一般的な形式は、次のとおりです。

spmd
    statements
end

spmd, statements, endspmd ステートメントを単一行で定義します。MATLAB® は、statements で示された spmd の本体を複数の MATLAB ワーカーで同時に実行します。spmd ステートメントは、Parallel Computing Toolbox がインストールされている場合に限り使用できます。ステートメントを並列実行するには、最初に parpool を使用して MATLAB ワーカーのプールを開くか、並列設定でプールの自動起動を許可しなければなりません。

spmd ステートメントの本体において、各 MATLAB ワーカーには一意の labindex 値が設けられ、numlabs によりブロックを並列で実行するワーカーの合計数が指定されます。spmd ステートメントの本体内では、通信ジョブの通信関数 (labSendlabReceive など) はワーカー間でデータを転送できます。

spmd ステートメントの本体から返される値は、MATLAB クライアントで Composite オブジェクトに変換されます。Composite オブジェクトには、リモートの MATLAB ワーカーに保存されている値への参照が含まれます。この値は cell 配列インデックスを使用して取得できます。Composite がクライアントに存在し並列プールが開いている限り、ワーカーにある実際のデータは、以降の spmd 実行でも引き続き使用可能です。

既定では、MATLAB はプール内のすべてのワーカーを使用します。どのプールもアクティブではない場合、MATLAB はプールを作成し、そのプールのすべてのワーカーを使用します。設定でプールの自動作成が許可されていない場合、MATLAB はローカルでブロック本体を実行し、必要に応じて Composite オブジェクトを作成します。いずれかのワーカーが parfeval 要求を実行中の場合、spmd(0) を使用しない限り、spmd ブロックを実行することはできません。

spmd(n), statements, end は、並列プールで n 個のワーカーが使用可能な場合、statements を評価する MATLAB ワーカーの正確な数を n を使用して指定します。十分な数のワーカーが使用可能でない場合は、エラーがスローされます。n がゼロの場合、MATLAB は、使用可能なプールがない場合と同様にブロックの本体をローカルで実行し、Composite オブジェクトを作成します。

spmd(m,n), statements, end は最小で m 個、最大で n 個のワーカーを使用して statements を評価します。十分な数のワーカーが使用可能でない場合は、エラーがスローされます。m はゼロとすることもでき、その場合、使用可能なワーカーがなければブロックはローカルで実行されます。

spmd と Composite オブジェクトの詳細については、配列の分散および SPMD の実行を参照してください。

メモ:

clearを使用する場合は、parforspmd ではなくparfevalOnAllを使用してください。これにより、ワークスペースの透過性が維持されます。parfor ループ内での透過性の確保を参照してください。

簡単な計算を並列で実行し、その結果をプロットします。

parpool(3)
spmd
  % build magic squares in parallel
  q = magic(labindex + 2);
end
for ii=1:length(q)
  % plot each magic square
  figure, imagesc(q{ii});
end
delete(gcp)

ヒント

  • spmd ブロックは既存の並列プールのワーカーで実行されます。プールがない場合、並列設定でプールの自動起動が無効になっていなければ、spmd により新しい並列プールが起動されます。並列プールがなく、spmd による並列プールの起動もできない場合、コードはクライアント セッションで逐次実行されます。

  • 並列プールのクラスター プロファイルの AutoAttachFiles プロパティが true に設定されている場合、MATLAB は spmd ブロックを解析して実行に必要なコード ファイルを決定し、自動的にそれらのファイルを並列プール ジョブに加えて、コードをワーカーで使用できるようにします。

  • spmd を使用する際の制約と制限の詳細については、複数のデータセットでの単一プログラムの実行を参照してください。

R2008b で導入