spmd
Execute code in parallel on workers of parallel pool
Syntax
spmd
statements
end
Description
spmd, defines
an statements, endspmd statement on a single line. MATLAB® executes the spmd body denoted by
statements on several MATLAB workers simultaneously. Each worker can operate on a different data
set or different portion of distributed data, and can communicate with other
participating workers while performing the parallel computations. The
spmd statement can be used only if you have Parallel Computing Toolbox™. To execute the statements in parallel, you must first create a pool
of MATLAB workers using parpool or have your parallel
settings allow the automatic start of a pool.
Inside the body of the spmd statement, each MATLAB worker has a unique value of spmdIndex, while spmdSize 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 spmdSend and spmdReceive) 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
settings 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).
For more information about spmd and Composite objects, see Distribute Arrays and Run SPMD.
Note
Use parfevalOnAll instead of
parfor or spmd if you want to
use clear. This preserves
workspace transparency. See Ensure Transparency in parfor-Loops or spmd Statements.
spmd( uses n), statements, endn 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( uses a minimum of m,n), statements, endm 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.
spmd(
evaluates pool,___), statements, endstatements on the parallel pool specified by the
parallel.Pool object
pool. Use this syntax when you want to evaluate
spmd statements on a pool other than the pool the gcp function returns. (since R2025a)
Examples
Input Arguments
Tips
An
spmdblock runs on the workers of the existing parallel pool. If no pool exists,spmdwill start a new parallel pool, unless the automatic starting of pools is disabled in your parallel settings. If there is no parallel pool andspmdcannot start one, the code runs serially in the client session.If the
AutoAttachFilesproperty in the cluster profile for the parallel pool is set totrue, MATLAB performs an analysis on anspmdblock 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.For information about the performance of
spmdand other parallel programming constructs, see Choose Between spmd, parfor, and parfeval.
Extended Capabilities
Version History
Introduced in R2008bSee Also
batch | Composite | spmdReduce | spmdIndex | parallel.pool.Constant | parpool | spmdSize
