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 от графического процессора до локальной рабочей области и присваивает их X.

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

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

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

[X1,X2,...,Xn] = gather(C1,C2,...,Cn,lab) собирает codistributed массивы C1,C2,...,Cn в соответствующие выходные параметры X1,X2,...,Xn, со всеми элементами на рабочем lab. Количество входных параметров и выходных аргументов должно соответствовать.

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

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

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

| | | | |

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