ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

分散配列

分散配列と対話型分散配列

MATLAB クライアントでは分散配列を作成でき、そのデータは開いている並列プールのワーカーに格納されます。分散配列は単一の次元内で、大きさが 1 でない最後の次元に沿って、その次元でできるだけ均等にワーカー間に分割されます。分散配列を作成する際、分散の詳細は制御できません。

対話型分散配列は、spmd ステートメント、pmode または並列ジョブの内部で、ワーカー自体の上での実行により作成できます。対話型分散配列を作成する際は、次元や分割など、分散のあらゆる局面を制御できます。

分散配列と対話型分散配列の関係は観点の 1 つです。対話型分散配列は、それを作成または操作するコードの実行元となるワーカーの間で分割されます。分散配列は並列プール内のワーカー間で分割されます。クライアントで分散配列を作成すると、spmd ステートメント内で対話型分散配列としてこの配列にアクセスできます。spmd ステートメント内で対話型分散配列を作成すると、クライアント内で分散配列としてこの配列にアクセスできます。spmd ステートメントを使用した場合のみ、同じ配列データに 2 つの異なる観点からアクセスできます。

分散配列の作成

分散配列は、いくつかの方法で作成できます。

  • 関数 distributed を使用して、既存の配列をクライアント ワークスペースから並列プールのワーカーに分散する。

  • オーバーロードされた分散オブジェクトのメソッドを使用して、ワーカーで分散配列を直接に作成する。この手法では配列があらかじめクライアントに存在している必要がないため、クライアント ワークスペースのメモリ要件が少なくて済みます。このようなオーバーロードされた関数には distributed.eyedistributed.rand などがあります。完全な一覧は、distributed オブジェクトのリファレンス ページを参照してください。

  • spmd ステートメント内で対話型分散配列を作成し、spmd ステートメント外でその配列に分散配列としてアクセスする。これにより、既定の設定以外の分散スキームを使用できます。

上記のうち最初の 2 つの手法では、配列の作成に spmd を使用していませんが、こうして作成された配列の操作に spmd がどのように使用されるのかを確認できます。以下に例を示します。

クライアント ワークスペースで配列を作成し、それを分散配列にします。

parpool('local',2) % Create pool
W = ones(6,6);
W = distributed(W); % Distribute to the workers
spmd
    T = W*2; % Calculation performed on workers, in parallel.
             % T and W are both codistributed arrays here.
end
T            % View results in client.
whos         % T and W are both distributed arrays here.
delete(gcp)  % Stop pool

対話型分散配列の作成

対話型分散配列は、次のいずれかの方法で作成できます。

  • spmd ステートメント、並列ジョブまたは pmode 内で関数 codistributed を使用して、そのジョブを実行するワーカーに既に存在しているデータを対話型で分散する。

  • オーバーロードされた対話型分散オブジェクトのメソッドを使用して、ワーカーで対話型分散配列を直接に作成する。この手法では、ワーカーにあらかじめその配列が存在している必要がありません。このようなオーバーロードされた関数には codistributed.eyecodistributed.rand などがあります。完全な一覧は、codistributed オブジェクトのリファレンス ページを参照してください。

  • spmd ステートメント外で分散配列を作成し、同じ並列プールで実行される spmd ステートメント内でその配列に対話型分散配列としてアクセスする。

次の例では、既定ではない分散スキームを使用して、spmd ステートメント内で対話型分散配列を作成します。まず、3 番目の次元に沿って 1 次元の分散を定義し、ワーカー 1 に 4 つの部分、ワーカー 2 に 12 の部分を割り当てます。続いて、ゼロからなる 3 x 3 x 16 の配列を作成します。

parpool('local',2) % Create pool
spmd
    codist = codistributor1d(3, [4, 12]);
    Z = codistributed.zeros(3, 3, 16, codist);
    Z = Z + labindex;
end
Z  % View results in client.
   % Z is a distributed array here.
delete(gcp) % Stop pool

対話型分散配列についての詳細は、「対話型分散配列の取り扱い」を参照してください。

この情報は役に立ちましたか?