主要内容

parfor

平行循环

描述

例子

parforLoopVar=InitVal:EndVal;语句;结束创建一个循环函数生成的墨西哥人或C / c++代码,在共享内存多核平台上并行运行。

parfor循环执行语句的值LoopVar之间的InitValEndvalLoopVar指定一个向量的整数值增加1。

例子

parfor (LoopVar=InitVal:EndVal,NumThreads);语句;结束使用最多的NumThreads当创建一个线程并行循环。

例子

全部折叠

生成一个墨西哥人的功能parfor循环执行的最大数量的核心。

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

函数一个= test_parfor% # codegen一个= 1 (10256);r =兰德(10256);parfor我= 1:10(我:)=实际(fft (r (i)));结束结束

生成一个墨西哥人功能test_parfor。在MATLAB命令行,输入:

codegentest_parfor

codegen生成一个墨西哥人的功能,test_parfor_mex在当前文件夹。

墨西哥人功能运行。在MATLAB命令行,输入:

test_parfor_mex

墨西哥人函数使用可用内核运行。

指定线程的最大数量在生成一个墨西哥人的功能parfor循环。

写一个MATLAB函数,specify_num_threads使用输入,u,指定的线程的最大数量parfor循环。

函数y = specify_num_threads (u)% # codegeny = 1 (1100);% u指定线程的最大数量parfor(i = 1:10 0, u) y (i) =我;结束结束

生成一个墨西哥人功能specify_num_threads。使用args 0指定输入的类型。在MATLAB命令行,输入:

u % 0指定输入参数是一个标量翻倍% u是定型的整数代码生成器codegen报告specify_num_threadsarg游戏0

codegen生成一个墨西哥人的功能,specify_num_threads_mex在当前文件夹。

墨西哥人的功能运行,指定它最多四个线程并行运行。在MATLAB命令行,输入:

specify_num_threads_mex (4)

生成的墨西哥人函数运行在四核。如果少于四核可,墨西哥人可用的核函数运行在最大数量的时候调用。

生成一个墨西哥人函数之前禁用并行化parfor循环。

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

函数一个= test_parfor% # codegen一个= 1 (10256);r =兰德(10256);parfor我= 1:10(我:)=实际(fft (r (i)));结束结束

生成一个墨西哥人功能test_parfor。禁用OpenMP这样codegen不生成一个墨西哥人功能,可以在多个线程上运行。

codegen- o禁用:OpenMPtest_parfor

codegen生成一个墨西哥人的功能,test_parfor_mex在当前文件夹。

墨西哥人功能运行。

test_parfor_mex

墨西哥人函数运行在单独的线程中。

如果你禁用并行化,MATLAB编码器™对待parfor循环,循环。软件生成一个墨西哥人函数运行在单独的线程中。禁用并行比较性能的串行和并行版本生成的墨西哥人或C / c++代码的函数。你也可以禁用并行调试问题并行版本。

输入参数

全部折叠

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

循环索引变量初始值,Loopvar。与EndVal,指定了parfor距离向量,必须的形式M: N

循环索引变量,最终值LoopVar。与InitVal,指定了parfor距离向量,必须的形式M: N

一系列的MATLAB命令来执行的parfor循环。

如果你把多个语句在同一行,把语句用分号分开。例如:

parfori = 1:10 arr (i) = rand ();arr (i) = 2 * arr (i) 1;结束

最大数量的线程使用。如果你指定上限,MATLAB编码器使用不超过这个数字,即使额外的核心是可用的。如果你请求的线程比可用内核的数量,MATLAB编码器使用核心可用的最大数量的时候调用。如果不到线程循环迭代,一些线程执行任何工作。

如果parfor循环不能运行在多个线程(例如,如果只有一个核心是可用的或NumThreads是0),MATLAB编码器以串行方式执行循环。

限制

  • 你必须使用一个编译器,它支持开放的多处理(OpenMP)应金宝app用程序接口。看到金宝app支持编译器。如果你使用一个不支持OpenMP的编译器,金宝appMATLAB编码器parfor循环,循环。在生成的墨西哥人或C / c++代码函数,循环迭代运行在单独的线程中。

  • OpenMP与墨西哥人JIT编译应用程序接口不兼容。看到JIT编译不支持OpenMP金宝app

  • 不要使用以下结构在里面parfor循环:

    • 你不能调用外部函数使用coder.extrinsic在的身体parfor循环。

    • 你不能写一个全局变量中parfor循环。

    • MATLAB编码器不支持使用吗金宝appcoder.ceval在减少。例如,您不能为以下生成代码parfor循环:

      parfor我= 1:4 y = coder.ceval (“myCFcn”,y,我);结束
      相反,编写一个本地函数调用C代码使用coder.ceval和调用这个函数parfor循环。例如:
      parfor我= 1:4 y = callMyCFcn (y,我);结束函数y = callMyCFcn(我)y, y = coder.ceval (“mCyFcn”,y,我);结束

    • 你不能使用变长度输入宗量varargoutparfor循环。

  • 循环索引的类型必须由一个整数表示的类型在目标硬件。使用一个类型,不需要多字输入生成的代码。

  • parfor独立的代码生成需要的工具链方法构建可执行文件或库。不改变设置导致代码生成器使用makefile的模板方法。看到项目或配置是使用模板Makefile

  • 使用parfor在MATLAB代码中,您需要一个并行计算工具箱™许可证。

全面的限制列表,请参阅parfor限制

提示

  • 使用一个parfor循环时间:

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

    • 你有循环迭代,需要很长时间来执行。

  • 不使用parfor循环当迭代循环的结果取决于其他迭代。

    削减是一个例外。一个减少变量积累的值取决于一起迭代,但独立于迭代顺序。

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

版本历史

介绍了R2012b