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 使得各进程知道自己要从哪些进程接受多少数据。最符合直觉的方法,但是性能和扩展性最差。

PEX

  • 逐个统计(Reduce_scatter, PCX):先执行规约(Reduce)操作求和得到每一个进程要接受多少数据,再将这一结果散发到各个进程。比 PEX 好一点但好不了多少。

PCX

  • MPI_Ibarrier (NBX):点对点同步,直接传输,效果最好。

NBX

  • 并行 BFS 测试:

PBFS

并行 FFT with Ialltoall 和计算-通信流水线(三种颜色分别是三个进程所持有的数据):

PFFT

  • 依次调用 MPI_Ialltoall 传输第 1, 2, 3 个 y 平面;

  • 依次等待三个 y 平面的传输完成,每传输完一个就执行一次 x 方向的变换(图中蓝色的是还在传输中的,第一个 y 平面已经传输完了并且进行了变换):

PFFT2