Передайте распределенный массив или 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
.
arrayfun
| bsxfun
| codistributed
| distributed
| gpuArray
| pagefun
| pmode