我正在尝试在 EPOS 操作系统中实现 MPI 协议。好吧,其实我不明白如何实现 MPI_Comm。它被定义为“MPI 用来确定通信中涉及哪些进程的基本对象”。在我在 Internet 上找到的某些实现中,它被实现为typedef int MPI_Comm,但是我怎么知道使用int MPI_Comm的通信涉及哪个进程?任何想法?
谢谢。
似乎有两种方法,几乎相同。
第一个是typedef int MPI_Comm
, 并将值用作维护实际信息的某些内部数据结构的索引。
第二个是typedef struct comm_info* MPI_Comm
通信器(或任何其他 MPI 类型)是指向内部结构的直接指针。OpenMPI 采用这种方法。
使用 int 的优点是,只要内部数据结构是同步的,在所有处理器上使用相同的索引可能会更容易。
但是,既然 OpenMPI 和 MPICH 已经做了这么多并且是开源的,为什么还要重新发明轮子呢?特别是 MPICH 许可证非常宽松。如此之多,以至于很多供应商都在其上建立了自己的商业 MPI 库。查看他们的许可证。
当实现为 MPI_Comm 使用 int 时,它实际上将它用作对内部数组的引用,在该数组中它跟踪内部通信器的所有必要信息。