This is machine translation

Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Translate This Page

MathWorks Machine Translation

The automated translation of this page is provided by a general purpose third party translator tool.

MathWorks does not warrant, and disclaims all liability for, the accuracy, suitability, or fitness for purpose of the translation.

Ensure Transparency in parfor-Loops or spmd
Statements

The body of a parfor-loop or spmd block
must be transparent. Transparency means that
all references to variables must be visible in the text of the code.

In the following examples, the variable X is
not transferred to the workers. Only the character vector 'X' is
passed to eval, and X is not
visible as an input variable in the loop or block body. As a result, MATLAB® issues
an error at run time.

X = 5;
parfor ii = 1:4
eval('X');
end

X = 5;
spmd
eval('X');
end

Similarly, you cannot clear variables from a workspace by executing clear inside a parfor or spmd statement:

Alternatively, you can free up memory used by a variable by
setting its value to empty when it is no longer needed.

parfor ii = 1:4
<statements...>
X = [];
<statements...>end

In the case of spmd blocks, you can clear
its Composite from the client workspace.

In general, the requirement for transparency restricts all dynamic
access to variables, because the entire variable might not be present
in any given worker. In a transparent workspace, you cannot create,
delete, modify, access, or query variables if you do not explicitly
specify these variables in the code.

Examples of other actions or functions that violate transparency
in a parfor-loop include:

If a script attempts to read or write variables of
the parent workspace, then running this script can cause a transparency
violation. To avoid this issue, convert the script to a function,
and call it with the necessary variables as input or output arguments.

Note

Transparency applies only to the direct body of the parfor or spmd construct,
and not to any functions called from there. The workaround for save and load is
to hide the calls to save and load inside
a function.

MATLAB does successfully execute eval and evalc statements
that appear in functions called from the parfor body.

Parallel Simulink Simulations

You can run Simulink® models in parallel with the parsim command
instead of using parfor-loops. For more information
and examples of using Simulink in parallel, see Run Multiple Simulations (Simulink).

If your Simulink model requires access to variables
contained in a .mat file, you must load these parameters
in the workspace of each worker. You must do this before the parfor-loop,
and after opening parpool. To achieve this, you
can use spmd or parfevalOnAll, as shown in the examples.

spmd
evalin('base', 'load(''path/to/file'')')
end

parfevalOnAll(@evalin, 0, 'base', 'load(''path/to/file'')')

If your model also requires variables defined in the
body of your MATLAB script, you must use assignin or evalin to move these variables to the
base workspace of each worker, in every parfor iteration.