exponenta event banner

собраться

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

Описание

пример

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

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

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

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

Вы можете позвонить gather для других типов данных, таких как массивы tall (см. 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. Количество входных и выходных аргументов должно совпадать.

Примеры

свернуть все

Соберите результаты операции графического процессора в рабочей области 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