MPI-3 学习笔记(一):非阻塞集合通信
MPI-3 非阻塞集合通信(Nonblocking Collective Communication)特性学习笔记。
MPI 的两个内部通信模式:小鹰(Eager)模式和约会(Rendezvous)模式
- 小鹰模式:短消息,直接复制到 MPI 系统内部缓存,然后直接发送给接受方;
- 约会模式:长消息,传输数据前双方先进行握手。
非阻塞集合通信(Nonblocking Collective Communication)语义特点:
- 调用以后立即返回;
- 不保障进度(No guaranteed progress);
- 乱序执行完成。
NCC 优点:
- 允许进度不同步,软件可以实现计算-传输过程流水线;
- 解耦数据传输和同步;
- 允许重叠通信子(overlapping communicators);
- 可以有更多未完成的操作。
NCC 的局限性:
- 没有标签,需要手动按顺序匹配;
- 用户的发送缓冲区在发送期间无法使用;
- 不支持使用
MPI_Cancel
来取消操作; - 不能和阻塞集合通信函数进行对接。
为什么阻塞通信有时候不好——系统噪音会被放大:
- CPU 是分时使用的,守护进程和中断处理会偷走一些 CPU 时间;
- 对单核性能而言,影响非常非常小(一般 0.05% 的 overhead,最多可到 0.26%);
- 在大规模的系统上,系统噪音会被“放大”,即快速且无规律地传播。
非阻塞 Barrier MPI_Barrier(comm, *request)
:单独通知各进程,但集合同步。
例子:动态稀疏数据交换(Dynamic Sparse Data Exchange):只有发送者知道它要发给谁,接收者不知道
- 一对一交换(all-to-all, PEX):先使用
MPI_Alltoall
使得各进程知道自己要从哪些进程接受多少数据。最符合直觉的方法,但是性能和扩展性最差。
- 逐个统计(Reduce_scatter, PCX):先执行规约(Reduce)操作求和得到每一个进程要接受多少数据,再将这一结果散发到各个进程。比 PEX 好一点但好不了多少。
MPI_Ibarrier
(NBX):点对点同步,直接传输,效果最好。
- 并行 BFS 测试:
并行 FFT with Ialltoall
和计算-通信流水线(三种颜色分别是三个进程所持有的数据):
依次调用
MPI_Ialltoall
传输第 1, 2, 3 个 y 平面;依次等待三个 y 平面的传输完成,每传输完一个就执行一次 x 方向的变换(图中蓝色的是还在传输中的,第一个 y 平面已经传输完了并且进行了变换):
发布于
tags:
{ MPI }