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

Raf*_*ter 10 mpi openmpi

我使用MPI_Open_port和在MPI中实现了点对点连接MPI_Comm_accept.我使用运行服务器和客户端程序

rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client
Run Code Online (Sandbox Code Playgroud)

在不同的电脑上.我注意到了

rafael@server1:~$ ./server
rafael@server2:~$ ./client
Run Code Online (Sandbox Code Playgroud)

也工作得很好.你知道启动和不启动MPI可执行文件之间是否有任何区别mpirun

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

Hri*_*iev 19

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

高质量的实现将允许任何进程(包括那些未以"并行应用程序"机制启动的进程)通过调用成为MPI进程MPI_INIT.然后,这样的进程可以使用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都是单独的).