有和无的mpirun运行的程序之间的差异(Difference between running a

2019-07-22 18:38发布

我实现了使用MPI一个对等网络连接MPI_Open_portMPI_Comm_accept 。 我运行一个服务器和客户端程序使用

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

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

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

也工作得很好。 你知道,如果有有和没有启动一个可执行的MPI任何区别mpirun

当然,我不能给额外的参数(如mpirun --mca btl self,openib ),和所有进程的等级是0,这是所有完全正常。 但有什么不太明显?

Answer 1:

运行没有mpirun / mpiexec被称为“单MPI_INIT ”,是高品质的实现,根据最新公布的MPI标准的文档中§10.5.2发现MPI建议的一部分:

高品质的实施将使任何进程(包括那些没有开始用“并行应用程序”机制),通过调用成为一个MPI过程MPI_INIT 。 然后,这种过程可以连接到其他MPI使用过程MPI_COMM_ACCEPTMPI_COMM_CONNECT例程,或产生其他MPI进程。 MPI并不要求这种行为,但强烈建议它在技术上是可行的。

如果一个进程进入MPI_INIT并且确定没有采取特殊的步骤(即,它没有被提供的信息,以形成一个MPI_COMM_WORLD与其它进程)它成功并形成单MPI程序,即,在其中一个MPI_COMM_WORLD具有尺寸1 。

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



文章来源: Difference between running a program with and without mpirun
标签: mpi openmpi