在上一篇中我们简要总结了 mpi4py 中的点到点通信,下面我们将介绍组与通信子的基本概念。
为了理解 MPI 中的组与通信子的概念,我们先来了解以下一些术语的含义。
- 组(group)
所谓组,在 MPI 环境里就是指一组进程标识所组成的有序集合。组中的每个进程都有一个唯一的 rank 加以标识。组对象存在于通信子环境内,为通信子定义和描述通信参与者(进程),并提供表示和管理进程的若干功能。组内的每个进程与一个整数 rank 相联系,rank 的序列号是连续的并从 0 开始。mpi4py 有一个特殊的预定义组 MPI_GROUP_EMPTY,这是一个没有成员的组。预定义的常数 MPI_GROUP_NULL 是为无效组句柄使用的值。
注意:不要将 MPI_GROUP_EMPTY 与 MPI_GROUP_NULL 混淆,前者是一个空组的有效句柄,而后者则是一个无效句柄。前者可以在组操作中作为一个参数使用;后者在组释放时被返回,不能存在于一个有效参数中。
- 上下文(context)
上下文是通信子所具有的一个属性,它允许对通信空间进行划分。一个上下文所发送的消息不能被另一个上下文所接收。不同的库可使用彼此独立的上下文,彼此互不干扰。上下文不是显式的 MPI 对象;它们仅作为通信子实现的一部分而出现。
同一进程内的不同通信子有不同的上下文。上下文实质上是一个系统管理的标志,