我使用MPI_Open_portMPI_Comm_accept在MPI中实现了对等连接。我使用以下命令运行服务器和客户端程序

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


在不同的计算机上。我注意到

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


也可以。您是否知道使用mpirun和不使用mpirun --mca btl self,openib启动MPI可执行文件之间是否有区别?

当然,我不能提供其他参数(例如),并且所有进程的等级均为0,这完全可以。但是还有什么不那么明显的吗?

最佳答案

在没有mpirun / mpiexec的情况下运行被称为“单个MPI_INIT”,并且是最新实施的MPI标准文档的第10.5.2节中有关高质量实现的MPI建议的一部分:

高质量的实现将允许任何进程(包括那些未使用“并行应用程序”机制启动的进程)通过调用MPI_INIT成为MPI进程。然后,此类进程可以使用MPI_COMM_ACCEPTMPI_COMM_CONNECT例程连接到其他MPI进程,或生成其他MPI进程。 MPI不强制执行此行为,但在技术上可行的情况下强烈鼓励这样做。
如果某个进程进入MPI_INIT并确定未采取任何特殊步骤(即未获得与其他进程形成MPI_COMM_WORLD的信息),则该进程成功并形成单例MPI程序,即其中一个MPI_COMM_WORLD的大小为1。

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

08-26 16:12