Глобальная эксплуатация для всех работников
res = gop(FUN,x)
res = gop(FUN,x,targetlab)
| Функция для работы между работниками. |
| Аргумент для функции |
| Переменная для сохранения результата сокращения. |
| Лаборатория, в которую возвращаются результаты сокращения. Это значение возвращается данным работником |
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