OpenSHMEM over MPI:性能分析与优化策略
1. 引言
在并行计算领域,OpenSHMEM 和 MPI 是两种常用的编程模型。本文聚焦于 OpenSHMEM 基于 MPI 实现时的性能问题,分析了连续远程内存访问(RMA)操作中的性能损失,并提出了相应的优化策略。
2. 性能损失分析
2.1 分析基础
本次分析基于 OSHMPI - 2.0b1 和 MPICH - 3.35 版本,以 SOS 1.4.2 作为原生实现的代表进行对比。采用基本的延迟场景,即一个进程执行 shmem_putmem
后调用 shmem_quiet
到远程进程。
2.2 shmem_putmem 分析
- 原生实现 :以 SOS 为例,
shmem_putmem
通常只需几个内部步骤,如准备 OFI 写参数并调用ofi_inject_write
或ofi_write
,然后等待本地写操作完成。 - OSHMPI/MPICH 实现 :涉及多个额外步骤,可分为三个阶段:
- 阶段 1:MPI 参数准备 :将目标缓冲区地址转换为对应的窗口句柄和相对位移。
- 阶段 2:MPI Put :
- 获取窗口句柄的内部