计算机研究与发展 Journal of Computer Research and Development ISSN 1000—1239/CN 1 1—1777门rP 50(8):1744—1754,2O13 MPI Alltoall通信在多核机群中的优化 李 强 孙凝晖 霍志月1 马 捷 北京 (中国科学院计算技术研究所高性能计算机研究中心(中国科学院计算机系统结构重点实验室 北京 100190) 。(中国科学院大学北京100039) (1iqiang@ncic.ae.en) Optimizing MPI Alltoall Communications in Multicore Clusters I.i Qiang ' 。Sun Ninghui ,Huo Zhigang ,and Ma Jie (High Performance Computer Research Center,Institute of Computing Technology,Chinese Academy of Sciences, Beijing 100190) 。(Key Laboratory oJ Computer System and Architecture,Chinese Academy of Sciences,Beijing 100190) 。(University of Chinese Academy oJ’Sciences,Beijing 100039) Abstract MPI Alhoall is an important collective operation.In muhicore clusters,many processes run in a node.On the one hand,shared memory can be adopted to optimize Alltoall communications of small messages by leader—based schemes.However,as these schemes adopt a fixed number of leader processes。the optimal performance can’t be obtained for all small messages.On the other hand, DrOCesses within a node contend for the same network resource.In Alltoall communications of 1arge messages,many synchronization messages are used. Nevertheless,the contention makes their latency increase many times and the synchronization overhead can’t be ingored.To solve these problems,tWO optimizations are presented.For small messages,the PLP method adopts changeable numbers of leader processes. For large messages,the LSS method reduces the number of synchronization messages from 3N to 2 .The evaluations prove two methods.For small messages,the PI P method always obtains optimal performance.For large messages,the LSS method brings almost constant improvement percentage.The performance is improved by 25 messages. for 32 KB and 64 KB Kev words Alltoall; shared memory; contention;leader—based process number; synchronization overhead 摘要MPI Alhoall是一种重要的集合通信.在多核机群中,一个节点内的多个进程同时参与Alhoall 通信.一方面,这些进程可以利用共享内存优化通信性能.虽然当前基于首进程的方法利用共享内存提 高了Alltoall小消息通信的性能,但由于采用固定数目的首进程,这些方法不能使所有不同长度的小消 息都获得最优性能.另一方面,这些进程需要竞争节点内有限的网络资源.在Alltoall大消息的通信中 存在许多个同步消息.然而竞争导致同步消息的延迟增大了数十倍,同步开销不可忽略.针对这些问题, 提出了两种不同的优化方法.对于Alltoall小消息通信,PLP方法根据小消息的长度采用不同数目的首 进程;对于Alltoal1大消息通信,LSS方法将同步消息的总数从3N减少到2 ̄/N.相关实验结果验证了 收稿日期:2011-12 30;修回日期:2012 05 07 、 基金项目:国家“九七三”重点基础研究发展计划基金项目(2012CB316502);国家“lk?-<”高技术研究发展计划基金项目(2009AA01A129); 国家杰出青年科学基金项目(60925009);国家自然科学基金青年科学基金项目(61100014);国家“八六 ”高技术研究发展计划子 课题(2010AA012404 6) 李 强等:MPI Alltoall通信在多核机群中的优化 这两种方法.对于小消息,PLP方法总是可以获得最优的性能.对于大消息,LSS方法获得的性能提升 比例几乎为常数,并且与系统的规模无关;其中32 KB和64 KB消息的性能提高了25 . 关键词Alhoall;共享;竞争;首进程数目;同步开销 中图法分类号TP393 MPI Alltoall通信作为一种重要的集合通信, 在HPC(high performance computing)应用如FFT ,CPMD[。 和NAMD[3]中广泛使用.在Alhoall 通信中,每个进程发送不同的消息到其他所有的进 程.随着系统规模的扩大,它需要花费更多的时问, 因此优化其性能变得十分重要. 随着多核技术的发展,高性能计算机广泛采用 多核处理器.在2011年6月的Top 500中,82 的 HPC平台是多核机群.在多核机群中,同一节点内 的多个进程同时参与Alltoall通信,这既带来了有 利的方面也带来了不利的方面. 一方面,这些进程可以利用共享内存优化通信 性能.由于大消息的内存拷贝代价很大,利用共享内 存的优化主要针对Alltoall小消息通信,它们采用 基于首进程的方法.在基于首进程的方法中,一个节 点内可以存在一个或者多个首进程.针对所有不同 长度的小消息,当前的基于首进程的方法采用固 定的首进程数目.例如,文献[47中的One—leader方 法在每个节点内采用一个首进程,文献[5]中的 M—leader方法在每个节点内采用M个首进程(M 等于节点内的进程总数).然而,首进程数目在很大 程度上影响着基于首进程的方法的性能,固定的首 进程数目并不能使所有不同长度的小消息都获得最 优性能.如在4.1节所提到的,对于512 B的消息, One—leader方法的性能是M—leader方法的2倍;而 对于32 B的消息,M—leader方法的性能是One— leader方法的1.8倍. 另一方面,这些进程必须竞争节点内有限的网 络资源.在Alltoall通信中,节点内多个进程同时向 网卡提交通信请求,因此网卡需要调度处理多个通 信请求.由于网卡的处理能力有限,每个请求平均需 要等待较长的时间才能获得网卡的服务.同时,在网 卡的调度过程中,由于通信上下文的切换,网卡可能 产生cache失效¨6].然而,在当前的MPI Alltoall大 消息通信中存在许多个同步消息.由于竞争,这些同 步消息的延迟增大了数十倍,如第3节所提到的,在 竞争条件下,64 B消息的延迟从1.26Fs增加到 29FS.因此,同步开销在很大程度上增加了整个 Alhoall大消息通信的时间. 本文详细分析了首进程数目和同步开销对 Alhoall通信性能的影响.相关的分析证明,首进程 的数目在很大程度上决定着Alhoall小消息通信的 性能,针对不同长度的小消息应该采用不同的首进 程数目.同时,本文推翻了以往对同步开销在大消息 通信中占很小比例的认识,在竞争条件下同步开销 是不可忽略的. 在相关分析的基础上,本文提出了两种不同的 优化方法,对于Alltoall小消息通信,恰当首进程 (proper leader processes,PLP)方法根据小消息的 长度采用不同的首进程数目.对于Alltoall大消息 通信,减少同步步数(1ess synchronization steps, LSS)方法将同步消息的数目从3N减少到2 ̄/N. 在Mvapich通信库中,我们实现了这两种优化方 法,并在240核的Infiniband机群上对它们进行了 评测,相关实验结果证明: 1)对于Alltoall小消息通信,PLP方法总是可 以获得最优的性能; 2)对于Alltoall大消息通信,LSS方法获得的 性能提升比例几乎为常数,其与系统的规模无关,对 于32 KB和64 KB的消息,它们的性能提高了 25 ; 3)对于FFT应用,两种方法都获得了很大的 性能提升.当问题规模为480×480×480时,240进 程的FFT的性能提高了2O . 1 背 景 1.1 Alltoall算法 Alltoall通信根据消息的长度采用不同的算法. Alhoall小消息通信采用Bruck方法[7],它有利于减 少通信的初始化开销,而Alhoall大消息通信采用 Virtual Ring算法,它有利于减小通信的传输开销. 许多研究 。。 证明,对于相同长度的消息,两种方法 的性能相差很大. 1.1.1 Bruck算法 假定N个进程参与Alhoall通信,这种算法需要 执行log N步.在第k步中,N/2个长度为m的小消 息首先聚合成长度为N×m/2的大消息,然后进程i 将聚合消息发往进程(i+2 ) N,同时,它接收来 自进程(i一2 +N) N的聚合消息.该算法所花费 的总时间Tmuck如式(1)所示: TB k—log N×f Ts+ ×TB 1,(1) 其中,T 为通信初始化的时间,T 为传输一个字节 所花费的时间. 1.1.2 Virtual Ring算法 该算法需要执行N步.在第k步,进程i发送 一个消息到进程(i+k)0 o N,同时,它接收来自进程 (i—k+N) N的消息.图1显示出算法在第2步 的执行过程,其中6个进程参与Alltoall通信.整个 算法所花费的时间T . 如式(2)所示: Tm 一N×(Ts+仇×TB). (2) Fig.1 Virtual ring algorithm of 6 processes 图1 6进程的Virtual Ring算法 1.2 MPI点到点通信协议 在MPI点到点通信中存在两种不同的通信协 议.Eager协议主要针对小消息,它在通信过程中不 需要同步消息;而Rendezvous协议主要针对大消 息,它在通信过程中需要使用同步消息. 图2显示了Rendezvous协议基于RDMA操作 的执行流程,其中RDMA操作被大多数高性能网 络所支持,如Infiniband网络.如图2所示,在一个 大消息的通信中,协议需要使用3个同步小消息,包 括请求发送消息RTS(request—to—send)、允许发送 消息CTS(clear—to-send)和发送完成通知消息FIN (finished).通过两个握手消息,发送方可以在发送 前确认接收方缓冲区是否可用.由于RDMA操作 需要使用接收缓冲区的物理地址信息,相应的地址 信息也包含在握手消息中.最后,在RDMA操作完 成后,发送方需要发送FIN消息来通知接收方通信 的完成. 计算机研究与发展2013,50(8) Fig.2 MPI rendezvous protocol 图2 MPI Rendezvous协议 2 首进程数目和同步开销对Alltoall通信的 影响 2.1首进程数目对Alitoall小消息通信的影响 为了更好地分析首进程数目对Alltoall小消息 通信的影响,下面首先介绍当前两种主要的首进程 方法:One—leader方法和M—leader方法.我们假定 N个进程参与Alltoall通信,每个节点上运行M个 进程,消息的长度为 . 如图3所示,在One—leader方法中,每个节点内 存在一个首进程.任意节点i(0≤i%N/M)内的首进 程是进程P 方法的执行流程如下.首先,节点内 M个进程的所有小消息在首进程上聚合为较大的 消息,其中,所有发往相同节点的小消息被聚合成为 一个较大的消息.因此,在首进程上,聚合消息的总 数为N/M,大小为M×M×m.然后,每个节点内的 首进程使用聚合消息参与节点间的Alhoall通信. 所有的首进程属于同一个通信域,通信域的大小为 N/M.最后,在节点间的Alltoall通信完成后,首进 程将接收到的聚合消息通过共享内存分散给M个 进程. Node(N/M—1) Fig.3 One—leader method 图3 One—leader方法 李强等:MPI Alltoall通信在多核机群中的优化 如图4所示,在M—leader方法中,每个节点内 存在M个首进程.首先,节点内M个进程的所有小 M×M< ≤Sizec l/M时,在0ne—leader方法中, 节点间Alltoall通信的消息长度大于Size 。,它 采用Virtual Ring算法,而在M—leader方法中,节 点问Alltoall通信的消息长度小于Size 。,它采 消息在每个首进程上被聚合为较大的消息,其中,所 有发往相同进程的消息被聚合成为一个较大的消 息,每个首进程上聚合消息的总数为N/M,大小为 MXm.然后,节点间的M个通信域同时进行Alltoall 用Bruck算法.结合式(1)(2),两种方法的开销如 表1所示.由于MXM×m>Size m 。,这说明通信 传输开销相对于通信初始化开销更加重要,因此 0ne—leader方法会获得更好的性能. 通信,通信域的大小为N/M.最后,在节点间的 Alltoall通信完成后,首进程将接收到的聚合消息通 过共享内存分散给M个进程. 1l l l尸00 ll 尸10 I … J!( = 2 l l l l 1 Il P11 l … l P(N/M一1)1 p l II;l d PO(M一1)f lP1(M一1)I… lPfN/M一1)( 一1) I f l l Node 0 Node 1 Node(N/M一1) Fig.4 M—leader method. 图4 M—leader方法 通过对两种方法的介绍可以发现,基于首进程 的方法其开销包括节点内通信和节点间通信两部 分.由于节点内的通信通过共享内存完成,并且内存 的性能远高于网络的性能,因此方法的主要开销取 决于节点间的Alltoall通信.如果用三元组{通信域 数目,通信域的大小,通信域内消息的长度}来表示 节点间的Alltoall通信,则One—leader方法对应的 三元组为{1,N/M,M×M×m),而M—leader方法对 应的三元组为{M,N/M,MXm). 对于节点间的Alltoall通信,存在Bruck和 Virtual Ring两种算法.两种算法的性能相差很大, 在实际的MPI Alltoall实现中,一个经验性的临界 值通常被用来决定Alltoall通信采用何种算法,假 定这个值为Size 结合Alltoall算法,两种方法 针对不同长度的小消息各有优势. 1)当消息的长度m满足M×M×m≤Size l 时,即m≤Sizec l/M×M时,在One—leader和 M—leader方法中,节点间Alhoall通信的消息长度 都小于Size …。,因此节点间的Alltoall通信都采 用Bruck算法.如文献[5]所提到的,由于M—leader 方法能够使一个节点内的多个进程同时进行通信, 它可以更充分地利用网卡,因此它可以获得比One— leader方法更好的性能. 2)当消息的长度m满足M×m≤Size 。,并 且M×M×m>Sizec l时,即m满足Sizec l/ Table 1 Latency of Alltoall Internode Communication 表1节点间Alltoall的通信开销 One 1eade 丽N×T N×(M×M×丽m×TB) M a M×(1。 丽N×Ts)M×(1og N×(N×等)×丁e) 3)当消息的长度m满足MXm ̄Size。 。 时,即 m>Size。 。/M时,在两种方法中,节点间的Alltoall 通信都采用Virtual Ring算法.由于M—leader方法 可以更充分的利用网卡,因此它可以获得更好的 性能. 通过两种方法的比较可以发现,首进程的数目 与节点间的Alltoall通信密切相关,因此它在很大 程度上决定着基于首进程的方法的性能.同时可以 发现,当前采用固定首进程数目的方法不能使所有 的小消息都获得最优的性能.为了获得最优的性能, 需要根据消息的长度选择不同的首进程数目. 2.2 同步开销对Alltoall大消息通信的影响 在Alltoall通信中,同一个节点内的多个进程 同时向节点内的网卡提交通信请求.由于网卡的处 理能力有限,每个通信请求平均需要等待较长的时 间才能获得网卡的服务,同时由于通信上下文切换, 网卡上可能发生cache失效.在本文中,我们用T 表示这部分等待时间以及处理cache失效的时间. 由于小消息的长度很小,小消息的传输可以很 快地完成,式(3)给出了竞争条件下小消息的延迟 T。M .由于网络MTU的,大消息的传输过程 需要进行分片,并且每个消息分片与其他(M一1)个 进程的消息分片交替进行传输.因此,M个进程在 大消息通信过程享网络带宽,每个进程平均获 得1/M的网络带宽,大消息的传输时间增大了M 倍,式(4)给出了竞争条件下的大消息的延迟丁I .。: Ts MS(;-一Tc+Ts+ms×TB; (3) TL MSG—Tc+Ts+( I ×TB)×M; (4) 其中,m 为小消息的长度,m 为大消息的长度. 同时,MPI Rendezvous协议在大消息的通信过 程中会使用3个同步小消息,式(5)给出了竞争条件 下,同步开销在整个大消息通信时间中的比例.在特 定的网络中,T 和T 都是确定的.例如Infiniband 网络中,T。接近1 s,而丁 是带宽4 GBps的倒数, 因此式(5)中,同步开销的比例P。 在很大程度 上取决于T 的大小: P…rh 一{3(Tc 4-Ts -4ms×TB)}/ {3(Tc -4Ts -4ms×TB)+ (Tc 4-Ts 4-( I ×TB)×M)}. (5) 为了获得Alhoall大消息通信中T 、的值,我们 创建了一个简单的评测模型.如图5所示,模型包含 3个节点,每一个节点上存在一块网卡,它们通过网 络连接起来.每个节点的M个进程同时进行消息长 度为 的单向带宽测试.如图5所示,带宽测试在 每个节点与其邻居节点之间执行.通过这种方式,模 型可以很好地模拟Alhoall通信在Virtual Ring算 法下的竞争.为了获得T ,的值,在节点0和节点1 之间,模型执行相应的小消息延迟测试. Fig.5 The experimental mode1. 图5评测模型 我们在多核Infiniband机群执行了评测模型, 其中M一8, t 一64 KB,机群的具体配置参见第4 节.图6给出了竞争条件下的小消息的延迟.与没有 竞争条件下的延迟相比,不大于64B的小消息的延 迟从1.5 s增大到29 s,增大了23倍.从式(3)可 以得出,T 一27 s.因此,在竞争的条件下,丁 、在小 消息的延迟中占主导地位.尽管没有在图6显示,64 KB的大消息的延迟从22.8 s增大到195.8肚S,增 大了9倍,这与式(4)一致.结合式(5),3个同步小 消息的开销占64 KB消息通信时间的30 .这推翻 了传统的认识,它们认为同步开销在Rendezvous协 计算机研究与发展2013,50(8) 议占很小比例. 40 —_.卜Latency with Contention +Latency Without Contention 30 .▲ 1O 0 一 一,一。一 一.一 - —卜_. 2 4 8 16 32 64 128 256 512 Message Size/B Fig.6 Greatly increased latency of small messages with contention. 图6小消息的延迟 当前的MPI Alltoall通信基于MPI点到点通 信实现.针对大消息,它采用Rendezvous协议.同 时,在Alltoall大消息通信的Virtual Ring算法中, 共有N个点到点大消息通信需要执行,因此当前的 Alltoall实现使用3N个同步消息.通过上面的分析 可知,由于竞争,这些同步消息的延迟增加了数十 倍,同步开销在很大程度上增加了整个Alhoall大 消息通信的时间. 3优化方法的设计和实现 3.1 PLP方法 针对Alltoall小消息通信,PI P方法根据小消 息的长度选择合适的首进程数目.假定M个进程参 加Alltoall通信,PLP方法可以选择的首进程数目 为M的所有约数.图7给出了PLP方法采用首进 程数目为任意约数d的情况,其中M—d×e. 如图7所示,每个节点内的所有进程分为d组, 每一组包含e个进程,并且每组包含一个首进程.在 方法的执行过程中,首先,节点内的M个进程的小 消息在d个首进程上聚集成为较大的消息,其中所 有发往相同组的小消息在相应的首进程上聚合成一 个大的消息.例如,节点0上所有发往组G 的小消 息在相应的首进程P。 聚合成为大的消息.聚合消 息的大小是M×m×g,即M× ×M/d.然后,在消 息聚合完成后,d个通信域同时进行节点间的Alltoall 通信,因此节点间的Alhoall通信所对应的三元组 为{d,N/M,M× ×M/d}.最后,在节点间Alhoall 通信完成后,首进程将获得的聚合消息分散给同一 组的所用进程. 李 强等:MPI Alltoall通信在多核机群中的优化 Fig.7 PLP method with d leader processes 图7首进程数目为d的PI P方法 如2.1节所述,首进程的算法的性能主要取决 于节点问的Alltoall通信.为了使节点间的Alltoall 通信获得最大性能,两方面的因素需要考虑,首先是 Alltoall算法的选择,其次是网卡的利用.如下所述, PLP方法根据消息的长度选择不同的首进程数目. 其中,M的所有约数通过集合{1,d ,d。,…,M)来表 示,它们满足1%d <d …<M. 1)当消息长度 满足M×Mxm≤Size 时,即 ≤Size 。/M×M时,不管采用M的哪一 个约数,节点间的Alltoall通信都采用Bruck算法, 此时应该采用更多的首进程来充分利用网卡,因此 首进程的数目为M. 2)当消息长度 满足M×M×m>Size。 。 I, 并且M×M×mid1≤Sizec l时,即m满足 Size lica1/M×M<m≤Sizec , l/M×M×dl,对于首 进程数目1,节点间的Alltoall通信采用Virtual Ring算法,而对于其他首进程数目,节点问的 Alltoall通信采用Bruck算法,由2.1节可知,此时 算法因素是主要因素,因此首进程的数目为1. 3)当消息长度m满足M×M×mid >Sizec l 并且M×M×mid 2≤Sizecnu 时,即m满足 Size /M ̄M×dl<m≤Sizec l/M×M×d2,对 于首进程数目l和d ,节点问的A[[toall通信都采 用Virtual Ring算法.由于较多的首进程可以更充 分利用网卡,因此首进程的数目为d . 依次类推,PI P方法首先考虑算法因素,在算 法因素相同的前提下它会选择较大的约数作为首进 程数目,从而可以更好地利用网卡. 3.2 LSS方法 针对Alltoall大消息通信,LSS方法减少了同 步消息的总数.在最新的Top 500中,41.20 的机 群使用Infiniband网络,虽然在本文中,LSS方法主 要基于Infiniband网络进行阐述,但是它也适用于 其他的支持RDMA操作的网络.如图8所示,它的 实现绕过了MPI点到点通信,直接实现在Infiniband 的通信协议Verbs上. Fig.8 Implementation of LSS method 图8基于LSS方法的Alltoall实现 3.2.1缓冲区内存的注册 RDMA操作需要使用缓冲区内存的物理地址 信息,因此,每个进程在发起Alltoall操作后,首先 对缓冲区的内存进行注册.在Infiniband网络中,通 过内存注册获得的物理地址信息包括一个64 B的 关键字和缓冲区的起始虚拟地址,它可以用二元组 {key,Vaddr}表示.对于任意进程P ,我们用J 来 表示它的接收缓冲区的物理地址信息.在N个进程 参与的Alltoall通信中,进程P 的接收缓冲区包含 N个长度相同的接收消息.通过I ,我们可以获得第 J个接收消息所对应的物理地址消息{key,Vaddr+ × ),其中m为消息的大小. 3.2.2减少用于握手的同步消息 在内存注册完成之后,LSS方法的执行流程集 成在Virtual Ring算法中.LSS方法通过进程的相 互协作实现进程间的同步以及接收缓冲区物理地址 信息的收集.图9给出了进程P 前3步的执行流程. 1)在第0步,进程P 将发送缓冲区中发往自 身接收缓冲区中的相应位置,在拷贝完成后,进程 P 新增物理地址信息的数目为0. 2)在第1步,进程P 发送消息到进程P…. 两个进程首先通过握手消息进行同步,握手消息包 含各自的物理地址信息f 和I + .在握手完成后, 进程P 获得J .同时,进程P 需要接收来自进程 P 的消息.通过它们之间的握手消息,P 获得 .因此在第1步完成后,进程P 新增物理地址 信息 和I . 3)在第2步,进程P 发送消息到进程P ,两 个进程首先进行握手,握手消息包含j , 和 ,I .在握手完成后,进程P 获得I 和 . 同时,进程P 需要接收来自进程P 的消息.通过 它们之间的握手,P 获得 和j 。.因此在第2步 完成后,进程P 新增物理地址信息 , 和 J +2,I汁 . 4)在第k步,当0≤是< ̄/N一1时,进程P 新 增2愚个物理地址信息. Pi一2 Pi一1 Pt PI+1 PI+2 ste 。口 亘亘亘 Fig. 9 Reducing synchronization messages for handshakes. 图9 LSS方法减少握手消息的执行流程 在第k步执行完成后,进程P 获得的物理地址 消息总数如式(6)所示.显然,当 > ̄/N时,进程P 获得了所有N个进程的物理地址信息.因此,当尼>  ̄/』\,时,LSS方法不再需要握手消息,它将同步消息 的数目从原来的2N减小到2 ̄/N. 1+2(1+2+3+…+k)一1+k(k+1).(6) 3.2.3减少用于完成通知的消息 RDMA操作在执行完成后,并不通知接收方 数据的到达.在当前的实现中,发送方需要发送FIN 消息来通知接收方RDMA操作的完成,为了减小 完成通知消息的数目,LSS方法采取如下的优化 方法. 在Virtual Ring算法执行之前,每个进程将N 个接收消息所对应的接收缓冲区的最后64 b设置 计算机研究与发展2013,50(8) 为缺省值V 如Oxffffffffffffffff.所有进程所设 置的缺省值是相同的.如图1O所示,在第k步,进程 P 向进程P 发送消息.在执行完RDMA操作后, 进程P 检查发送缓冲区最64 b的值V ,看它是 否等于 如果两个值不相等,进程P 不发送 FIN消息,否则,它将发送FIN消息.RDMA操作 保证最后发送的数据最后到达接收方,因此通过检 查接收消息最后64 b的值是否改变或者是否接收 到FIN消息,进程P 可以获知RDMA操作的完成 情况.如果两个条件中任意一个条件成立,则进程 P 可以得出RDMA操作完成的结论. E RDMA 目Vdefault \_ Fig. 1 0 Reducing synchr0nization messages for completion notification. 图1O I SS方法减少完成通知消息的执行流程 由于两个64 b值相等的概率非常小,在很多情 况下,并不需要发送FIN消息,因此LSS方法所使 用的FIN消息的数量可以忽略不计.结合减少的握 手消息,与原来的实现相比,LSS方法将所有的同步 消息从3N减小到2 ̄/N. 4 性能评测 我们在Mvapich一1.2rcl库中实现了两种方法. 实验平台是拥有20个节点的Infiniband网络机群. 每个节点使用2路6核的2 666 MHz Intel ̄Xeon ̄ X565O处理器,并且拥有一块40 Gbps的Mellanox ConnectX MT26428 HCA网卡.它们通过曙光 QDR HSSM 36端口的交换机连接起来.操作系统 为centos 5.3,内核版本为2.6.18—128.el5. 4.1 Alltoall小消息通信的性能 我们通过两种不同的配置来验证PLP方法,在 配置A中,160个进程参与Alltoall通信,每个节点 李 强等:MPI Alltoall通信在多核机群中的优化 上运行8个进程.在配置B中,240个进程参与 Alhoall通信,每个节点上运行12进程. 在配置A中,M=8,因此可以使用的首进程数 目为{1,2,4,8}.在Mvapich一1.2rcl库中,Sizec I一 8 192 B,表2显示了One-leader,M—leader以及PI P 3种不同的方法所采用的首进程数目,其中PLP方 法根据消息的长度采用不同的首进程数目.与配置 A类似,在配置B中,M一12,因此可以采用的首进 程数目为{1,2,3,4,6,12}.为了简化起见,在本文中 我们没有罗列配置B中PI P方法所采用的首进程 数目. Table 2 Leader Process Number of Different Methods 表2不同方法的首进程数目 图11显示了配置A中3种方法的性能(图中 的性能为Alhoall通信时间的倒数,并且以PLP方 法为基准).与One leader和M—Leader方法相比, PI P方法总是可以获得最优的性能.然而由于One— leader和M—leader方法采用的固定的首进程数目, 目PLP 日0ne.1eader FJ M.1eader 1.。 。.8 l 邑 塞叫 。・2 0.O 16 32 64 128 256 512 1 024 2 048 4 096 Message Size/B Fig.1 l Performance comparison in the configuration A. 图11 配置A中3种方法的性能 对于某些消息,它们的性能与PLP方法的性能相差 很大.对于不大于128 B的消息,由于One—leader方 法在节点内采用一个首进程,它所对应的节点问的 Alhoall通信不能充分利用网卡,因此其性能远低于 采用8个首进程的PLP和M—leader方法.对于64B 的消息,PI P方法的性能是One—leader方法的1.8 倍.对于大于256 B并且小于1 024 B的消息,由于 M—leader方法采用8个首进程,它所对应的节点间 的Alhoall通信中采用Bruck算法.然而此时节点 间的Alltoall通信更适宜采用Virtual Ring算法, 因此它的性能远低于采用Virtual Ring算法的PI P 和One—leader方法的性能.对于1 024 B的消息, PI P方法的性能是M~leader方法的2倍. 图12显示了配置B中3种方法的性能.对于 0u磊基 0 1 O 0 O 配置B,虽然PI P采用的首进程数目集合为{1,2,O 8 6 4 3,4,6,12},PI P方法仍然可以获得最优的性能.对 于某些消息,PLP方法的性能远高于One leader和 M—leader方法的性能.对于32 B的消息,PI P方法 的性能是One—leader方法的1.9倍,而对于512 B 的消息,PI P方法是M—leader方法的2.4倍. 目PLP 图one.1eader 目M-leader l6 32 64 128 256 512 1 024 2048 4 096 Message Size/B Fig.1 2 Performance comparison in the configuration B. 图12配置B中3种方法的性能 4.2 Alltoall大消息通信的性能 与基于点到点通信的实现相比,图l3给出了不 同进程规模下LSS方法所减少的Alhoall大消息通 信时间,同时图14给出了相应的性能提高(图中的 性能为Alhoall通信时间的倒数).在Alltoall大消 息通信中,竞争极大地增加了同步消息的延迟.由于 LSS方法将同步消息的数目从3N减少到2 ̄/N,因 此它在很大程度上减小了Alltoall大消息的通信时 间,这在图13和图14中获得了证明.在图13中,减 少的通信时间十分明显,并且它们在图14中对应的 O 2 O 0 ∞i\ 口 对 q u3寸 ×P0_【 性能提高也是十分显著的.对于相同长度的消息,踮 ∞ 减 0 少的通信时间与进程的规模呈线性关系,并且在图 14中对应的性能提升比例几乎为常数.对于32 KB 和64 KB的消息,它们的性能提高了25%. 十32 KB -啸 64 KB— 128 KB —÷}~256KB—静~512KB一十~1 024KB 一 ^、\ 一 / 一 / : 十一 二 一 撩一 ~ 二._一一-叶一-— 12D 132 144 156 168 180 192 204 216 228 240 Process Number Fig.1 3 Reduced latency with LSS method. 图13 LSS方法减少的通信时间 ∞0是l0 0 1 1 0 O 2 O 8 6 —-_32KB— 64KB—x_128KB — 卜256KB—毒~512KB— ~l 024KB 一一一 .一一一一一 一 ———。——_一 ■一一 一 一——— 一 孓—旱一;一暑—;~~;一罩~ 一;~—千~ : 120 132 144 156 168 180 192 204 216 228 240 Process Number Fig.1 4 Performance improvement with LSS method. 图14 LSS方法带来的性能提升 当消息的长度变大时,消息需要更长的网卡服 务时间,消息所面临的竞争压力也随之变大.因此, 在图13中,当进程规模不变时,长度较大的消息获 得更大的减少时间,这是因为它们所对应的同步开 销更大.当消息长度为64 KB时,它所减少的通信时 间是32 KB消息的2倍.同时,64 KB消息的传输时 间几乎是32 KB消息传输时间的2倍,因此32 KB 消息和64 KB消息所对应的性能提升比例十分接 近.当消息的长度大于64KB时,随着消息长度的增 加,消息的传输时间也随之增大,因此在图14中,相 应的性能提升比例随之下降. 4.3 FFT应用性能 为了评估两种方法对应用的性能提高,我们使 用FFT测试用例Parallel FFTE l1 来评估它们的性 计算机研究与发展\甚 II10 0JdIIIH 2013,50(8) 能.在FFT中,Al∞ ltoall通信的时间占整体执行时间 加 m 5 0 的很大比例. 为了评估PLP方法,FFT采用的问题规模为 120×120×120.在不同的进程总数120,180和240 下,Alhoall通信中的消息的长度分别为1920,848 和480 B.图15显示了PLP,0ne—leader和M—leader 3种不同的方法所对应的性能.对于3种不同长度 的小消息的Alltoall通信,PI P方法的性能是最高 的,因此当采用PLP方法时FFT获得最好的性能. 瞄PLP 静One-leader 妇M.1eader O O 0 4 2 0 120 180 240 Process Number Fig.15 Performance with shape size of l20×l2O×l20 图15 12O×12O×12O规模下的性能 为了评估LSS方法,FFT采用的问题规模为 480×480×480.在不同的进程总数120,18O和240 下,Alhoall通信中的消息的长度分别为123 KB,63 KB 和31 KB.如图16所示,LSS方法针对不同的进程 规模都带来了性能提升.如图14所示,当消息长度 为32KB和64 KB消息时,Alhoall通信获得最大比 例的性能提升.因此当进程总数为180和240时,它 们获得的性能高于进程总数为120的情况,它们的 性能提高了20 . Fig.16 Performance with shape size of 480×480×480 图16 480×480×480规模下的性能提升 5 相关工作 已有的很多工作是关于MPI Alhoall通信优化 李 强等:MPI Alltoall通信在多核机群中的优化 的.文献[8-1O]主要研究如何动态地选择最优的 Alltoall算法,它们表明不同的算法对Alltoall通信 性能影响很大.文献[11]研究了多核环境下节点内 集合通信的优化.在本文中,我们借鉴了这些研究的 成果,并结合Alltoall算法分析了首进程数目和同 步开销对Alhoall通信的影响. 为了利用共享内存提高Alhoall的通信性能, 文献F43在早期的SMP提出了One—leader的方法; 文献[5]在多核的体系结构下提出了M—leader方 法,它采用多个首进程来利用网卡,从而获得较好的 性能.然而,这两种方法针对所有不认同长度的消息 采用相同的首进程数目.与这两种方法不同,PLP 方法根据消息的长度采用不同数目的进程,相对于 这两种方法它总是可以获得较好的性能. 为了减少Alltoall大消息通信中的同步开销, 文献[12]采用Direct Eager的方法将同步消息的数 目从3N减小到2N,从而提高了Alltoall大消息通 信的性能.文献[13]采用MPI Allgather操作实现 了所有进程的同步以及接收缓冲区物理地址信息的 获取,然而根据文献[14],Allgather操作会吸收额 外的系统噪声,从而影响Alltoall通信的性能.在本 文中,LSS方法进一步减小了同步消息的数目,它将 同步消息的数目从3N减小到2 ̄/N. 6结论和未来工作 ‘多核机群既为Alltoall通信带来了有利的~面 面也带来了不利的一面.一方面,同一节点内的多个 进程可以利用共享内存优化通信性能.另一方面同 一节点内的进程需要竞争节点内有限的网络资源, 而竞争会导致同步开销变大.在本文中,对于Alltoall 小消息通信,与当前首进程数目固定的方法不同, PLP方法针对不同长度的小消息采用不同的首进 程数目,因此它可以使所有不同长度的小消息都获 得最优的性能.对于Alltoall大消息通信,LSS方法 将同步消息的数目从3N减小到2 ̄/N,从而减少了 同步开销,并使Alltoall大消息通信获得比例为常 数的性能提升.对于32 KB和64KB的消息,它们的 性能提高了25 . 在下一步工作中,我们将在更大的规模上评测 PI P和LSS方法,同时,MPI包括多种集合通信如 MPI Allgather等,我们将在多核机群中对这些集 合通信进行类似的优化. 致谢 感谢张攀勇和张翔在论文撰写过程中所 给予的帮助! 参 考 文 献