使用mpirun和不使用mpirun运行程序之间的区别

使用mpirun和不使用mpirun运行程序之间的区别,mpi,openmpi,Mpi,Openmpi,我使用MPI\u Open\u port和MPI\u Comm\u accept在MPI中实现了对等连接。我使用 rafael@server1:~$ mpirun server rafael@server2:~$ mpirun client 在不同的计算机上。我注意到 rafael@server1:~$ ./server rafael@server2:~$ ./client 也很好用。您知道使用和不使用mpirun启动MPI可执行文件之间是否有任何区别吗 当然,我不能给出额外的参数(例如,m

我使用
MPI\u Open\u port
MPI\u Comm\u accept
在MPI中实现了对等连接。我使用

rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client
在不同的计算机上。我注意到

rafael@server1:~$ ./server
rafael@server2:~$ ./client
也很好用。您知道使用和不使用
mpirun
启动MPI可执行文件之间是否有任何区别吗


当然,我不能给出额外的参数(例如,
mpirun--mca btl self,openib
),所有进程的排名都是0,这是完全正确的。但是还有什么不那么明显的吗?

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

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

如果进程进入
MPI_INIT
并确定未采取任何特殊步骤(即,未向其提供与其他进程一起形成
MPI_COMM_WORLD
的信息),它将成功并形成一个单例MPI程序,即
MPI_COMM_WORLD
大小为1的程序

在您的案例中使用
mpirun
是标准文本中提到的“并行应用程序”机制。它为所有已启动的进程提供建立MPI通信世界所需的信息。如果没有来自
mpirun
的信息,进程只能作为单例MPI实例运行,因此所有进程都具有秩
0
(这是可以的,因为每个
MPI\u COMM\u WORLD
都是单独的)