PARFOR

执行对于并行-loop迭代工人

描述

PARFORloopVar=initValendVal;语句;结束执行对于-loop工人并行迭代的并行池。

MATLAB®执行在循环体指令语句对于价值loopVar之间的initValendValloopVar指定递增1的整数值向量。如果你有并行计算工具箱™,迭代语句可以在多核计算机或集群上的并行工作池上执行。与一个对于-loop,可以包括单个线或多个线语句

要了解如何PARFOR可帮助您提高吞吐量,请参阅决定什么时候使用parfor

PARFOR从传统的不同对于-循环方式如下:

PARFOR(loopVar=initValendVal中号);语句;结束使用中号指定并行池中用于计算的最大worker数语句在循环体。中号必须是非负整数。

默认情况下,MATLAB使用可用的工人在您的并行池。您可以更改的工人数量选项卡中环境部分,通过选择平行>并行偏好。您可以通过使用覆盖并行池工人的默认号码parpool。如果没有工人在游泳池或可用中号是零,MATLAB仍然执行循环体中的非确定性顺序,但不平行。使用此语法测试您的代码时,并行和串行执行之间进行切换。

有了这个语法,并行执行迭代,你必须有工人的并行池。默认情况下,如果执行PARFOR,您自动默认群集配置文件中定义的群集上创建工人的并行池。默认集群本地。你可以改变你的集群中并行偏好。有关详细信息,请参阅指定并行首

PARFOR(loopVar=initValendValOPTS);语句;结束使用OPTS指定要在计算中使用的资源语句在循环体。创建一组PARFOR使用该选项parforOptions功能。通过这种方法,您可以运行PARFOR而不首先创建并行池和控制如何在群集上PARFOR分割迭代成子的工人。

PARFOR(loopVar=initValendVal);语句;结束执行语句工人在而无需创建一个平行的泳池。这是相当于执行PARFOR(loopVar = initVal:endVal,parforOptions(簇));报表;结束

例子

全部收缩

创建一个PARFOR-loop对于计算密集的任务,并测量产生的加速。

在MATLAB编辑器中,输入以下对于循环。要测量经过的时间,添加抽搐TOC

tic n = 200;一个= 500;一个零=(1,N);对于1:n a(i) = max(abs(eig(rand(a)));结束TOC

运行脚本,并注意所经过的时间。

经过时间是31.935373秒。

在脚本中,更换对于用-loopPARFOR循环。

tic n = 200;一个= 500;一个零=(1,N);PARFOR1:n a(i) = max(abs(eig(rand(a)));结束TOC

运行新的脚本,然后再次运行它。第一次运行比第二次运行慢,因为必须启动并行池,并且必须使代码对工作人员可用。请注意第二次运行的运行时间。

默认情况下,MATLAB自动打开工在本地计算机上的并行池。

经过时间是10.760068秒。

注意,你通过将加速你的计算对于-loop成PARFOR-循环四个工人。通过增加并行池中的worker数量,可以进一步减少运行时间。有关更多信息,请参见转换为-环插入PARFOR,循环扩展parfor循环到集群和云

您可以指定工人的最大数量中号对于一个PARFOR循环。组M = 0在桌面MATLAB中运行循环体,不使用workers,即使池是开放的。当M = 0,MATLAB仍执行循环体中的非确定性顺序,而不是并行,这样您就可以检查您是否PARFOR-循环是独立的,适合在workers上运行。这是允许您调试a的内容的最简单的方法PARFOR循环。你不能的身体直接设置断点PARFOR-loop,但您可以设置从的身体调用的函数断点PARFOR循环。

指定M = 0运行的身体PARFOR-loop在桌面MATLAB,即使游泳池的开放时间。

M = 0;%M指定工人的最大数量y = 1 (1100);PARFOR(I = 1:100,M)Y(I)= I;结束

要控制您的并行池的工人人数,看指定并行首parpool

多少来衡量数据在当前并行池,加转移到从工人ticBytes (gcp)tocBytes(GCP)前后PARFOR循环。用gcp作为获取当前并行池的参数。

删除您当前并行池,如果你仍然有一个。

删除(GCP('nocreate的'))
抽动ticBytes(GCP);N = 200;一个= 500;一个零=(1,N);PARFOR1:n a(i) = max(abs(eig(rand(a)));结束tocBytes toc (gcp)

运行新的脚本,然后再次运行它。第一次运行比第二次运行慢,因为必须启动并行池,并且必须使代码对工作人员可用。

默认情况下,MATLAB自动打开工在本地计算机上的并行池。

开始使用“本地”的个人资料...连接到4名工人并行池(parpool)。... BytesSentToWorkers BytesReceivedFromWorkers __________________ ________________________ 1 15340 7024 2 13328 5712 3 13328 5704 4 13328 5728 55324合计24168

您可以使用ticBytestocBytes结果,用于检查在并行池中传输给工作人员和从工作人员传输的数据量。在本例中,数据传输很小。有关PARFOR循环,看决定什么时候使用parfor转换为-环插入PARFOR,循环

创建使用群集对象parcluster功能,打造一个集PARFOR它的选项。默认,parcluster使用默认的群集配置文件。检查在MATLAB的默认配置文件选项卡,在平行>选择一个默认的集群

簇= parcluster;

跑步PARFOR直接计算集群中,通过群集对象作为第二输入参数PARFOR

当您使用此方法,PARFOR可以使用所有可用的工人在集群中,与工人变得可用,一旦循环完成。这种方法也是有用的,如果您的群集不支持并行池。金宝app如果你想控制的其他选项,包括迭代的划分,使用parforOptions

值= [3 3 3 7 3 3 3];PARFOR(I = 1:numel(值),簇)从(ⅰ)=范数(PINV(兰特(值(I)* 1E3)));结束

使用此语法不消耗工人超过必要的时间PARFOR一个大型集群上运行。

输入参数

全部收缩

与初始值循环索引变量initVal和最终值endVal。变量可以是任何数值类型,值必须是整数。

请确保您的PARFOR-loop变量是连续增加的整数。如需更多帮助,请参阅在PARFOR-循环变量疑难解答

的范围PARFOR-loop变量不能超过支持范围。金宝app如需更多帮助,请参阅避免在PARFOR,循环溢出

数据类型:||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循环。如需更多帮助,请参阅转换为-环插入PARFOR,循环

不要窝PARFOR循环,看嵌套的parfor和for循环以及其他parfor需求

并行运行工人的最大数目,指定为一个非负整数。如果指定一个上限,MATLAB使用不超过这个数,即使更多的工人都可用。如果要求更多的工人比现有工人的数量,然后使用MATLAB工人可在通话时的最大数量。如果循环迭代比职工人数少,一些工人进行任何工作。

如果PARFOR不能在多个工人运行(例如,如果只有一个内核可或中号为0),MATLAB执行以串行方式循环。在这种情况下,仍然MATLAB执行循环体中的非确定性顺序。使用此语法测试您的代码时,并行和串行之间进行切换。

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

例子:选择= parforOptions (parcluster);

集群,指定为parallel.Cluster的对象,PARFOR运行。要创建一个集群对象,请使用parcluster功能。

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

数据类型:parallel.Cluster

提示

  • 使用一个PARFOR当-loop:

    • 你有一个简单的计算的多个循环迭代。PARFOR将所述循环迭代成组,从而每个线程可以执行一组迭代。

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

  • 不要使用PARFOR当在循环迭代依赖于其他迭代的结果-loop。

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

  • 当您使用PARFOR,你必须等待循环来完成,以获得结果。您的客户端MATLAB被锁定,用户不能打破循环的早早出局。如果你想获得中间结果,或破坏出来对于循环早期,试试parfeval代替。

  • 除非您指定一个集群对象,否则PARFOR在现有的并行池-loop运行。如果没有池存在,PARFOR启动一个新的平行池,除非池的自动启动在您的并行喜好被禁用。如果没有平行的泳池和PARFOR不能启动一个,循环在客户端会话连续运行。

  • 如果AutoAttachFiles在并行池的集群配置文件中设置为真正,MATLAB执行上的一个分析PARFOR-loop来确定哪些代码文件所必需的其执行,见listAutoAttachedFiles。然后MATLAB会自动将这些文件附加到并行池中,以便这些代码对工作人员可用。

  • 你不能在直接调用脚本PARFOR循环。但是,你可以调用调用脚本功能。

  • 不使用清晰的PARFOR循环,因为它违反了工作区的透明度。看到确保透明度在PARFOR-循环或SPMD声明

  • 您可以运行的Simuli金宝appnk®模型与并行parsim命令,而不是使用PARFOR循环。有关并行使用Simulink的更多信息和示例,请参见金宝app运行多个模拟(金宝appSIMULINK)。

介绍了在R2008a