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

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

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

gather

分散配列データまたは gpuArray をローカル ワークスペースに転送する

構文

X = gather(A)
X = gather(C, lab)

説明

X = gather(A) は、対話型分散配列のデータを収集するために spmd ステートメント、pmode または並列ジョブ内で使用することも、あるいは分散配列のデータを収集するために spmd ステートメント外で使用することもできます。これを spmd ステートメント、 pmode または並列ジョブ内で実行する場合、X は配列の全データを各ワーカーにもつ、複製された配列となります。これを spmd ステートメント外で実行する場合、X は複数のワーカーから転送されたデータをもつ、ローカル ワークスペースの配列となります。

X = gather(distributed(X)) または X = gather(codistributed(X)) は元の配列 X を返します。

X = gather(C, lab) は対話型分散配列 C をバリアント配列 X に変換し、ワーカー lab は全データを含み、その他すべてのワーカーは X が 0 行 0 列の空の倍精度配列となるようにします。

gpuArray 入力に対し、X = gather(A) は GPU からローカル ワークスペースにデータを転送します。

gather の入力引数が分散配列、対話型分散配列、gpuArray のいずれでもない場合、出力は入力と同じになります。

魔方陣をワーカーに分散し、行列全体を各ワーカーに収集してから、続いてクライアントに収集します。このコードはすべてのワーカーとクライアントで M = magic(n) を実行した場合と同じ結果になります。

n = 10;
spmd
  C = codistributed(magic(n));
  M = gather(C) % Gather data on all workers
end
S = gather(C) % Gather data on client

分散配列間では実行できない演算用に、C の全データをワーカー 1 に収集します。

n = 10;
spmd
  C = codistributed(magic(n));
  out = gather(C, 1);
  if labindex == 1
    % Characteristic sum for this magic square:
    characteristicSum = sum(1:n^2)/n;
    % Ensure that the diagonal sums are equal to the 
    % characteristic sum:
    areDiagonalsEqual = isequal ...
      (trace(out), trace(flipud(out)), characteristicSum)
  end
end
Lab 1:
  areDiagonalsEqual =
    1

分散配列の全データをクライアント上の D に収集します。

n = 10;
D = distributed(magic(n)); % Distribute data to workers
M = gather(D) % Return data to client

GPU 演算の結果をローカル ワークスペースに収集します。

G = gpuArray(rand(1024,1));
F = sqrt(G); %input and output both gpuArray
W = gather(G); % Return data to client
whos
Name         Size            Bytes  Class

F         1024x1               108  gpuArray
G         1024x1               108  gpuArray
W         1024x1              8192  double

詳細

すべて展開する

ヒント

gather は、実行される全ワーカーのワークスペースに対話型分散配列をまとめるか、または MATLAB® クライアントに分散配列を集めますが、両方は行わないことに注意してください。spmd ステートメント内で gather を使用する場合、収集された配列にクライアント上でアクセスするには、それに対応する Composite オブジェクトを使用します。「Composite を使用するワーカー変数へのアクセス」を参照してください。gather を並列ジョブ内で実行する場合、収集された配列はタスクからの出力引数としてクライアントに返すことができます。

関数 gather にはすべてのワーカー間での通信が必要とされるため、if labindex == 1 などの条件付きステートメント内部にこの関数を置いて、全ワーカーからのデータを単一のワーカーに収集することはできません。

参考

| | | |

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