gather

Передайте распределенный массив или gpuArray к локальной рабочей области

Описание

пример

X = gather(A) может работать со следующими данными массива:

  • На gpuArray: Передает элементы A от графического процессора до локальной рабочей области и присваивает их X.

  • На распределенном массиве, вне spmd оператор: Собирается элементы A от нескольких рабочих к локальной рабочей области и присваивает их X.

  • На codistributed массиве, в spmd оператор или связывающееся задание: Собирается элементы A и реплицирует их в X на каждом рабочем.

Можно вызвать gather на других типах данных, таких как длинные массивы (См. gather (tall)). Если тип данных не поддерживает сбор, то gather не оказывает влияния.

Сбор массивов графического процессора или распределенных массивов может быть дорогостоящим и является обычно не необходимым, если вы не должны использовать свой результат с функциями, которые не поддерживают эти типы массивов. Для получения дополнительной информации о функциональной поддержке смотрите функции 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) преобразует codistributed массив C к различному массиву X, таким образом, что все элементы содержатся на рабочем lab, и X пустое 0 на 0 дважды на всех других рабочих.

[X1,X2,...,Xn] = gather(C1,C2,...,Cn,lab) собирает codistributed массивы 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, распределенного массива или codistributed массива.

Советы

Обратите внимание на то, что gather собирает codistributed или распределенный массив в рабочих областях всех рабочих, на которых это выполняется, или на клиенте MATLAB, соответственно, но не обоих. Если вы используете gather в spmd оператор, собранный массив доступен на клиенте через его соответствие Composite объект; смотрите доступ к Переменным Рабочего с Составными объектами. Если при запуске gather в связывающемся задании можно возвратить собранный массив в клиент как выходной аргумент от задачи.

Как gather функция требует связи между всеми рабочими, вы не можете собрать данные от всех рабочих на одного рабочего путем размещения функции в условном операторе, таких как if labindex == 1.

Смотрите также

| | | | |

Представленный в R2006b