Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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: GPU에서 A의 요소를 로컬 작업 공간으로 전송하여 X에 할당합니다.

  • spmd 문 외부의 분산 배열: 여러 워커에 있는 A의 요소를 로컬 작업 공간으로 한데 모아 X에 할당합니다.

  • spmd 문 또는 통신 작업 내의 공동분산 배열: A의 요소를 한데 모은 후, 모든 워커에서 X로 복제합니다.

tall형 배열과 같은 다른 데이터 유형에 대해 gather를 호출할 수 있습니다(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를 변형 배열(variant array) X로 변환합니다. 이때 워커 lab에서의 X는 모든 요소를 포함하며 다른 모든 워커에서의 X는 0x0의 빈 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 객체를 통해 클라이언트에서 액세스할 수 있습니다. Access Worker Variables with Composites 항목을 참조하십시오. 통신 작업에서 gather를 실행하는 경우, 수집된 배열을 태스크의 출력 인수로 클라이언트에 반환할 수 있습니다.

gather 함수를 사용하려면 모든 워커 간에 통신이 필요하므로 if labindex == 1과 같은 조건문 내에 함수를 배치하여 모든 워커로부터 단일 워커로 데이터를 수집할 수 없습니다.

R2006b에 개발됨