gop

Глобальная операция через всех рабочих

Синтаксис

res = gop(FUN,x)
res = gop(FUN,x,targetlab)

Аргументы

FUN

Функция, чтобы действовать через рабочих.

x

Аргумент, чтобы функционировать F, должен быть та же переменная на всех рабочих, но может иметь различные значения.

res

Переменная, чтобы содержать результат сокращения.

targetlab

Лаборатория, к которой возвращены результаты сокращения. Это значение возвращено labindex того рабочего.

Описание

res = gop(FUN,x) сокращение через функциональный FUN из количеств x от каждого рабочего. Результат дублирован на всех рабочих.

FUN может быть указатель на любую функцию, включая написанные пользователем функции и пользовательские анонимные функции. Это должно принять два аргумента того же типа и возвратить один результат того же самого типа, таким образом, это может использоваться итеративно в форме:

  FUN(FUN(x1,x2),FUN(x3,x4))

Функциональный FUN должно быть ассоциативным, то есть,

FUN(FUN(x1,x2),x3) = FUN(x1,FUN(x2,x3))

res = gop(FUN,x,targetlab) выполняет сокращение и помещает результат в res только на рабочем, обозначенном targetlab. res установлен в [ ] на всех других рабочих.

Примеры

В этом примере показано, как вычислить сумму и максимальные значения для x среди всех рабочих.

p = parpool('local',4);
x = Composite(); 
x{1} = 3;
x{2} = 1;
x{3} = 4;
x{4} = 2;
spmd
    xsum = gop(@plus,x);
    xmax = gop(@max,x);
end
xsum{1}
10
xmax{1}
4

В этом примере показано, как горизонтально конкатенировать вектор-столбцы x от всех рабочих в матрицу. Это использует тот же параллельный пул с 4 рабочими, открытый предыдущим примером.

x{1} = [3;30];
x{2} = [1;10];
x{3} = [4;40];
x{4} = [2;20];
spmd
    res = gop(@horzcat,x);
end
res{1}
     3     1     4     2
    30    10    40    20

В этом примере показано, как использовать анонимную функцию с gop соединить векторы символов с пробелами между ними. В этом случае векторы символов создаются из labindex каждого рабочего значение.

afun = @(a,b)[a,' ',b]
spmd
    res = gop(afun,num2str(labindex));
end
res{1}
1 2 3 4

Представлено до R2006a