parfor
并行 for
循环
语法
说明
parfor
在生成的 MEX 函数中或在共享内存多核平台上并行运行的 C/C++ 代码中创建一个循环。LoopVar
= InitVal
:EndVal
; Statements
; end
parfor
循环对 InitVal
和 Endval
之间的 LoopVar
值执行 Statements
。LoopVar
指定由整数值组成的向量,这些值按 1 递增。
parfor (
在创建并行 LoopVar
= InitVal
:EndVal
, NumThreads
); Statements
; endfor
循环时,最多使用 NumThreads
个线程。
示例
输入参数
限制
必须使用支持 Open Multiprocessing (OpenMP) 应用程序接口的编译器。请参阅支持的编译器。如果使用不支持 OpenMP 的编译器,则 MATLAB Coder 会将
parfor
循环视为for
循环。在生成的 MEX 函数或 C/C++ 代码中,循环迭代在单个线程上运行。OpenMP 应用程序接口与 JIT MEX 编译不兼容。请参阅 JIT Compilation Does Not Support OpenMP。
不要在
parfor
循环内使用以下结构:在
parfor
循环体中,不能使用coder.extrinsic
调用外部函数。不能在
parfor
循环内写入全局变量。MATLAB Coder 不支持在归约中使用
coder.ceval
。例如,不能为以下parfor
循环生成代码:在这种情况下,应使用parfor i = 1:4 y = coder.ceval('myCFcn',y,i); end
coder.ceval
编写一个调用 C 代码的局部函数,并在parfor
循环中调用此函数。例如:parfor i = 1:4 y = callMyCFcn(y,i); end function y = callMyCFcn(y,i) y = coder.ceval('mCyFcn', y , i); end
循环索引的类型必须可由目标硬件上的整数类型表示。在生成的代码中使用不需要多字类型的类型。
用于独立代码生成的
parfor
需要工具链方法来编译可执行文件或库。不要更改使代码生成器使用模板联编文件方法的设置。请参阅Project or Configuration Is Using the Template Makefile。要在您的 MATLAB 代码中使用
parfor
,您需要 Parallel Computing Toolbox™ 许可证。
有关限制的详尽列表,请参阅 parfor 限制。
提示
在以下情况下,请使用
parfor
循环:您需要一个简单计算的多次循环迭代。
parfor
会将这些循环迭代分为若干组,以使每个线程执行一组迭代。循环迭代需要很长时间才能执行完毕。
当循环中的迭代依赖于其他迭代的结果时,请不要使用
parfor
循环。归约是此规则的一个例外。归约变量会将依赖于所有迭代的值累加在一起,但与迭代顺序无关。
输入参量
NumThreads
设置生成的代码中的 OpenMPnum_threads()
子句。OpenMP 还支持通过设置环境变量OMP_NUM_THREADS
或使用omp_set_num_threads()
来全局限制 C/C++ 中的线程数。有关详细信息,请参阅 openMP 设定。https://www.openmp.org/specifications/
版本历史记录
在 R2012b 中推出