优化MPI单边通信:共享内存支持窗口与Cray XE网络模块的应用
在并行计算领域,MPI(Message Passing Interface)的单边通信机制为提升通信效率提供了新的途径。但传统的通信方式存在诸多问题,如数据复制开销大、异步进度处理困难等。本文将介绍两种优化方案:一是使用共享内存支持的窗口进行节点内单边通信;二是为Cray XE设计的MPICH2 uGNI网络模块。
共享内存支持窗口的单边通信
传统的MPI单边通信在数据复制到共享内存缓冲区时会产生巨大开销。一些内核辅助技术,如LIMIC2和KNEM,虽能避免额外复制,但仍无法解决异步进度问题。而且,这些内核辅助方法受内核兼容性、安装时系统管理员支持以及小消息开销等因素限制。
为此,研究人员提出使用共享内存支持的窗口进行现代多核集群的节点内单边通信。以下是具体设计与实现:
1. 窗口创建
- 使用MPI Alloc mem :创建的内存区域被分配为共享内存文件,按起始地址排序映射并维护。应用调用MPI Win create时,会检查内存是否在共享内存中分配。若所有进程窗口内存均未在共享内存分配,将采用默认的Send/Receive实现;否则,进程会检查是否已映射对应共享内存文件,若未映射则进行映射并生成基地址。
- 使用MPI Win allocate :新语义使窗口在共享内存中的分配更简单,每个缓冲区仅关联一个窗口。窗口创建步骤与前者类似,但共享内存文件信息可关联并存储在窗口结构中,无需外部数据结构。