主要内容

parfor

执行工人并行循环迭代

描述

例子

parforloopVar=initVal:endVal;语句;结束执行循环迭代并行工人在一个平行的池。

MATLAB®在循环体执行命令语句的值loopVar之间的initValendValloopVar指定一个向量的整数值增加1。如果你有并行计算工具箱™,迭代语句可以执行并行的工人多核计算机或集群。与一个循环,可以包括一行或多行语句

找出parfor可以帮助提高你的吞吐量,看到了吗决定何时使用parfor

parfor不同于一个传统的循环在以下方式:

例子

parfor (loopVar=initVal:endVal,);语句;结束使用指定的最大数量的工人从平行池使用评估语句在循环体。必须是一个非负整数。

默认情况下,MATLAB使用可用的工人在你平行池。你可以改变工人的数量选项卡中环境节中,通过选择平行>平行的偏好。你可以覆盖默认的工人数量在一个平行池使用parpool。当没有工人正在池中可用的或是零,MATLAB仍然不确定的顺序执行循环体,而不是平行的。使用这个语法之间切换并行和串行执行测试代码时。

这个语法,并行执行迭代,你必须有一个平行的工人。默认情况下,如果你执行parfor,您会自动创建一个平行的工人在集群上所定义的默认集群配置文件。默认集群当地的。你可以改变你的集群平行的偏好。更多细节,请参阅指定您的平行的偏好

parfor (loopVar=initVal:endVal,选择);语句;结束使用选择在评估指定要使用的资源语句在循环体。创建一组parfor选择使用parforOptions函数。使用这种方法,您可以运行parfor集群上没有首先创建一个平行池和控制parfor分区迭代到子范围的工人。

例子

parfor (loopVar=initVal:endVal,集群);语句;结束执行语句工人在集群没有创建一个平行的池。这相当于执行parfor (loopVar = initVal: endVal parforOptions(集群));语句;结束

例子

全部折叠

创建一个parfor循环的计算密集型任务和测量产生的加速。

在MATLAB编辑器中,输入以下循环。测量时间、添加抽搐toc

抽搐n = 200;一个= 500;一个= 0 (1,n);i = 1: n (i) = max (abs (eig(兰德(a))));结束toc

运行脚本,注意时间。

运行时间是31.935373秒。

在脚本中,取代循环用parfor循环。

抽搐n = 200;一个= 500;一个= 0 (1,n);parfori = 1: n (i) = max (abs (eig(兰德(a))));结束toc

运行新的脚本,并再次运行它。第一个比第二个慢跑,因为平行池必须开始,你必须提供的代码工人。请注意第二运行花费的时间。

默认情况下,MATLAB自动打开一个平行的工人在本地机器上。

运行时间是10.760068秒。

观察你加速计算转换循环到一个parfor循环在四个工人。你可能会进一步降低运行时间增加工人的数量在你的平行池。有关更多信息,请参见for循环转换成parfor-Loops扩大parfor-Loops集群和云

您可以指定的最大数量的工人对于一个parfor循环。集M = 0身体的循环运行桌面MATLAB,不使用工人,即使一个池是开放的。当M = 0,MATLAB仍然执行循环体在一个不确定的顺序,而不是平行的,这样你就可以检查是否你的parfor循环是独立的和适合运行在工人。这是最简单的方法让你调试的内容parfor循环。你不能直接设置断点的主体parfor循环,但是你可以设置断点的身体在要调用的函数parfor循环。

指定M = 0的身体parfor循环在桌面MATLAB,即使是开着的。

M = 0;% M指定最大数量的工人y = 1 (1100);parfor(M i = 1:10 0) y (i) =我;结束

控制员工的数量在你的平行池,明白了指定您的平行的偏好parpool

测量多少数据转移的工人在当前并行池,添加ticBytes (gcp)tocBytes (gcp)之前和之后parfor循环。使用gcp作为参数获取当前并行池。

删除你现在如果你仍然有一个平行的池。

删除(gcp (“nocreate”))
抽搐ticBytes (gcp);n = 200;一个= 500;一个= 0 (1,n);parfori = 1: n (i) = max (abs (eig(兰德(a))));结束tocBytes toc (gcp)

运行新的脚本,并再次运行它。第一个比第二个慢跑,因为平行池必须开始,你必须提供的代码工人。

默认情况下,MATLAB自动打开一个平行的工人在本地机器上。

开始平行池(parpool)使用“本地”概要文件…连接到4工人……BytesSentToWorkers BytesReceivedFromWorkers _____________ ________________________ 1 15340 7024 13328 5712 13328 5704 13328 5728 55324 24168

您可以使用ticBytestocBytes结果检查传输的数据量,从工人在一个平行的池。在本例中,数据传输很小。更多信息parfor循环,看决定何时使用parforfor循环转换成parfor-Loops

创建一个集群对象使用parcluster功能,并创建一个组parfor选项。默认情况下,parcluster使用默认集群配置文件。检查你的默认的配置在MATLAB选项卡,在平行>选择一个默认的集群

集群= parcluster;

运行parfor直接计算集群,通过集群对象作为第二个输入参数parfor

当你使用这种方法,parfor可以使用集群中所有可用的工人,和工人尽快可用循环完成。这种方法也很有用,如果集群不支持并行池。金宝app如果你想控制其他选项,包括分区的迭代,使用parforOptions

值= [7 3 3 3 3 3 3];parfor(i = 1:元素个数(值),集群)了(我)=规范(pinv(兰德(值(i) * 1 e3)));结束

使用这种语法在大型集群上运行parfor没有消费工人超过必要的。

输入参数

全部折叠

循环索引变量初始值initVal和最终的价值endVal。变量可以是任何数字类型和值必须是一个整数。

确保你的parfor循环变量是连续增加的整数。更多的帮助,请参阅排除变量parfor-Loops

的范围parfor循环变量不得超过所支持的范围。金宝app更多的帮助,请参阅避免溢出parfor-Loops

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

初始值循环索引变量,loopVar。变量可以是任何数字类型和值必须是一个整数。与endVal,指定了parfor距离向量,必须的形式M: N

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

终值循环索引变量,loopVar。变量可以是任何数字类型和值必须是一个整数。与initVal,指定了parfor距离向量,必须的形式M: N

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

循环体,指定为文本。一系列的MATLAB命令来执行的parfor循环。

您可能需要修改代码使用parfor循环。更多的帮助,请参阅for循环转换成parfor-Loops

不窝parfor循环,看嵌套parfor和for循环和其他parfor需求

最大数量的工人并行运行,指定为一个非负整数。如果你指定一个上限,MATLAB使用不超过这个数,即使额外可用的工人。如果你请求更多的工人比可用的工人的数量,然后用MATLAB使用人员的最大数量的时候调用。如果循环迭代的数量少于工人,一些工人执行任何工作。

如果parfor不能运行在多个工人(例如,如果只有一个核心是可用的或是0),MATLAB以串行方式执行循环。在这种情况下,MATLAB在不确定的订单仍然执行循环体。使用这个语法之间切换并行和串行代码在测试。

parfor选项,指定为一个ClusterOptions对象。使用parforOptions创建一组函数parfor选项。

例子:选择= parforOptions (parcluster);

集群中,指定为一个parallel.Cluster的对象,parfor运行。要创建一个集群对象,使用parcluster函数。

例子:集群= parcluster(当地的)

数据类型:parallel.Cluster

提示

  • 使用一个parfor循环时间:

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

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

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

    削减是一个例外。一个减少变量积累的值取决于一起迭代,但独立于迭代顺序。有关更多信息,请参见减少变量

  • 当你使用parfor,你必须等待循环完成获得结果。客户MATLAB被阻塞,提前你不能打破循环。如果你想获得中间结果,或突破循环早期,试试parfeval代替。

  • 除非你指定集群对象,parfor循环运行在现有的并行池。如果池不存在,parfor开始一个新的并行池,除非禁用自动启动池在你平行的偏好。如果没有游泳池和平行parfor不能启动,循环连续运行在客户端会话。

  • 如果AutoAttachFiles财产的集群配置文件将平行池真正的,MATLAB执行一个分析parfor循环判断为其执行代码文件是必要的,看到的listAutoAttachedFiles。然后MATLAB自动高度这些文件并行池,以便可用的代码工人。

  • 你不能直接调用脚本中parfor循环。然而,您可以调用的函数调用脚本。

  • 不要使用清晰的在一个parfor循环,因为它违反了工作空间的透明度。看到确保parfor-Loops或spmd语句的透明度

  • 您可以运行仿真软件金宝app®与并行模型parsim命令,而不是使用parfor循环。的更多信息和示例使用并行仿真软件,明白了金宝app运行多个模拟(金宝app模型)

介绍了R2008a