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

Posted

技术标签:

【中文标题】使用和不使用 mpirun 运行程序的区别【英文标题】:Difference between running a program with and without mpirun 【发布时间】:2013-03-12 18:17:34 【问题描述】:

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

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

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

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

也可以正常工作。你知道用mpirun和不用mpirun启动一个MPI可执行文件有什么区别吗?

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

【问题讨论】:

【参考方案1】:

在没有mpirun/mpiexec 的情况下运行被称为“singleton 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 都是一个单独的实例)。

【讨论】:

以上是关于使用和不使用 mpirun 运行程序的区别的主要内容,如果未能解决你的问题,请参考以下文章

为啥我开了垂直同步玩游戏画面还是会撕裂,和不开没多大区别。

使用 maven surefire 使用 mpirun 运行 Junit 测试

打开 MPI - mpirun 在简单程序中退出并出现错误

如何使用 OpenMPI 编程运行 SocWatch?

Intel MPI

判断 Python 程序是不是并行运行