使用和不使用mpirun运行程序之间的区别
问题描述:
我在MPI中使用MPI_Open_port
和MPI_Comm_accept
实现了点对点连接。我运行一个服务器和不同的计算机上使用使用和不使用mpirun运行程序之间的区别
[email protected]:~$ mpirun server
[email protected]:~$ mpirun client
客户端程序。我注意到
[email protected]:~$ ./server
[email protected]:~$ ./client
也工作得很好。你知道启动MPI可执行文件时有没有区别mpirun
?
当然,我不能给出额外的参数(例如mpirun --mca btl self,openib
),并且所有进程的排名都是0,这一切都很好。但是有什么不太明显的?
答
运行没有mpirun
/mpiexec
被称为“单MPI_INIT
”,是高品质的实现,最新的MPI标准的文档中下§10.5.2发现MPI建议的一部分:
高品质实现将允许任何进程(包括不是以“并行应用程序”机制开始的进程)通过调用
MPI_INIT
成为MPI进程。然后可以使用MPI_COMM_ACCEPT
和MPI_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
都是单独的)。