文档

显式并行通信

这个例子显示了如何配置到近邻实验室明确的沟通。它说明了如何使用labSend,labReceivelabSendReceive,展示了实现该算法的慢(不正确)和快(最优)方式。使用并行分析器来探索这个问题。

先决条件:

本例中的图形来自一个12节点的集群。

示例代码涉及明确的沟通。在MATLAB®显式通信是同义直接使用并行计算工具箱通信原语(例如labSend,labReceive,labSendReceive,labBarrier)。涉及此类型的通信性能的问题,如果没有相关的底层硬件,可能很难追查。与并行探查很多这类问题可以交互识别。重要的是要记住,你可以在你的程序的各个部分分解为单独的功能是非常重要的。profiling的时候,因为一些数据仅收集每个功能这可以帮助。

该算法

我们剖析的算法是一个最近的邻居通信模式。每个工人MATLAB只从自身和一个相邻实验室需要的数据。这种类型的数据并行模式的很适合于许多基质的问题,但是,当不正确地进行,可不必要地慢。换言之,每个实验取决于是数据已经例如,在一个有四个实验室的集群中,实验室1想要向实验室2发送一些数据,并且需要从实验室4获得一些数据,因此每个实验室只依赖另一个实验室:

1取决于-> 4

2依赖于-> 1

3依赖于-> 2

4取决于 - > 3

这是可能的使用来实现任何给定通信算法labSendlabReceivelabReceive总是阻塞您的程序,直到通信完成,而labSend可能没有如果数据很小。运用labSend第一,虽然没有在大多数情况下帮助。

完成这一算法的一种方式是有充分的实验室等待接收,且只有一个实验室通过完成发送启动通信链路,然后接收。或者,我们可以使用labSendReceive,乍一看,性能上的主要差异并不明显。

您可以查看代码pctdemo_aux_profbadcommpctdemo_aux_profcomm查看该算法的完整实现。查看第一个文件,注意它使用了labSendlabReceive进行交流。

这是一个常见的错误开始思考labSendlabReceive在不必要的时候。看看这个pctdemo_aux_profbadcomm实现执行会给我们什么样的期待一个更好的主意。

分析labSend实现

P > > labBarrier;%至确保实验室都开始在同一时间
P > > mpiprofile复位;P > > mpiprofile;P > > pctdemo_aux_profbadcomm;
1发送到2接收到12
2从1接收发送给3
3从2个接收发送至4
4接收从3发送到5
5接收从4发送到6
6接收从5发送到7
7接收从6发送到8
8接收从7发送到9
9从8接收发送给10
10接收从9发送到11
11接收从10发送到12
12从11接收发送给1
P > > mpiprofile观众;
1发送PMODE lab2client到MATLAB客户端异步评估。

功能汇总报告会显示出来。在这个页面上,你可以看到在通信中等待的时间是在总时间的情节标题。下面的数据显示,花费了相当多的时间等待。让我们看看parallel profiler如何帮助识别这些等待的原因。

快速入门步骤

  1. 在profiler功能摘要报告中,查看一下pctdemo_aux_profbadcomm条目并单击比较最大和最小总时间。观察函数下显示的大橙子等待时间iRecFromPrevLab。这是一个早期迹象表明有什么毛病相应发送的,或者是因为网络问题或算法的问题。

  2. 使用顶部工具栏表单击标绘的每实验室通讯。在该视图中示出了所有通过各实验室接收的数据的第一图形。在这个例子中每个实验从先前实验室接收数据相同量的,因此它似乎并不是一个数据分发问题。第二图所示的各种通信时间包括用于等待通信的时间。在第三个图中,接收通讯轮候时间图显示等待时间逐步增加。一个例子接收通讯轮候时间情节可以看出下面使用12个节点的集群。这是好事,回去检查什么是对源实验室发生。

  3. 浏览什么在实验室1.)。在探查点击首页。湾)点击顶级pctdemo_aux_profbadcomm函数到函数详细报告。c。)确保显示功能上市被选中。d。)向下滚动并查看实验1花费了哪些时间以及涉及了哪些行。e)。为了比较,请看忙线,并选择最后一个实验室转到实验室列表框。

要查看所有已分析的代码行,请向下滚动到页面中的最后一项。下面是这个带注释的代码清单的示例。

通讯地块使用较大的非本地集群

清楚地看到我们使用的问题labSendlabReceive,请看下面的内容接收通讯轮候时间从12节点集群中绘制。

在上面的图中,你可以使用看到无谓的等待标出所有的通讯。这个等待时间增加,因为labReceive块,直到相应的成对的labSend已完成。因此,即使随后的实验室只需要来自近邻的数据,您也可以获得连续的通信labindex

使用labSendReceive实现该算法

您可以使用labSendReceive同时从您所依赖的实验室发送和接收数据,以获得最小的等待时间。中实现的通信模式的修正版本中见此pctdemo_aux_profcomm。显然,使用labSendReceive是不可能的,如果你需要接收数据之前,你可以把它。在这种情况下,使用labSendlabReceive确保按时间顺序排列。然而,像这样的例子情况下,如果没有必要发送,使用前接收数据labSendReceive。让我们的个人资料这个版本没有重新收集了先前版本的数据(使用mpiprofile简历)。

P > > labBarrier;P > > mpiprofile简历;P > > pctdemo_aux_profcomm;
1发送至2接收从12 2发送到3接收从1 3 2 4发送至4接收从3 5发送至5接收从4 6发送至6接收从5 7发送至7接收发送到8接收从6 8从7 9发送至9接收从8 10发送到接收10 9 11发送到接收11 10 12发送到接收12发送给1个接收从11
P > > mpiprofile观众;
1发送PMODE lab2client到MATLAB客户端异步评估。

该修正版本减少了等待时间,有效地为零。看到这一点,请单击标出所有的通讯选择pctdemo_aux_profcomm。相同的通信模式,如上所述,现在花几乎没有时间等待使用labSendReceive(见接收通讯轮候时间下面的情节)。

地块色彩方案

对于每个二维图像标绘,着色方案都归一化到手头的任务。因此,不要使用上面图中的配色方案来与其他图进行比较,因为颜色是标准化的,并且依赖于最大值(见右上角的棕色)。对于本例,使用最大值是比较等待时间的巨大差异的最好方法pctdemo_aux_profcomm而不是pctdemo_aux_profbadcomm

是这个主题有帮助吗?