gather

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

Описание

пример

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

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

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

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

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

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

[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

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

Входные параметры

свернуть все

Массив для сбора, заданный как gpuArray, распределенный массив или кодовый распределенный массив.

Совет

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

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

Введенный в R2006b