【问题标题】:How to implement MPI_Comm in MPI protocol?如何在 MPI 协议中实现 MPI_Comm?
【发布时间】:2013-07-01 15:31:25
【问题描述】:

我正在尝试在 EPOS 操作系统中实现 MPI 协议。好吧,其实我不明白如何实现 MPI_Comm。它被定义为“MPI 用来确定通信中涉及哪些进程的基本对象”。在某些实现中 我在互联网上发现它被实现为 typedef int MPI_Comm,但我怎么知道 使用 int MPI_Comm 的通信涉及哪些进程?任何想法?

谢谢。

【问题讨论】:

    标签: c mpi


    【解决方案1】:

    当实现为 MPI_Comm 使用 int 时,它实际上将它用作对内部数组的引用,在该数组中它在内部跟踪通信器的所有必要信息。

    【讨论】:

      【解决方案2】:

      好像有两种方法,几乎​​是一样的。

      • 第一个是typedef int MPI_Comm,并使用该值作为索引到一些维护实际信息的内部数据结构中。

      • 第二个是typedef struct comm_info* MPI_Comm,其中通信器(或任何其他 MPI 类型)是指向内部结构的直接指针。 OpenMPI 采用这种方法。

      使用 int 的优点是,只要内部数据结构是同步的,在所有处理器上使用相同的索引可能会更容易。

      但是,既然 OpenMPI 和 MPICH 已经做了这么多并且是开源的,为什么还要重新发明轮子呢?特别是 MPICH 许可证非常宽松。如此之多,以至于很多供应商都在其上建立了自己的商业 MPI 库。查看their license

      【讨论】:

      • 谢谢!好吧,这是操作系统课程的工作,因此需要制作自己的实现版本。其他疑问:我的实现将有一个内部数据结构(比如说“x”),其中包含通信中涉及的每个 ID 进程(例如,使用 MPI_Comm)。如果有很多机器运行 MPI 程序并且我希望这些机器相互通信,我将如何将每个 MPI 程序的 ID 保存在“x”中?而且每个 MPI 程序都会有自己的“x”,所以会不会有问题?
      • @user2069668 除了MPI_COMM_WORLD这样的内置通信器,用户必须首先使用MPI_Comm_create创建通信器。你可以把你的初始化放在那里。请记住,让该通信器中的所有处理器在“相同”时间使用相同参数调用MPI_Comm_create 也取决于用户。这应该允许您通过让每个处理器提出相同的结构'x'来初始化结构而不传递任何消息。
      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多