Main Content

gather

로컬 작업 공간으로 분산 배열, Composite 객체 또는 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,...,An)은 여러 배열 A1,A2,...,An을 대응하는 출력값 X1,X2,...,Xn으로 수집합니다. 입력 인수 개수와 출력 인수 개수는 일치해야 합니다.

예제

X = gather(Cd,destination)은 공동분산 배열 Cd를 Variant 배열 X로 변환하여 모든 요소가 destination에서 지정된 워커에 포함되도록 합니다. 그리고 X는 다른 모든 워커에서 0×0의 빈 double형입니다.

[X1,X2,...,Xn] = gather(Cd1,Cd2,...,Cdn,destination)은 공동분산 배열 Cd1,Cd2,...,Cdn을 대응하는 출력값 X1,X2,...,Xn으로 수집하며, 모든 요소는 destination에서 지정된 워커에 포함됩니다. 입력 인수 개수와 출력 인수 개수는 일치해야 합니다.

예제

X = gather(Cp)는 여러 워커에 있는 Composite 배열 Cp의 모든 요소를 로컬 작업 공간으로 수집하여 셀형 배열 X에 할당합니다. X의 셀 개수는 Cp에서 참조하는 워커 개수에 따라 달라집니다. (R2023a 이후)

[X1,X2,...,Xn] = gather(Cp1,Cp2,...,Cpn)은 Composite 배열 Cp1,Cp2,...,Cpn을 대응하는 셀형 배열 X1,X2,...,Xn에 수집합니다. 입력 인수 개수와 출력 인수 개수는 일치해야 합니다. (R2023a 이후)

예제

모두 축소

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('Processes',4);
D = distributed(magic(n)); % Distribute array to workers
M = gather(D)              % Return array to client

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

n = 10;
parpool('Processes',4);
spmd
  Cd = codistributed(magic(n));
  M = gather(Cd); % Gather all elements to all workers
end
S = gather(Cd)   % Gather elements to client

분산 배열 전체에서 수행할 수 없는 연산의 경우 Cd의 모든 요소를 워커 1에 수집합니다.

n = 10;
spmd
  Cd = codistributed(magic(n));
  out = gather(Cd,1);
  if spmdIndex == 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
  

R2023a 이후

병렬 워커에 저장된 Composite 배열 Cp의 모든 요소를 클라이언트에 수집합니다.

spmd 문을 사용하여 워커에 마방진을 만들고 클라이언트에 Composite 배열 Cp를 만듭니다.

n = 10
p = parpool('Processes',4);
spmd
    Cp = magic(n);
end

워커에 저장된 결과를 클라이언트에 수집합니다.

results = gather(Cp)
results =

  1×4 cell array

    {10×10 double}    {10×10 double}    {10×10 double}    {10×10 double}

입력 인수

모두 축소

수집할 배열로, gpuArray, distributed 배열 또는 codistributed 배열로 지정됩니다.

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

R2023a 이후

수집할 Composite 배열로, Composite 배열로 지정됩니다.

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

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

버전 내역

R2006b에 개발됨

모두 확장