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

时间:2013-03-22 19:02:46

标签: mpi openmpi

我使用MPI_Open_portMPI_Comm_accept在MPI中实现了点对点连接。我使用

运行服务器和客户端程序
rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client

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

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

也很好用。你知道在有和没有mpirun的情况下启动MPI可执行文件之间是否有任何区别?

当然,我不能给出额外的参数(例如mpirun --mca btl self,openib),并且所有进程的等级都是0,这一切都很好。但有什么不那么明显吗?

1 个答案:

答案 0 :(得分:19)

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

  

高质量的实现将允许任何进程(包括那些未通过“并行应用程序”机制启动的进程)通过调用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是一个独立的进程)。