使用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
的情况下运行被称为“singletonMPI_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
都是单独的)