## Documentation Center |

`spmd, statements, endspmd(n), statements, endspmd(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 as many workers as it finds available in the pool. When there are no MATLAB workers available, MATLAB executes the block body locally and creates Composite objects as necessary.

`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 Distributed Arrays and SPMD.

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)

Was this topic helpful?