Глобальная операция через всех рабочих
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