基于线程的MPI通信加速器技术研究
2023-08-19
来源:爱go旅游网
第34卷第1期 2011年1月 计 算 机 学 报 Vo1.34 No.1 CHINESE J()URNAL 0F C0MPUTERS Jan.2011 基于线程的MPI通信加速器技术研究 刘志强 宋君强 卢风顺 赵 娟 (国防科学技术大学计算机学院长沙410073) 摘 要 为了针对多核系统构建更高效的MP1支撑环境,文中提出了一种基于线程的MPI加速器,称作MPIActor. MPIActor是一种用于协助传统MPI库的透明中问件,用户可以在编译期选择是否在单线程MPI程序中采用该中 间件.加入MPIActor后,每个节点内的MPI进程都被映射成同一进程中的多个线程,从而节点内的通信可通过轻 量级的线程通信机制实现.作者给出了MPIActor的基本设计,详细阐述了其工作机制、通信体系结构及关键技术, 并在真实系统上分别针对MVAPICH2和OpenMPI并行环境利用OSU LATENCY基准测试进行了性能评测.实 验结果表明在两种MPI环境J-进行节点内8 KB~4 MB数据通信时MPIActor都能使通信性能平均提高一倍左右. 关键词 MPI软件结构;线程MPI;MPI加速器;MPlActor 中图法分类号TP302 DOI号:10.3724/SP.J.101 6.2011.00154 A Study of Thread—Based MPI Communication Accelerator I IU Zhi—Qiang SONG Jun Qiang LU Feng—Shun ZHAO Juan (College of Computer,National University o/Deferise Technology,Changsha 410073) Abstract Towards building a more effective MPI infrastructure for multicore systems,a thread— based MPI program accelerator,called MPIActor,is proposed in this paper.MPIActor is a trans— parent middleware tO assist general MPI libraries.For any single—thread MPI program,the MPI— Actor is optional in compiling phase.With the join of MPIActor,the MPI processes in each node wilI be mapped as several threads of one process,and the intra—node communication will be en— hanced by taking advantage of the light—weight thread—based mechanism.The authors have de— signed and implemented the point tO—point communication module.This paper details the mecha— nism.the communication architecture and key techniques,and evaluates it with OSU LATENCY benchmark on a real platform.The experimental results show that the introduction of MPIActor can achieve a 2X performance for transferring 8 KB and 4 MB messages on MVPICH2 and OpenMPI parallel environments. Keywords MPI software architecture;threaded MPI;MPI accelerator;MPIActor 认为是一种能够继续保持处理器性能发展遵循摩尔 1 引 言 多核技术,即在同一芯片内包含更多的核心,被 定律的有效手段.在过去的几年中,多核处理器的发 展验证了该手段的有效性,其间处理器内的核心数 目也基本保持每18个月左右增长一倍①②.可以预 收稿日期:2010—07 12;最终修改稿收到日期:2010-09—20.本课题得到国家自然科学创新群体“千万亿次高性能计算关键技术”基金 (60921062)资助.刘志强,男,1981年生,博i研究生,助理研究员,主要研究方向为并行算法及高效MPI基础软件设计与优化.E-mail: liuzq@nudt.edu.cn.宋君强,男,1 962年生,研究员,博士生导师,主要研究领域为并行算法及数值天气预报.卢风顺,男,1982年生,博士 研究生,主要研究方向为并行算法及GPU计算.赵①娟,女,1981年生,硕士,助理工程师,主要研究方向为并行算法. Intd官方网站.http://www.inte1.com(最后访问时问:2O10.6.22) ②AMD官方网站.http://www.amd.corn(最后访问时间:2010.6.22) 1期 刘志强等:基于线程的MPI通信加速器技术研究 见,在相当的一段时问内多核处理器的核心数目还 会持续增长. 在多核处理器高速发展的背景下,近年来,采用 多核处理器的集群系统(简称多核集群)主导了高性 能计算(HPC)领域的主流硬件平台.消息传递接口 (MPI)是该领域并行程序开发的事实标准.基于 MPI的并行程序通过MPI运行时库提供的消息传 递接口函数进行通信;随着节点内核心数目的增多, 节点内通信的性能将会对MPI程序的整体性能产 生越来越重要的影响.例如当64个MPI进程平均分 布在16个节点上进行HPI 基准测试时,约有57% 的通信发生在节点内u]. 传统MPI基础软件(如MPICH2 ̄、OpenMPI ̄ 和MVAPICH④)的节点内通信性能受限于低效的操 作系统进程问通信.这一问题归因于传统MPI基础 软件将每个MPI逻辑进程映射为一个操作系统进 程;相应地MPI逻辑进程问通信只能通过高代价的 操作系统进程问通信完成,由此带来的性能缺陷难以 通过单纯地改进通信算法来克服. 在20世纪90年代末大规模SMP系统发展的顶 峰时期,一些工作口一曾针对大规模SMP系统对线程 MPI(Threaded MPI)进行过研究.线程MPI即:在共 享内存系统中,将MPI逻辑进程映射为同一操作系 统进程中的多个线程.虽然这些早期的工作随着大规 模SMP系统淡出市场没有得到延续,但这些工作的 结果表明:线程MPI可以通过改进MPI程序的运行 机制来提供高效的节点内通信. 理论上线程MPI同样是一种可以用于改进多核 系统上节点内通信性能的有效途径.但MPI多年来 的发展和用户对MPI应用需求的提高使得线程MPI 面临两方面的问题.首先,线程MPI难以支持MPI逻 辑进程内的多线程.支持MPI逻辑进程内的多线程 是MPI 2.0标准中的一项重要内容④,它的缺失将会 导致多线程应用程序(如基于MPI+OpenMP的应用 程序)无法在线程MPI环境中正常运行.其次,传统 的MPI基础软件历经数年的发展,规模已非常庞大, 由于底层机制的改变,即使在已有代码的基础上开发 一套完整的线程MPI基础软件也需要庞大的工作 量.据我们所知,目前仍无成熟的线程MP1支撑环境 供用户使用. 为了实现高效的线程MP1支撑环境,本文提出 了一种基于线程的MPI加速器技术,称作MPIActor. MPIActor是一种可协助传统MPI软件的透明中间 件,它位于用户MPI程序和MPI运行时库之间并 对用户MPI程序提供线程MP1支撑环境.传统的 MP1支撑环境由单一MPI运行时库实现所有通信; 引入MPIActor后,MP1支撑环境则由独立并低耦 合的两部分运行时库分别完成节点内通信和节点间 通信.MPIActor的贡献在于: (1)以低耦合的软件结构化解了线程MPI和 MPI逻辑进程内多线程之间的矛盾.程序员可以根 据需要在编译期选择是否加入MPIActor,编译时 加入MPIActor得到的MPI可执行程序是线程 MPI的,编译时不加入MPIActor得到的MPI可执 行程序能够支持MPI逻辑进程内多线程. (2)实现了线程MP1支撑环境并充分利用了传 统的MPI基础软件,降低了开发线程MPI的难度和 工作量.在基于MPI+MPIActor的并行程序中,节点 内通信由MPIActor完成,节点问通信由MPIActor 转发到下层的MPI库完成.因此,MPIActor可以 专注于实现高效的节点内通信,而对节点间通信只 需实现简单的转发. (3)不依赖于特定的传统MPI基础软件提高节 点内通信性能,即MPIActor即可用于MVAPICH2 也可用于OpenMPI或其它符合MPI2.0标准的基 础软件. 我们目前已实现了MPIActor的基本框架和节 点内点对点通信模块.本文在一个双路四核Nehalem 系统 上利用OSU LATENCY基准测试③分别在 MVAPICH2和C’penMPI环境中对MPIActor进 行了性能评测,实验结果表明MPIActor能够在不 影响节点间通信的情况下有效地提高MPI运行环境 的节点内通信性能.在两种MPI环境上传输8 KB~ 4 MB之间的数据时,MPIActor能够使节点内通信 性能平均提高一倍左右.这些数据表明MPI加速器 技术是一种对传统MPI基础软件有效的节点内通 信性能优化技术. 本文第2节介绍相关工作;第3节阐述MPI— Actor的工作机制;第4节介绍MPIActor的通信体 系结构;第5节和第6节介绍实现MPIActor两个 方面的关键技术:通信操作聚合和基于单次内存拷 贝的节点内点对点通信;第7节在真实平台上进行 ①MPICH2网站.http://www.mcs.an1.gov/mpi/mpich2(最后 访问时间:2010.6.22) ②OpenMPI网站.http://www.open-mpi.org(最后访问时间: 2010.6.14) ③ MⅥ ICH网站.http://mvapich.cse.ohio-state.edu(最后访 问时间:2O10.6.14) ④MPI Forum website.http://www.mpi-forum.org(最后访问 时间:2O10.6.15) 计 算 机 学 报 2011年 性能评测;最后一节对本文的工作进行总结并提出 对未来工作的展望和设想. 代码做任何手工改动.我们在下文将基于MPI+ MPIActor的应用程序简称为MPIActor程序,相应 的并行作业称为MPIActor并行作业.本节的以下 2 相关工作 MPI标准的制定计划诞生于1992年,并于 1994年发布第一个版本.MPI的初衷是为分布内存 内容首先阐述MPIActor程序的运行期机制,其次 介绍将MPIActor加入传统MPI程序的编译期 机制. 系统上的消息传递并行编程模式提出统一的标 准④,因此,在基于传统MPI基础软件的程序中,每 个逻辑上的MPI进程在运行时都将被映射成一个 操作系统进程. MPI具有直观的编程模式和良好的可扩展性, 因此它迅速成为高性能计算领域并行程序设计的事 实标准,并广泛地应用于共享内存系统,如大规模 SMP系统.但在共享内存系统中,进程级并行相对 于线程级并行的交互开销往往要大数倍.传统上基 于进程的MPI难以发挥出共享内存系统的最佳性 能,于是,早期也有多个工作关注于线程MPI¨2 . T0MPIL3 和MPI~Lite 研究在单台共享内存系统 中以线程为单位运行MPI程序.TMPI一。 是公开发 布的第一个可以用于共享、分布内存混合系统上的 线程MPI.但随着2000年左右大规模SMP系统淡 出市场,这几项线程MPI的工作都没有继续下去. 近年来,采用多核处理器的集群系统(简称多核 集群)主导了高性能计算领域的主流硬件平台④.随 着多核处理器的发展,主流集群系统各节点内的计 算核心数目不断增长,节点内通信性能的重要性不 断增加,线程MPI又再次被关注.AzequiaMPI 是 一项目前正在进行中的工作,它是西班牙“Ingenio 2010”政府计划@中的一个子项目,其目标是建立一 套完全支持MPI 1.3标准的线程MPI基础软件. 不同于TMPI和AzequiaMPI,MPIActor以透 明中间件的方式基于传统MPI基础软件提供线程 MPI环境,从而解耦了线程MPI与MPI进程内多 线程之间的矛盾.引入MPIActor后,传统MPI基 础软件的结构得到改进,节点内通信和节点问通信 分别由低耦合的独立模块完成,即:传统MPI库完 成节点间通信;MPIActor专注于实现节点内通信. 3 工作机制 如图1所示,MPIActor通过编译期和运行期 的相关支持使传统的用户MPI程序在线程MPI环 境中执行,期间不需要用户专门为MPIActor对源 图1 用户MPI程序在编译期被转换为基于MPI+ MPIActor的可执行程序,运行期在线程MPI环境中执行 3.1运行期机制 传统MPI程序的运行机制如图2(a)所示,在此 运行机制下,每个MPI逻辑进程在运行时都被映射 为一个操作系统进程,不论节点内通信还是节点问 通信都通过MPI运行时库完成并最终通过某种进 程问通信机制实现. 禽 ◇ ◇ /\ (a)传统MPI程序的运行机制 圃圃…MPIAct0r运行时库 MPI运行时库 ◇i ◇ ◇ (b)MPIActor程序的运行机制 图2传统MPI程序与MPIActor程序的运行机制比较 ① The History of MPI.http://beige.UCS.indiana.edu/I590/ node54.html(最后访问时间:2010.6.14) ②Top500官方网站.http://www.top500.org(最后访问时 间:2O10.6.15) ③ 西班牙Ingenio 2010政府计划官方网站.http://www.in— genio2010.es(最后访问时间:2010.6.15) 1期 刘志强等:基于线程的MPI通信加速器技术研究 157 MPIActor程序的运行机制如图2(b)所示,在 MPIActor的支持下,同节点的MPI逻辑进程被映 函数main改名为mpi—main;(2)将全局变量和静态 变量改为线程局部存储(thread local storage) ]的 射为同一进程(称容器进程)中的多个线程.这些线 程由容器进程的主线程根据MArun传人的参数派 生,其中MArun是用来提交MPIActor并行作业的 变量;(3)将程序中调用的非线程安全的函数(如 getopt)改为调用MPIActor运行时库中相应线程安 全的函数. 脚本程序,它将用户命令参数分解,一部分传递给 在编译和链接阶段,MAcc利用mpicc完成对 MPI作业提交器,另一部分传递给容器进程. MPIActor运行时库为MPI逻辑进程构建了以 预编译转换后代码的编译和链接工作.在编译阶段, MAcc指定mpi.h的路径到MPIActor提供的mpi.h. 在链接阶段,MAcc添加MPIActor的运行时库. 线程为单位执行的基础结构,它位于用户MPI程序 和MPI运行时库之间,处理运行时用户MPI程序 中的MPI调用,其中节点内通信由MPIActor运行 时库单独完成,节点间通信由MPIActor转发到底 层的MPI库完成.我们将这种由MPIActor协同标 准MPI库处理MPI通信调用的方法称为通信操作 聚合技术,它是MPIActor成为透明中间件的关键 技术之一,将在本文的第5节中详细阐述. 3.2编译期机制 为了不给用户增加额外的工作量,MPIActor 在改变MPI程序运行方式的同时保持了传统的 MPI编程模式.但在传统的MPI编程模式中存在一 个潜在假设:每个MPI逻辑进程都有独立的内存地 址空间.传统基于进程的MPI恰好自然地满足这一 假设,因此用户在编写MPI程序时往往习惯于使用 全局变量实现MPI逻辑进程全局范围内的数据共 享或者使用静态变量实现对数据的静态访问.不幸 的是基于线程的MPI无法满足这一假设,若不改变 用户的编程习惯,就需要对线程MPI提供编译期 支持. 在MPIActor的支撑软件中,MACC(MPIActor C Compiler)为基于MPIActor的C语言程序提供 编译期支持.它的工作原理如图3所示,由用户 MPI程序源代码到MPIActor可执行程序需要经过 3个阶段:预编译、编译和链接. 面 图3 MAcc的上作过程 在预编译阶段,MAcc将用户MPI程序代码转 换为线程安全的程序代码,确保用户MPI程序在映 射为同一进程中多个线程执行时彼此的数据空间无 重叠.MAcc主要完成3项工作:(1)将程序的人口 目前我们正在设计用于编译Fortran语言和 C++语言程序的编译器,其工作步骤与MAcc类 似,但需要注意的是Fortran语言目前还不支持线 程局部存储,支持Fortran语言程序的预编译器要 比用于C和C++语言的预编译器复杂得多.通过 编译期的支持,用户可不对原程序代码作任何修改 将基于传统MPI软件的程序代码编译成基于 MPI+MPIActor的可执行程序. 4通信体系结构 MPIActor的通信体系结构是实现通信操作聚 合和节点内通信的基础.如图4所示,在此通信体系 结构中,N个MPI逻辑进程问通过 个虚拟通道 实现点对点通信,即任意一对MPI逻辑进程PA和 P 对应两个独立的虚拟通道Cn 和C . P l 4 MPIActor的通信体系结构 若 和P。属于同一节点,则C 和C n为节点 内通信虚拟通道(ON-host Virtual Channel,()NVC), 它是MPlActor实现节点内通信的物理基础结构, 节点内通信操作在此基础上实施.图4中的每个灰 色圆形都表示一个ONVC,ONVC是单向通信通 道,它被接收端MPI逻辑进程创建并由发送端MPI 逻辑进程持有引用指针,即C 用于Pn发送消息到 158 i1一 算 机 学 报 p ,C。 用于相反方向通信.另外,ONVC内包含 3个用于实现节点内点对点通信的先入先出(FIFO) Actor的运行机制,MPI通信请求须根据其通信位 置特征由不同的运行时库处理,因此MPIAetor在 队列:接收请求队列、发送请求队列和anysource接 收请求队列.节点内通信的细节部分将在本文第6 节中详细讨论. 若P 和P 属于不同节点,则( ne和C 为节 点间通信虚拟通道(OFf—host Virtual Channel, oFVC).与ONVC不同,OFVC并不作为节点间通 重载MPI接口时需要在过程中辨别通信的类型,我 们称这一过程为通信请求分离,简称CRS(Commu— nication Request Separating),它是通信操作聚合过 程中的第一个关键步骤. 从CRS的输入角度看可将MPI通信请求分为 两类,具体分类如表1所示. 信的物理基础结构,仅缓存用于转发节点间通信所 需的一些必要信息,包括远端节点rank(Remote Node Rank,RNR)、发送标记基数(Send Tag Base, STB)和接收标记基数(Receive Tag Base,RTB). 图4中的白色圆形表示OFVC,OFVC是双向通信 通道,它由各个进程创建并独立持有,即Cne由Pn 持有并缓存与P。通信的相关信息,C。 由P 持有 并存放与P 通信的相关信息. 5通信操作聚合技术 通信操作聚合是MPlActor整合自身运行时库 与底层标准MPI库实现MPI通信语义的关键技 术.其基本过程如图5所示,我们将每一次MPI通 信接口调用作为一次通信请求,MPIActor程序发 出的通信请求首先经由“通信请求分离”过程判断通 信属于何种类型,再根据通信的类型将请求递交给相 应的聚合过程处理.本节将详细讨论这一关键技术. E MP1库中的 处理过程 通信操作 返回结果 图5通信操作聚合过程框图 5.1通信请求分离 在多核集群系统上,MPI消息传递通信究竟发 生在节点间还是在节点内是一个运行时特征,我们 称此特征为通信位置特征,MPI标准中定义的通信 接口语义并不区分类似的运行时特征.根据MPI— 表1从CRS角度分类MPI通信请求 第1类通信请求须根据接口参数进行CRS. MPIActor通过虚拟通道通信体系结构建立了MPI 逻辑进程问的通信关系,在此基础上第1类通信请 求通过输人参数获取虚拟通道,并根据通道的类型 判断通信请求的通信位置特征. 另一类通信请求根据通信请求对象中的通信位 置特征进行通信请求分离,其中这些通信请求对象 由第1类通信请求的非阻塞通信过程返回. 经由CRS过程,MPI通信请求将会被传递给 MPIActor的通信过程、标准MPI库的通信过程或 MPIANY~SOURCE处理过程作进一步处理. 5.2节点间通信请求的转发方法 设r为输入MPIActor的通信请求,若r对应 的通信发生在节点间,则r会被MPIActor转发到 底层的标准MPI库处理,在此过程中MPI库需要 知道与对方节点容器进程中的哪个线程进行消息交 互,这是节点间通信请求转发需要解决的问题.本小 节将以转发节点间MPI—Ireev请求为例详细讨论节 点间通信请求转发的方法及规则.我们有以下定义. 定义1(通信请求对象). 通信请求对象是一 个三元组CR0一<S,D,T>,其中: 5一(i i∈N,0 i<P }U{MPI—ANY— SOURCE)表示通信源MPI进程,其中P…为MPI 辑进程个数. D一{i}i E N,O <P )表示通信目的MPI 进程. 丁一{t f£E N)U(MPI—ANY—TAG)表示通信 标记. 1期 刘志强等:基于线程的MPI通信加速器技术研究 159 定义2(接收请求). 接收请求是一个二元组 RR一(S,丁>,表示从源MPI进程接收某标记的数 据,其中S和J『的定义同定义1. 定义3(MPI进程的节点位置). 称MPI进程 所在的节点为节点位置: npos:Proc Node, 其中Proc,Node'S_N,npos( )能够得到MPI进程 P的节点位置. 定义4(非阻塞接收). 非阻塞接收以非阻塞 方式处理接收请求并返回一个通信请求对象: MPI—Irecv:{P}×RR— CR0. MPI—Irecv(P,(S, ))一(P,S,f),其中P为当前 MPI进程的进程序列号(rank). 对非阻塞接收MPI—Irecv(P,<S,t>),在S不等 于MPI—ANY—SOURCE的情况下,如果npos( )不 等于npos(s),则<S,t>需要被转换为<S ,t >并通过 底层MPI库中的MPI—Irecv(P ,(S ,t ))操作完成 通信,其中: P 一npos(p)。s 一npos(s). 当t不等于MPI—ANY—TAG时: t =L(s)《offset +L(户)《offset +t, 其中o_,fset 和offset 分别表示发送位置偏移和接 收位置偏移,L(z)表示MPI进程 的本地进程号. 可知MPIActor程序进行节点通信时源进程和目的 进程通过底层MPI接口中的通信标记参数识别.另 外,若 为P到S的通信虚拟通道,则有 C rtb===S《offset 十P《offset +t, 其中C rtb为C 中的接收标记基数.在实现节点 间通信请求转发时可利用此基数转换通信标记. 当f—MPI—ANY—TAG时, 一t,此类型的节 点间通信将通过MPIAetor内置的特殊过程处理. 5一MPI—ANY—SOURCE情况下的通信请求处理方 法将在5.3节讨论. 5.3对MPI_ANY_SOURCE类型请求的处理方法 MPI—ANY—SOURCE可作为MPI接收(Recv) 或检查(Probe)接口中“数据源进程号”的参数值,表 示任意数据源.当MPI程序调用接收或检查操作时 的“数据源进程号”参数值为MPI—ANY—SOURCE 时,算法无法通过输入参数的静态值确定其发出的通 信请求对应节点间通信还是节点内通信,我们称此类 通信请求为MPI—ANY—SOURCE类型的请求,或 简称ASR(Any Source Requests)类型的请求. ASR通过专门的处理过程协同MPIActor通 信库和MPI通信库中的通信操作完成,涉及此类 通信的MPI接口有MPI—ReCV、MPI—Irecv、MPI— Iprobe、MPI—Probe和所有第2类通信请求接口. 本小节的以下内容将以MPI—Iprobe为例讨论 针对ASR的处理方法.MP1一Iprobe操作的定义为 MPI—Iprobe(SOUt'Ce,tag, ̄omTiq,flag,status), 其语义是在不实际接收输入消息的情况下检查是否 收到COD'tTl"l通信域中源为S01 ̄'g'CC标记为tag的消 息.当调用MPI—Iprobe“数据源进程号”参数的值为 MPI—ANYSOURCE时,通信请求由CRS传给 ASRMPI—Iprobe处理,其定义和算法如图6所示. ASR—MPI—Iprobe算法通过MPI—Iprobe检查 并获取发送给所属容器进程的节点间通信消息,若收 到则根据获取到的信息检查消息是否为发送给本 MPI逻辑进程的消息;另一方面,ASR_MPI Iprobe通 过检查虚拟通道的发送队列检查是否有节点内通信. 图6 ASR—MPLIprobe算法 除ASR MPI—Irecv外,其余ASR通信请求对 应的处理方法在基本原理上都与ASR—MPI—Iprobe 算法相似.ASR MPI—Irecv较为特殊的原因是它的 非阻塞数据接收机制,如何协同MPIAetor通信库 和MPI通信库有效实现这一机制是一个难点.ASR MPIIreev的基本原理是若通过MPI—Iprobe未发 现匹配的请求则同时启动节点内MPI—Irecv通信和 节点间MPI_Irecv通信,然后在接收到数据后再对其 中一个选择性取消.为此我们在MPIAetor的通信体 系结构中为每一个MPI逻辑进程增加了一个any— source请求队列,并将其连人虚拟通道.ASR MPI— Irecv的实现方法我们将在后续工作中详细介绍. 6基于单次内存拷贝的 节点内点对点通信 基于单次内存拷贝的节点内点对点通信是 160 计 算 机 学 报 2011薤 MPIActor提高通信性能最重要的技术手段之一. 在MPlActor程序的运行机制下,若点对点通 信发生在节点内则源MPI进程中的发送缓冲区和 目的MPI进程中的接收缓冲区都属于同一进程地 址空间,进而节点内点对点通信可自然地通过单次 内存拷贝实现. 本节的以下内容主要讨论MPIActor中基于单 步骤进行通信请求匹配,第2个步骤根据第1个步 骤的运行时结果选择创建或处理通信请求. 发送算法的第1个步骤遍历虚拟通道的接收请 求队列并获取第1个匹配的通信请求对象req,此过 程的时间复杂度为0(n).算法第2个步骤的两个分 支分别对应成功获取匹配的通信请求对象和未获取 通信请求对象的情况,如果成功获取匹配的通信请 求对象req则将req从接收请求对列中移出并根据 请求中的接收缓存地址和大小完成数据拷贝;如果未 次内存拷贝的点对点通信算法.另外,为了更清晰地 说明MPIActor节点内通信的性能优势,我们将在 最后一个小节详细介绍基于核心态内存映射的单次 获取匹配的通信请求对象则申请一个新的通信请求 对象并填充本次发送请求的信息,之后加入发送请求 队列.两个步骤都在虚拟通道访问锁的保护下进行. 接收算法与发送算法的结构相同,具体过程对 偶.图7用黑体标记了两种算法的区别. 内存拷贝机制并与之进行比较. 6。1 节点内单次拷贝点对点通信算法 MPIActor中的节点内点对点通信算法如图7 所示,包括相互配合的发送算法和接收算法.接收和 发送算法的基本结构类似,均包含两个步骤:第1个 算法.Intra—MPI—Send. 输入:buf,bsize,dest,tag,t.'OlnlH 输出:buf BEGIN 算法.1ntra~MPl—Recv. 输入:Cou ̄t,SF ̄,tag,c0 输出:buf BEGIN /*步骤1*/ 通过本进程号(rank)和dest从COlYl??I对应的通信域对象中得 到通信虚拟通道CVC: mutexlock(&CVC.7 ̄bttel-);//*加锁* /X步骤1* 通过本进程号(rank)和S7%从CO?lqtYl对应的通信域对象中得 到通信虚拟通道CVC; rnutexlock(C .mutex);/*加锁*/ r钾 CVC.reevreq—queue.head; IF req! NUI L req CVC.sendreqqueue.head; —IF req l:NUI I WHII E(req!:NULI && re口一>state>WAITFORANSWER&& WHILE(req!一NU1 1 && rPq一>state ̄WAITFOR ANSWER&& req与本发送请求匹配) req req一> ̄leit; req与本接收请求匹配) rPq—req~>next; END END /*步骤2*/ IF req!=NULL / *步骤2* IF req f=NUI L —dequeue(CVC.recvreqELSE queue,req);/*将req&{歹0* memcpy(req一>recvbuf,buf,req" ̄>bsize); dequeue(CVC.sendreq—queue,req);/*将req出列*/ memcpy(buf,req-- ̄sendbuf,bsize); EI SE 申请一个新的通信请求对象req,并初始化; req一>sendbuf= “,; enqueue(CVC.sendreqqueue,req):/*将req人列*/ 申请一个新的通信请求对象req,并初始化; req—>recv妇f==buf; enqueue(CVC.recvreqqueue,req);/*将req入列*/ END mute2dEND unlock(&CVC.mulP r);// 解锁*/ mutea-unlo ̄k(&CVC.mutex);/*解锁*/ ENI) END (a)发送算法 (b)接收算法 匿f 7 节点内点对点通信算法 6.2进程间单次内存拷贝的点对点通信 于该通信机制的通信过程仅需单次内存拷贝. KBMMCM的基本原理如图8(a)所示. 传统的MPI软件通常基于用户态共享内存实 现节点内点对点通信,通信的基本原理是将源MPI 进程中的消息拷贝到共享内存的缓冲区,再从共享 KBMMCM需要在系统中建立一个内核模块,此模 块可通过相应的KBMM驱动进行使用. 基于KBMMCM的点对点通信过程主要通过 6步完成: 1.发送端将发送缓冲区的起始地址 厂厂和缓冲区大 小size发送给KBMM驱动. 内存缓冲区拷贝到目的MPI进程中的接收缓冲区, 整个通信过程需要通过两次内存拷贝. 近年来的一些工作(如MVAPICH 2中的LiMiCE。] 和OpenMPI中的KNEM )为传统的进程MPI提 出了一种新的节点内点对点通信机制:基于核心态 内存映射的通信机制(Kernel Based Memory Map— ping Communication Mechanism,KBMMCM),皋 2.KBMM接收到 和size后将发送进程的进程指 针(current)、内存指针(current一>mm)、bu_厂,占用的页大 小等信息存在一个数据结构kbmm一5中返回给发送进程. 1期 刘志强等:基于线程的MPI通信加速器技术研究 釜 一 C L 用户态空问 l,核心态空间『 ~ 核心态虚拟地址 (a)基于核心态内存映射的 (b)MPIActor中的MPI逻辑 进程间点对点通信 进程间点对点通信 网8单次内存拷贝点对点通信机制的比较 3.发送进程将kbmm—S打包并通过MPI点对点通信发 送给接收端. 4.接收端将kbmm—S发送给KBMM驱动,KBMM驱 动根据kbmm—S得到发送缓冲区的页列表pages—list. 5.KBMM驱动通过krnap将pages—list映射到一个核 心态内存地址kbuff. 6.将kauJ7拷贝到接收缓冲区. 此过程只需一次内存拷贝,但同时会产生较大 的处理开销,在某些情况下处理开销甚至会超过减少 一次内存拷贝带来的收益,造成性能下降,因此基于 核心态内存映射是一种重量级的单次内存拷贝机制. 与之相比MPIActor中的单次内存拷贝机制不 需要进行繁琐的内存转换过程,是一种轻量级的通 信机制. 7实验与结果 7.1实验环境与方法 我们的实验环境是一个128个节点的双路四核 Nehalem集群(本文实验只需要其中的两个节点),每 个节点都包含两颗Xeon E554O处理器和32 GB内 存,测试时处理器主频为2.53 GHz,外频为1066 MHz. 操作系统采用Redhat Linux Enterprise 4. 我们实验的性能测试工具采用OSU Bench— mark中的OSU—LATENCY,其内部采用ping— pong测试方法,是一种用于测试MPI点对点通信 性能的通用工具. 通过OSU—I ATENCY,我们的实验分为两个 部分:第1部分的实验用于评测在MVAPICH2基 础上MPIActor节点内通信的性能,对比以下MPI 通信配置的性能: (1)基于用户级共享内存的MVAPICH2 1.4; (2)基于LiMiC的MVAPICH2 1.4; (3)MVAPICH2 1.4+MPIActor. 另外,在这一部分实验中我们还将对比节点问 通信的性能,目的是为了测试经MPIActor转发通 信后性能是否会受到显著影响. 第2部分的实验用于评测在OPENMPI基础 上MPIActor节点内通信的性能,对比以下MPI通 信配置的性能: (1)基于用户级共享内存的OPENMPI 1.5al; (2)基于KNEM的OPENMPI 1.5al; (3)OPENMPI 1.5a1+MPIActor. 对以上每一种配置我们都分别测试了处理器内 通信和处理器间通信. 7.2实验结果与分析 将两部分实验结果综合,可以得出如图9~ 图11的实验结果.可以发现,MPIActor有效的提 高了MVAPICH2和OpenMPI的节点内点对点通 信的性能,同时对节点问通信性能几乎不造成影响. 处理器内的通信性能评测结果如图9所示,相 对于基于用户级共享内存的MVAPICH2,MPIAc— tot在传输大小为8 KB--256 KB的消息时通信性能 提高了37 ~l14 ;在传输256 KB~2 MB的消息 时性能提高了68 ~111 ;在传输4MB--8MB的 消息时性能提高了6O ~12 .相对于()penMPI, MPIActor在传输大小为8KB ̄256KB的消息时通 信性能提高了48 ~91 ;在传输256 KB~2 MB 字节的消息时性能提高了47 ~106 ;在传输 4MB--8MB的消息时性能提高了56 ~10 .另 外,I iMiC在传输大小为16 KB--256 KB数据时性 能提高了5 ~35 ,但在传输其余大小区间的消 息时通信性能较使用用户态共享内存的MVAPI— CH2有明显下降;KNEM对处理器内点对点通信 的性能没有任何提高,我们进行多次实验都得到了 相似的结果. 处理器间的通信性能评测结果如图1O所示,相 对于基于用户级共享内存的MVAPICH2,MPIAc— tor在传输大小为8 KB~256 KB的消息时通信性能 提高了30 ~144 ;在传输256KB~2MB的消息 时性能提高了74 ~117%;在传输2 MB~16 MB 的消息时性能提高了44 ~64 .相对于 OpenMPI,MPIActor在传输大小为8 KB~256 KB 的消息时通信性能提高了46 ~98 ;在传输 256KB~2MB的消息时性能提高了7O ~72 ; 传输2 MB~16 MB的消息时性能提高了38 ~ 7O%.另外,LiMiC在传输32KB~4MB的数据时有 162 计 算 机 学 报 2011在 37 A~98 的性能提升,在传输更大的消息时性能 0节点问通信的性能比较如图11所示,可以发现 节点间通信经由MPIActor转发性能几乎不受影响. 十++—有5%左右的提升. MVAPICH2 1.4 MVAPICH2 1.4(LiMiC) MVAPICH2 1.4+MPIActor E ^一()penMPI 1.5 十OpenMPI 1.5(Knem) —争-Oi ̄enMPI 1.5+MPIActor 露 剁 茸一 512K 1 M 2 M 4M 8M l6M 消息大d ̄/Byte 消息大小/Byte (b)长消息(>256 KB)通信 (a)短消息( 256 KB)通信 7 6 5 4 3 2 1 羞 删 上 7 6 5 4 3 2 1 消息大d ̄/Byte (c)相对于MVAPICH2 1.4的加速比 消息大d ̄/Byte (d)相对JaOpenMPI 1.5al的加速比 图9处理器内点对点通信延迟 }一MVAPlCH2 1.4 }一MVAPICH2 1.4(LiMiC) — ——・一MVAPICH2 1.4+MPIActor 一皇 OpenMPI 1.5 OpenMPI 1 5(Knero) OpenMPI 1.5+MPIActor —— 露 露 牛 5l2K 1 M 2M 4M 8M 16M 消息大d ̄/Byte (a)短消息( 256 KB)通信 消息大d ̄/Byte (b)长消息(>256 KB)通信 羞 心 口 蔓 删 舞 消息大dx/Byte 消息大dVByte (c)相对于MVAPIcH2 1.4的加速比 (d)相对于OpenMPI 1.5al的加速比 1O处理器间点对点通信延迟 刘志强等:基于线程的MPI通信加速器技术研究 163 1O 9 8 7 g s \ 5 3 2 1 消息大dx/Byte 消息大d,/Byte (a)短消息(≤256 KB)通信 (b)长消息(>256 KB)通信 图11 点问点对点通信延迟 runtime support for threaded MPI execution on shared memory 8总结和未来的工作 machines.ACM Transactions on Programming Languages and Systems,2000,22(4):6 73 70O [3] Demaine E D.A threads only MPI implementation for the de— MPI加速器是一种对传统MPI基础软件有效 velopment of parallel programs//t roceedings of the 1 1 th In 的通信性能优化技术.它以透明中间件的形式提供 ternational Symposium on High Performance Computing Sys 了一个线程MPI运行环境.采用这种形式,MPI tems.Winnipeg,Manitoba,Canada。1 997:l53 163 Actor一方面解耦了线程MPI与MPI进程内多线 [,I Prakash S,Bagrodia R.Mt I SIM:Using parallel simulation 程之间的矛盾,另一方面简化了线程MPI软件的开 to evaluate MPI programs//Proceedings of the Winter Simula tion.I os AlamitOs.CA,USA,1 998:467 474 发工作量. [5] Saini S,Naraikin A et a1.Early performance evaluation of a 实验表明: Nehalem”cluster using scientific and engineering applica— (1)MPIActor能够有效地全面提高传统MPI tions//Pr0ccedlngs of the SC’09. New York,USA,2009, 软件的节点内通信性能,同时不影响节点问通信 Article 2,1,1 2 pages 性能. [6] Diaz Martin J C。Rico Gallego J A et a1.An MPI 1 corn pliant thread based implementation//Proceedings of the EuroPVM/ (2)线程MPI的点对点通信比LiMiC和 MP1 2009.Berlin,Heidelberg,2009:327 328 KNEM等基于核心级内存映射机制的点对点通信 [7] Sade Y。Sagiv S,Shaham R.Optimizing C mu1tithreaded 优化方法更高效. memory management using thread local storage//Pr。ceedings 下一步我们将在MPIActor的基础上通过基于 of the CC’05.Berlin,Heidelberg。2005:137—1 55 共享内存的算法进一步优化集合通信性能. [8 Jin H W・Sur S,Chai I ,Panda D K.LiMIC:Support for high— performance MPI Intra——Node communication on Linux cluster,/,/Proceedings of the ICPP’05.Washington,DC,USA, 参 考 文 献 2005:1 84 i91 [9] Moreaud S,Goglin B,Goodel1 D,Namyst R.Optimizing MPI [1] Chai L, Gao Q,Panda D K. Undcrstanding the impact of communication within large muhicore nodes with kernel assis— muhi core architecture in cluster computing:A case study tance//t roceedings of the Workshop on Communication Ar with InteI Dual(:ore system//Proceedings of the CCGrid’07. chitecture for Clusters,held in Conjunction with IPDPS 2O10. Rio de Janeiro,Brazil,2007:471 4 78 Atlanta,USA,2O10 [2] Tang H,Shen K,Yang T.Program transformation and LIU Zhi—Qiang,born in 1981,Ph.n SONG Jun—Qiang,born in 1962,M.S.,professor, candidate.His research interests include Ph.D.supervisor.His research interests include parallel al— parallel algorithm and MPI(Message gorithm and numerical weather forecast. Passing Interface)infrastructure soft— LU Feng-Shun.born in 1 982,Ph.D.candidate.His re— ware design. search interests focus on parallel algorithm and GPU computing. ZHAO Juan,born in 1981,M.S.,assistant engineer. Her research interests focus on parallel algorithm. 164 Background 汁 算 机 学 报 2011正 Today,MPI is the de facto parallel programming stand ard in HPC domain.In most MPI applications,the communi— cation is performed by MPI operations,and the performance muhicore technology,the number of cores in each node will grow and the proportion of intra—node communication will be 1arger. of these operations is important tO the global performance and is the key factor for the scalability of parallei programs. Recent years,the development of multicore technology causes a revolution on hardware environnlents of parallel computing,and further it poses a new challenge to MPI in frastructure software for effectively supporting MPI pro— grams.How to provide high performance MPI software envi— ronments on muhieore systems is critical for whether a MPI program can utilize current hardware effectively. This work focuses on how tO improve the performance of intra—node communication.It iS one of the key problems for MPI infrastructure on muhicore systems.With the growth of However,the conventional MPI based programs are suffering from poor intra—node communication performance. MP1 was originally designed to be adopted on distributed— memory machines.So,in a conventional MPI based pro— gram,each logic MPI process is mapped to an OS process. And naturally,intra—node communications are performed by heavy—weighted inte ̄proeess communications. Towards this problem,this work tries to build the more effective mechanism for running MPI programs.This work is supported by the National Science Foundation for Innovating Group(60921062)