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

gather

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

構文

X = gather(A)
[X1,X2,...,Xn] = gather(A1,A2,...,,Xn)
X = gather(C,lab)
[X1,X2,...,Xn] = gather(C1,C2,...,Cn,lab)

説明

X = gather(A) は、次の配列データを処理できます。

  • gpuArray: A の要素を GPU からローカル ワークスペースに転送し、X に割り当てます。

  • spmd ステートメントの外にある分散配列: 複数のワーカーから A の要素をローカル ワークスペースに収集し、X に割り当てます。

  • spmd ステートメントまたは通信ジョブの中にある対話型分散配列: A の要素を収集して、すべてのワーカーの X に複製します。

gather は、tall 配列 (gather (tall) を参照) など他のデータ型についても呼び出せます。データ型が収集をサポートしていない場合、gather を実行しても効果はありません。

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

[X1,X2,...,Xn] = gather(A1,A2,...,,Xn) は複数の配列 A1,A2,...,,An を収集し、対応する出力 X1,X2,...,Xn を生成します。入力引数の数と出力引数の数は一致しなければなりません。

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

[X1,X2,...,Xn] = gather(C1,C2,...,Cn,lab) は対話型分散配列 C1,C2,...,Cn を収集して、対応する出力 X1,X2,...,Xn を生成します。これにはワーカー lab のすべての要素が含まれます。入力引数の数と出力引数の数は一致しなければなりません。

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

すべて折りたたむ

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

すべての要素を分散配列 D からクライアントに収集します。

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

魔方陣をワーカーに分散し、行列全体を各ワーカーに収集してから、続いてクライアントに収集します。このコードはすべてのワーカーとクライアントで 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

ヒント

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

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

R2006b で導入