13

MPI_Open_port我在 MPI 中使用和实现了点对点连接MPI_Comm_accept。我使用运行服务器和客户端程序

rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client

在不同的电脑上。我注意到

rafael@server1:~$ ./server
rafael@server2:~$ ./client

也可以正常工作。您知道使用和不使用启动 MPI 可执行文件之间是否有任何区别mpirun

当然,我不能给出额外的参数(例如mpirun --mca btl self,openib),并且所有进程的等级为0,这完全可以。但是还有什么不那么明显的吗?

4

1 回答 1

23

在没有mpirun/mpiexec的情况下运行称为“单例MPI_INIT”,是 MPI 对高质量实现的建议的一部分,可在最新 MPI 标准文档的 §10.5.2 中找到:

一个高质量的实现将允许任何进程(包括那些没有以“并行应用程序”机制启动的进程)通过调用MPI_INIT. 然后,这样的进程可以使用MPI_COMM_ACCEPTandMPI_COMM_CONNECT例程连接到其他 MPI 进程,或者生成其他 MPI 进程。MPI 不强制要求这种行为,但在技术上可行的情况下强烈鼓励这种行为。

如果一个进程进入MPI_INIT并确定没有采取任何特殊步骤(即,它没有被赋予MPI_COMM_WORLD与其他进程形成 an 的信息)它成功并形成一个单例 MPI 程序,即MPI_COMM_WORLD大小为 1 的程序。

mpirun在您的情况下使用的是标准文本中提到的“并行应用程序”机制。它提供MPI_INIT了建立MPI_COMM_WORLD所有已启动进程所需的信息。如果没有来自mpirun进程的信息,则只能作为单例 MPI 实例运行,因此它们都具有等级0(这没关系,因为每个MPI_COMM_WORLD都是单独的)。

于 2013-03-22T23:32:35.247 回答