平行为
循环
您必须使用支持开放多处理(OpenMP)应用程序接口的编译金宝app器。看到金宝app支持编译器.如果您使用的编译器不支持OpenMP,金宝appMATLAB编码器将parfor
循环,为
循环。在生成的MEX函数或C/ c++代码中,循环迭代在单个线程上运行。
OpenMP应用程序接口与JIT MEX编译不兼容。看到JIT编译不支持OpenMP金宝app.
不使用下面的结构parfor
循环:
不能使用。调用外部函数coder.extrinsic
在…的身体里parfor
循环。
函数中的全局变量不能写入parfor
循环。
MATLAB编码器不支持的使用金宝appcoder.ceval
在减少。例如,您不能生成以下代码parfor
循环:
parfory = code .ceval(“myCFcn”, y,我);结束
coder.ceval
调用这个函数parfor
循环。例如:parfori = 1:4 y = callMyCFcn(y,i);结束函数y = callMyCFcn(y,i) y = code .ceval(“mCyFcn”, i);结束
循环索引的类型必须在目标硬件上用整数类型表示。在生成的代码中使用不需要多字类型的类型。
parfor
对于独立代码生成,需要使用工具链方法来构建可执行文件或库。不要更改导致代码生成器使用模板生成文件方法的设置。看到项目或配置正在使用模板生成文件.
有关限制的全面列表,请参见parfor限制.
使用一个parfor
循环时间:
您需要对一个简单的计算进行多次循环迭代。parfor
将循环迭代划分为组,以便每个线程可以执行一组迭代。
循环迭代需要很长时间来执行。
不要使用parfor
当你的循环中的一个迭代依赖于其他迭代的结果时。
还原是这个规则的一个例外。一个减少变量累积一个值,该值依赖于所有的迭代,但与迭代顺序无关。
输入参数NumThreads
集OpenMPnum_threads ()
子句。OpenMP还支持通过设金宝app置环境变量来全局限制C/ c++中的线程数OMP_NUM_THREADS
或使用omp_set_num_threads ()
.有关更多信息,请参阅openMP规范。https://www.openmp.org/specifications/