主要内容

par

平行为了-环形

描述

例子

parLoopVar=initval.EndVal;陈述;结尾在生成的MEX函数中或在C / C ++代码中创建一个循环,该循环在共享内存多核平台上并行运行。

par循环执行陈述的值LoopVar之间的initval.EndvalLoopVar指定递增1的整数值的向量。

例子

Parcol(LoopVar=initval.EndValNumThreads);陈述;结尾最大使用NumThreads创建并行时的线程为了循环。

例子

全部折叠

为a生成mex函数par-循环在最大可用内核数上执行。

写一个MATLAB®功能,test_parfor,它调用快速傅里叶变换函数,fft, 在一个par循环。因为循环迭代并行运行,所以该评估可以比类似的更快完成为了循环。

函数一个= test_parfor%#codegen.A = =(10,256);r = rand(10,256);parI = 1:10 a(I,:) = real(fft(r(I)));结尾结尾

生成MEX功能test_parfor.在Matlab命令行,输入:

Codegen.test_parfor

Codegen.生成一个MEX函数,test_parfor_mex,在当前文件夹中。

运行mex函数。在Matlab命令行,输入:

test_parfor_mex

MEX函数使用可用的核心运行。

对象的MEX函数生成时,指定最大线程数par循环。

写一个MATLAB函数,specify_num_threads,使用输入,的最大线程数par循环。

函数y = specify_num_threads (u)%#codegen.y = 1 (1100);%U指定最大线程数par(i = 1:100,u)y(i)= i;结尾结尾

生成MEX功能specify_num_threads.利用-ARGS 0.指定输入的类型。在Matlab命令行,输入:

%-args 0指定输入U是标量级% u被代码生成器类型转换为整数Codegen.报告specify_num_threads-  args.0.

Codegen.生成一个MEX函数,specify_num_threads_mex.,在当前文件夹中。

运行MEX函数,指定它在最多四个线程上并行运行。在Matlab命令行,输入:

specify_num_threads_mex(4)

生成的MEX函数最多可以在四个核上运行。如果可用核少于4个,则MEX函数在调用时运行在可用核的最大数量上。

在生成MEX函数之前禁用并行化par循环。

写一个MATLAB函数,test_parfor,它调用快速傅里叶变换函数,fft, 在一个par循环。

函数一个= test_parfor%#codegen.A = =(10,256);r = rand(10,256);parI = 1:10 a(I,:) = real(fft(r(I)));结尾结尾

生成MEX功能test_parfor.禁用OpenMP的使用Codegen.不会生成可以在多个线程上运行的MEX函数。

Codegen.- o禁用:OpenMPtest_parfor

Codegen.生成一个MEX函数,test_parfor_mex,在当前文件夹中。

运行mex函数。

test_parfor_mex

MEX函数在单个线程上运行。

如果禁用并行化,Matlab Coder™对待par- 乐队为了循环。该软件生成一个在单个线程上运行的MEX函数。禁用并行化以比较生成的MEX函数或C/ c++代码的串行和并行版本的性能。您还可以禁用并行化以调试并行版本的问题。

输入参数

全部折叠

初始值为的循环索引变量initval.和最终价值是EndVal

循环索引变量的初始值,Loopvar.与EndVal,指定par范围向量,必须是表格M:N.

循环索引变量的最终值,LoopVar.与initval.,指定par范围向量,必须是表格M:N.

在MATLAB中执行的一系列命令par循环。

如果在同一行中有多个语句,请用分号分隔它们。例如:

par我= 1:10 arr(i)= rand();arr(i)= 2 * arr(i)-1;结尾

要使用的最大线程数。如果指定上限,Matlab编码器即使有其他核心可用,也不多使用此号码。如果您要求更多的线程,而不是可用核心的数量,Matlab编码器使用呼叫时可用的最大核心数。如果循环迭代少于线程,则某些线程不执行任何工作。

如果par-loop无法在多个线程上运行(例如,如果只有一个核心或可用NumThreads是0),Matlab编码器以串行方式执行循环。

限制

  • 您必须使用支持开放式多处理(OpenMP)应用程序界面的编金宝app译器。看金宝app支持的编译器.如果使用不支持OpenMP的编译器,金宝appMatlab编码器对待par- 乐队为了循环。在生成的MEX函数或C/ c++代码中,循环迭代在单个线程上运行。

  • OpenMP应用程序接口与JIT MEX编译不兼容。看JIT编译不支持OpenMP金宝app

  • 不要在里面使用下列结构par循环:

    • 您无法使用外在功能编码器.Extrinsic.在一个par循环。

    • 您无法在A内写入全局变量par循环。

    • Matlab编码器不支持使用金宝appcoder.ceval减少。例如,您无法为以下内生成代码par-环形:

      pari = 1:4 y = coder.ceval('mycfcn', y,我);结尾
      相反,编写一个本地函数来调用C代码使用coder.ceval并致电这个功能par循环。例如:
      pari = 1:4 y = callMyCFcn(y,i);结尾函数y = callmycfcn(y,i)y = coder.ceval(“mCyFcn”, 义);结尾

    • 你不能使用varargin.varargoutpar循环。

  • 环索引的类型必须通过目标硬件上的整数类型表示。使用生成的代码中不需要多字类型的类型。

  • par对于独立的代码生成,需要使用工具链方法来构建可执行文件或库。不要更改导致代码生成器使用模板生成文件方法的设置。看项目或配置正在使用模板makefile

有关综合限制清单,请参阅限制

提示

  • 用一个par- 辛:

    • 您需要许多简单计算的循环迭代。par将循环迭代划分为组,以便每个线程可以执行一组迭代。

    • 循环迭代需要很长时间才能执行。

  • 不要使用par当你的循环中的一个迭代依赖于其他迭代的结果时。

    略读是这条规则的一个例外。一个减少变量累积依赖于所有迭代的值,但与迭代顺序无关。

  • 输入论点NumThreads设置OpenMP.num_threads()生成的代码中的子句。OpenMP还支持通过设金宝app置环境变量全局限制C / C ++中的线程数OMP_NUM_THREADS或使用omp_set_num_threads ().有关更多信息,请参阅openMP规范。https://www.openmp.org/specifications/

介绍了R2012b