parfor
Parallel for-loop
Syntax
Description
parfor creates a loop in a generated MEX function or in C/C++
code that runs in parallel on shared-memory multicore platforms.LoopVar = InitVal:EndVal; Statements;
end
The parfor-loop executes the Statements for
values of LoopVar between InitVal and Endval. LoopVar specifies
a vector of integer values increasing by 1.
parfor ( uses a maximum of LoopVar = InitVal:EndVal, NumThreads); Statements;
endNumThreads threads
when creating a parallel for-loop.
Examples
Input Arguments
Limitations
You must use a compiler that supports the Open Multiprocessing (OpenMP) application interface. See Supported Compilers. If you use a compiler that does not support OpenMP, MATLAB Coder treats the
parfor-loops asfor-loops. In the generated MEX function or C/C++ code, the loop iterations run on a single thread.The OpenMP application interface is not compatible with JIT MEX compilation. See JIT Compilation Does Not Support OpenMP.
Do not use the following constructs inside
parfor-loops:You cannot call extrinsic functions using
coder.extrinsicin the body of aparfor-loop.You cannot write to a global variable inside a
parfor-loop.MATLAB Coder does not support the use of
coder.cevalin reductions. For example, you cannot generate code for the followingparfor-loop:Instead, write a local function that calls the C code usingparfor i = 1:4 y = coder.ceval('myCFcn',y,i); end
coder.cevaland call this function in theparfor-loop. For example:parfor i = 1:4 y = callMyCFcn(y,i); end function y = callMyCFcn(y,i) y = coder.ceval('mCyFcn', y , i); end
The type of the loop index must be representable by an integer type on the target hardware. Use a type that does not require a multiword type in the generated code.
parforfor standalone code generation requires the toolchain approach for building executables or libraries.To use
parforin your MATLAB code, you require a Parallel Computing Toolbox™ license.
For a comprehensive list of restrictions, see parfor Restrictions.
Tips
Use a
parfor-loop when:You need many loop iterations of a simple calculation.
parfordivides the loop iterations into groups so that each thread can execute one group of iterations.You have loop iterations that take a long time to execute.
Do not use a
parfor-loop when an iteration in your loop depends on the results of other iterations.Reductions are one exception to this rule. A reduction variable accumulates a value that depends on all the iterations together, but is independent of the iteration order.
The input argument
NumThreadssets the OpenMPnum_threads()clause in the generated code. OpenMP also supports globally limiting the number of threads in C/C++ by setting the environment variableOMP_NUM_THREADSor by usingomp_set_num_threads(). For more information, see the openMP specifications. https://www.openmp.org/specifications/
Version History
Introduced in R2012b