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 编译不支持 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需要工具链方法来编译可执行文件或库。要在您的 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 中推出