我使用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_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
都是单独的).