Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

gather

로컬 작업 공간으로 분산 배열 또는 gpuArray 전송

설명

예제

X = gather(A)는 다음 배열 데이터에 대해 연산을 수행할 수 있습니다.

  • gpuArray: GPU에서 A의 요소를 로컬 작업 공간으로 전송하여 X에 할당합니다.

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

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

tall형 배열과 같은 다른 데이터 유형에 대해 gather를 호출할 수 있습니다(gather (tall) 항목 참조). 데이터 유형이 수집을 지원하지 않는 경우에는 gather가 아무런 효과가 없습니다.

GPU 배열 또는 분산 배열을 수집하는 작업은 비용이 많이 들 수 있습니다. 작업 결과를 이러한 유형의 배열을 지원하지 않는 함수에서 사용해야 하는 경우가 아니라면 일반적으로 수집 작업은 필요하지 않습니다. 함수 지원에 대한 자세한 내용은 GPU에서 MATLAB 함수 실행하기 또는 분산 배열을 사용하여 MATLAB 함수 실행 항목을 참조하십시오.

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는 0×0의 빈 double형입니다.

[X1,X2,...,Xn] = gather(C1,C2,...,Cn,lab)은 공동분산 배열 C1,C2,...,Cn을 대응하는 출력값 X1,X2,...,Xn으로 수집하는데, 모든 요소는 워커 lab에 포함됩니다. 입력 인수 개수와 출력 인수 개수는 일치해야 합니다.

예제

모두 축소

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       Attributes

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

분산 배열 D의 모든 요소를 클라이언트에 수집합니다.

n = 10;
parpool("local",4);
D = distributed(magic(n)); % Distribute array to workers
M = gather(D)              % Return array to client

모든 워커에 마방진을 분산한 다음 전체 행렬을 모든 워커에 수집한 후 클라이언트에 수집합니다. 이 코드는 모든 워커 및 클라이언트에서 M = magic(n)을 실행할 때와 결과가 동일합니다.

n = 10;
parpool("local",4);
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
Worker 1: 
  
  areDiagonalsEqual =
  
    logical
  
     1
  

입력 인수

모두 축소

수집할 배열로, gpuArray, 분산 배열 또는 공동분산 배열로 지정됩니다.

gather는 자신이 실행되는 모든 워커의 작업 공간에서, 또는 MATLAB 클라이언트에서 각각(즉, 둘 다는 아님) 공동분산 배열 또는 분산 배열을 조합합니다. spmd 문 내에서 gather를 사용하는 경우, 수집된 배열은 해당하는 Composite 객체를 통해 클라이언트에서 액세스할 수 있습니다. Access Worker Variables with Composites 항목을 참조하십시오. 통신 작업에서 gather를 실행하는 경우, 수집된 배열을 태스크의 출력 인수로 클라이언트에 반환할 수 있습니다.

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

버전 내역

R2006b에 개발됨