ドキュメンテーション

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

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 列の空の double 配列となるようにします。

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

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

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

n = 10;
spmd
  C = codistributed(magic(n));
  M = gather(C) % Gather all elements to all workers
end
S = gather(C)   % Gather elements to 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 array to workers
M = gather(D)              % Return array to client

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

G = gpuArray(rand(1024,1));
F = sqrt(G);   % Input and output are both gpuArray
W = gather(G); % Return array to workspace
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 などの条件付きステートメント内部にこの関数を置いて、全ワーカーからのデータを単一のワーカーに収集することはできません。

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