сбор

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

Синтаксис

X = gather(A)
X = gather(C,lab)

Описание

X = gather(A) может действовать в операторе spmd, pmode, или связывающемся задании, чтобы собраться элементы codistributed массива, или вне оператора spmd, чтобы собрать элементы распределенного массива. Если вы выполняете эту внутреннюю часть оператор spmd, pmode, или связывающееся задание, X является реплицированным массивом со всеми элементами массива на каждом рабочем. Если вы выполняете эту внешнюю сторону оператор spmd, X является массивом в локальной рабочей области с элементами, переданными от нескольких рабочих.

X = gather(distributed(X)) или X = gather(codistributed(X)) возвращают исходный массив X.

X = gather(C,lab) преобразовывает codistributed массив C в различный массив X, такой, что все элементы содержатся на рабочем lab, и X является пустым 0 на 0 дважды на всех других рабочих.

Для входа gpuArray X = gather(A) передает элементы массива от графического процессора до локальной рабочей области.

Если входной параметр к gather не является распределенным, codistributed или gpuArray, вывод совпадает с входом.

Примеры

Распределите магический квадрат на своих рабочих, затем соберите целую матрицу на каждого рабочего и затем на клиент. Этот код приводит к эквиваленту 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

Соберите все элементы от распределенного массива D на клиент.

n = 10;
D = distributed(magic(n)); % Distribute array to workers
M = gather(D)              % Return array to client

Соберите результаты операции 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

Советы

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

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

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

| | | | | |

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

Для просмотра документации необходимо авторизоваться на сайте