2013-03-22 112 views
7

我在MPI中使用MPI_Open_portMPI_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,这一切都很好。但是有什么不太明显的?

回答

15

运行没有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都是单独的)。

相关问题