Global operation across all workers
res = gop(FUN,x)
res = gop(FUN,x,targetlab)
| Function to operate across workers. |
| Argument to function |
| Variable to hold reduction result. |
| Lab to which reduction results are returned. This value is
returned by that worker’s
|
res = gop(FUN,x)
is the reduction via the
function FUN
of the quantities x
from each
worker. The result is duplicated on all workers.
FUN
can be a handle to any function, including user-written
functions and user-defined anonymous functions. It should accept two arguments of
the same type, and return one result of that same type, so it can be used
iteratively in the form:
FUN(FUN(x1,x2),FUN(x3,x4))
The function FUN
should be associative, that is,
FUN(FUN(x1,x2),x3) = FUN(x1,FUN(x2,x3))
res = gop(FUN,x,targetlab)
performs the reduction, and places
the result into res
only on the worker indicated by
targetlab
. res
is set to [
]
on all other workers.
This example shows how to calculate the sum and maximum values for
x
among all workers.
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
This example shows how to horizontally concatenate the column vectors of
x
from all workers into a matrix. It uses the same 4-worker
parallel pool opened by the previous example.
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
This example shows how to use an anonymous function with gop
to join character vectors with spaces between them. In this case, the character
vectors are created from each worker’s labindex
value.
afun = @(a,b)[a,' ',b] spmd res = gop(afun,num2str(labindex)); end res{1}
1 2 3 4