进程间通信MPI
进程间通信MPI
MPI(Message Passing Interface), 消息传递接口,通常用于并行计算场景中多进程间通信。以一个计算节点为例,节点中有8张GPU卡,通常一张卡上有一个训练任务进程,8张卡就会涉及到8个进程,此时训练时,进程间的通信就会变的极其重要。这种多进程通信,也被称为集合通信(Collective Communication)。通常,进程间的通信方式(IPC)有消息队列、管道、共享内存等。在并行计算场景中,最常用的是MPI方式。MPI提供了一系列通信接口,也称通信原语。
主要特点
-
点对点通信:一对一通信
-
集合通信:一组进程可以进行同步操作
-
通信拓扑: 允许自定义通信拓扑,如环形、网格等
-
组通信:允许特定的组或通信域通信
-
进程间同步: 通过锁和屏障等机制实现同步。
基本概念
- 进程组:一组可以相互通信的进程, 最常用的一般是
MPI_COMM_WORLD
, 包含了启动MPI程序的所有进程
基本操作
- Send/Receive: 发送和接收消息
- Broadcast:一个进程对其它进程进行广播
- Gather聚集:多个进程数据收集到一个进程
- Scatter散布: 一个进程数据分散到多个进程
- Reduce规约: 所有数据发送到一个进程,通常称为根进程,根进程会进行规约操作,最后只有根进程拥有最终的结果。
- Allreduce:所有数据发送给根进程,根进程完成规约(对多个进程的数据进行某种操作如求和,取最大值等)操作之后,然后将结果分发给所有进程
- Barrier:同步所有进程,直到达到某个条件