2013-07-03 57 views
0

我正试图在EPOS操作系统中实现MPI协议。那么,其实我不明白如何实现MPI_Comm。它被定义为“MPI用于确定通信中涉及哪些进程的基本对象”。在一些实现, 我在互联网上找到了被实现为的typedef INT MPI_Comm,但我怎么能知道 其过程涉及使用INT MPI_Comm通信?任何想法?如何在MPI协议中实现MPI_Comm?

谢谢。

回答

0

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

1

似乎有两种方法,几乎​​相同。

  • 首先是typedef int MPI_Comm,并使用该值作为一个指数到一些内部数据结构保持所述实际信息。

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

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

但是为什么在OpenMPI和MPICH已经做了这么多并且是开源的时候重新发明了轮子?特别是MPICH许可证是非常宽容的。很多供应商都在其上建立了自己的商业MPI库。检查出their license

+0

谢谢!那么,这是一个操作系统课程的工作,所以需要制作我自己的实施版本。其他疑问:我的实现将有一个内部数据结构(比如说'x'),其中包含通信中涉及的每个ID进程(例如使用MPI_Comm)。如果有很多机器运行MPI程序,并且我希望这些机器彼此通信,我将如何将每个MPI程序的ID保存为'x'?而且每个MPI程序都有自己的'x',所以这会是一个问题? – user2069668

+0

@ user2069668除了像'MPI_COMM_WORLD'这样的内置通信器,用户必须首先使用'MPI_Comm_create'创建通信器。你可以在那里进行初始化。请记住,这也取决于用户使该通信器中的所有处理器在“相同”时间和相同参数下调用MPI_Comm_create。这应该允许你初始化你的结构而不需要传递任何消息,因为每个处理器都会得到相同的结构'x'。 – Adam