在上一篇中我们介绍了 mpi4py 中的数据打包解包操作,下面我们将介绍进程拓扑。
MPI 中的进程组是 n 个进程的集合,组中的每一进程被赋予一个从 0 到 n-1 的 rank 号。在许多并行应用程序中,进程的线性排列不能充分地反映进程间在逻辑上的通信模型(通常由基本问题几何和所用的数学算法所决定),例如,根据问题需要,进程经常被排列成二维、三维网格乃至更复杂的图结构上。这种映射的需要与底层硬件设备无关,仅在逻辑上实现与问题领域特点相匹配,因此称作虚拟进程拓扑。
通过虚拟进程拓扑提供的机制,可将 MPI 进程按照编号映射到某种几何形状上。在虚拟进程拓扑和底层的物理硬件拓扑之间有一个清晰的差别。虚拟拓扑的描述仅依赖于应用,独立于机器,但是其可以辅助运行时间系统,将进程映射到硬件上。另外除了可能的性能上的优点以外,虚拟拓扑还可以作为一种方便的进程命名结构,这会大大有利于消息传递编程中的程序可读性和注释能力。
进程拓扑基于组内通信子和组进行管理,事实上,虚拟进程拓扑通过通信子对象的属性缓存来保存其数据结构和实现细节。
MPI 支持笛卡尔拓扑(Cartesian topology)和图拓扑(graph topology)两种。具体到 mpi4py 中,定义了一个拓扑通信子类(Topocomm),它继承自组内通信子类(Intracomm),在 Topocomm 下面继承了三个子类:笛卡尔拓扑类(Cartcomm),图拓扑类(Graphcomm)和分布式图拓扑类(Distgraphcomm),它们的关系可见下图:
通信子继承关系以上我们简要介绍了进程拓扑的基本概念,在下一篇中我们将介绍与进程拓扑相关的一些方法。
网友评论