Execute code in parallel on workers of parallel pool
spmd, statements, end
spmd(n), statements, end
spmd(m,n), statements, end
The general form of an spmd
(single program,
multiple data) statement is:
spmd statements end
spmd, statements, end
defines an spmd
statement
on a single line. MATLAB® executes the spmd
body
denoted by statements
on several MATLAB workers
simultaneously. The spmd
statement can be used
only if you have Parallel Computing Toolbox. To execute the statements
in parallel, you must first open a pool of MATLAB workers using parpool
or have your parallel prefences
allow the automatic start of a pool.
Inside the body of the spmd
statement, each MATLAB worker
has a unique value of labindex
,
while numlabs
denotes the
total number of workers executing the block in parallel. Within the
body of the spmd
statement, communication functions
for communicating jobs (such as labSend
and labReceive
) can transfer data between
the workers.
Values returning from the body of an spmd
statement
are converted to Composite
objects
on the MATLAB client. A Composite object contains references
to the values stored on the remote MATLAB workers, and those
values can be retrieved using cell-array indexing. The actual data
on the workers remains available on the workers for subsequent spmd
execution,
so long as the Composite exists on the client and the parallel pool
remains open.
By default, MATLAB uses all workers in the pool. When there
is no pool active, MATLAB will create a pool and use all the
workers from that pool. If your preferences do not allow automatic
pool creation, MATLAB executes the block body locally and creates
Composite objects as necessary. You cannot execute an spmd
block
if any worker is busy executing a parfeval
request,
unless you use spmd(0)
.
spmd(n), statements, end
uses n
to
specify the exact number of MATLAB workers to evaluate statements
,
provided that n
workers are available from the
parallel pool. If there are not enough workers available, an error
is thrown. If n
is zero, MATLAB executes the
block body locally and creates Composite objects, the same as if there
is no pool available.
spmd(m,n), statements, end
uses a minimum
of m
and a maximum of n
workers
to evaluate statements
. If there are not enough
workers available, an error is thrown. m
can be
zero, which allows the block to run locally if no workers are available.
For more information about spmd
and Composite
objects, see Distribute Arrays and Run SPMD.
Use parfevalOnAll
instead
of parfor
or spmd
if you
want to use clear
.
This preserves workspace transparency. See Ensure Transparency in parfor-Loops.
Perform a simple calculation in parallel, and plot the results:
parpool(3) spmd % build magic squares in parallel q = magic(labindex + 2); end for ii=1:length(q) % plot each magic square figure, imagesc(q{ii}); end delete(gcp)
An spmd
block runs on the workers
of the existing parallel pool. If no pool exists, spmd
will
start a new parallel pool, unless the automatic starting of pools
is disabled in your parallel preferences. If there is no parallel
pool and spmd
cannot start one, the code runs serially
in the client session.
If the AutoAttachFiles
property
in the cluster profile for the parallel pool is set to true
,
MATLAB performs an analysis on an spmd
block
to determine what code files are necessary for its execution, then
automatically attaches those files to the parallel pool job so that
the code is available to the workers.
For information about restrictions and limitations
when using spmd
, see Run Single Programs on Multiple Data Sets.