文档

并行工作分布概况

这个示例展示了如何使用以下方法解决一个令人尴尬的具有不均匀工作分布的并行问题对于drange。该对于drange分裂迭代同样。因此,它可以实现次优的负载平衡,这可以通过使用parallel profiler看到。这里描述的程序也适用于其他工作分配问题。

先决条件:

本例中的图形是由12节点的MATLAB®集群生成的。如果没有另外指定,则显示在4节点的本地集群上运行的所有其他内容。特别是,所有文本输出都来自本地集群。

这个示例使用对于drange以说明如何使用Profiler来观察最理想的负荷分配。让我们看看这个尴尬的并行对于drange循环。

该算法

目的是pctdemo_aux_proftaskpar例子是计算eig尺寸增大的随机矩阵,并且挑从所得矢量的最大值。关键的问题是基于循环计数器的增加矩阵大小。这是基本的迭代:

v(ii) = max(abs(eig(rand(ii)));

实际上循环可以在示例代码中看到。

中可以找到本示例的代码pctdemo_aux_proftaskpar

启用并行分析器的数据收集

好的做法是在打开mpiprofile之前重置集群的并行分析器pmode。它可以确保数据被清除,探查是关闭的,在默认设置-messagedetail。

P > > mpiprofile复位;P > > mpiprofile;

对于drange实验室之间不能有任何交流,所以-messagedetail可以设置为简化(请参阅帮助mpiprofile)。如果您没有指定-messagedetail选项并运行一个程序,没有沟通,你会得到0在通信领域。

v = 0 (1, 300, codistributor());P > >抽搐;pctdemo_aux_proftaskpar (“drange”); TOC;
换drange环1开始。计算复杂度随着循环索引的增加而增加。完成历时时间0.287845秒。
开始for-drange循环。计算复杂度随着循环索引的增加而增加。执行时间为0.351070秒。
3 for-drange循环的开始。计算复杂度随着循环索引的增加而增加。执行时间为0.335363秒。
换drange环的4开始。计算复杂度随着循环索引的增加而增加。完成历时时间0.412805秒。
for-drange循环的开始。计算复杂度随着循环索引的增加而增加。执行时间为0.482021秒。
换drange环的6开始。计算复杂度随着循环索引的增加而增加。完成历时时间0.683651秒。
换drange循环的7开始。计算复杂度随着循环索引的增加而增加。完成历时时间0.838188秒。
换drange环8开始。计算复杂度随着循环索引的增加而增加。完成历时时间1.005636秒。
for-drange循环开始。计算复杂度随着循环索引的增加而增加。已执行的时间是1.128090秒。
换drange循环10开始。计算复杂度随着循环索引的增加而增加。完成历时时间1.398578秒。
循环的开始。计算复杂度随着循环索引的增加而增加。已执行的时间为1.589610秒。
for-drange循环开始。计算复杂度随着循环索引的增加而增加。执行时间为1.825993秒。

在此算法中所经过的时间应该永远是最长的最后一个实验室。我们用TIC TOC这样我们就可以比较a和最长运行时间parfor。使用内部的剖析parfor循环与mpiprofile目前不支持。万博1manbetx

运行并行探查图形界面

要获得profiler接口,只需键入mpiprofile观众pmode。您还可以查看来自并行作业的数据。有关如何做到这一点的信息,请参阅帮助或文档。

P > > mpiprofile观众;%观众动作也关闭分析器
1发送PMODE lab2client到MATLAB客户端异步评估。

当profiler界面打开时,默认情况下会显示lab 1的功能总结报告。点击比较最大和最小总时间可查看所有调用的函数在第一和最后一个实验室之间的工作分配的差异。看着那(这pctdemo_aux_proftaskpar功能:

观察不均匀工作分配

这里有几个步骤可以发现MATLAB工作人员的工作分布不均匀。不均匀的工作分布几乎肯定会阻止串行算法的最优加速。

  1. 选择最大时间总来自手动的比较选择列表框(见使用Pmode中的并行分析器)。有了这个选择,你可以观察一个并行程序的有效总时间。

  2. 点击比较最大和最小总时间。正如你所看到的,这个循环需要更长的时间上的最后一个MATLAB工人相比第一个。该对于drange显然不是这两个实验室正确分配工作,至少。为了证实这一点是所有实验室true,则可以使用图形视图页面的直方图功能。在这样做之前,请点击pctdemo_aux_proftaskpar函数来获得更具体的地块。

  3. 点击绘制时间直方图看到的计算时间是如何在四个地方实验室分发。观察总执行时间直方图。

在这个页面的顶级人物,只有前几个实验室大约需要的时间是相同的;其他显著需要更长的时间。在总时间分布这个大的差异是不理想的负载平衡的一个指标。

使用PARFOR实现更好的工作分配

这种并行性的最佳性能需要手动分配迭代pmode或使用parforparpool。要在这种类型的问题中获得更好的工作分配(使用pmode),您需要创建任务的随机分配,而不是依赖对于drange静态地划分迭代。

使用parfor通常更适合这种类型的任务。与PARFOR(i = N时:N)构造您得到动态的工作分配,它在执行时分割迭代,跨越所有的实验室。因此集群得到了更好的利用。您可以通过使用a在pmode外部运行相同的函数来看到这一点parfor构造。这样可以显著地提高速度对于drange

在外部的MATLAB客户机上运行以下命令来尝试使用parforpmode

pmode关闭;

parpool;

抽动; pctdemo_aux_proftaskpar( 'PARFOR'); TOC;

你应该得到的输出,看起来像:完成历时时间6.376887秒。

有使用显著加速(它的4个节点的集群上快近两倍)parfor而不是对于drange,而不改变实际算法。请注意,parfor作为标准运作中环内pmode。请确保您尝试PMODE的PARFOR之外得到加速。如需帮助,parpoolparfor

循环串行并行化

为了使串行(迭代无关)-循环并行需要添加的drange选项时,在并行作业,或更换与一个parfor。该parfor循环将只按照预期工作parpool。您可以在这个例子中所示的代码查看不同风格的for循环并行。看到pctdemo_aux_proftaskpar。该parfor版本的情况下,“parfor”drange版本的情况下,“drange”

是这个主题有帮助吗?