我有两个不同的可执行文件,每个都有一个特定的角色。其中一个进程通过调用 MPI_isend 发送其他信息。但我怎么知道其他过程的等级? 我发现当我运行我的堆栈时,如下所示,exe1,即接收进程,似乎始终具有等级0,exe2似乎总是具有等级1.因此,如果我从exe2发送到等级0,则接收消息。但我在这里遗漏了什么,看起来很复杂吗?
mpirun -np 1 exe1:-np 1 exe2
答案 0 :(得分:0)
可以使用mpiexec
的各种CLI参数来控制进程到Open MPI中的排名的映射,其中较新的版本(如1.7.x)支持比旧版本更精细的控制。默认情况下,排名遵循在提供的插槽中放置进程的顺序。因此,-np 1 exe1 : -np 1 exe2
始终会导致exe1
排名0
,exe2
排名1
排名MPI_COMM_WORLD
。如果您改用-np 3 exe1 : -np 2 exe2
,则会收到以下信息:
rank executable
------------------
0 exe1
1 exe1
2 exe1
3 exe2
4 exe2
也可以将exe1
和exe2
作为单独的MPI作业启动,并使它们通过内部通信器相互连接,但这被视为高级MPI主题。
答案 1 :(得分:0)
另一种解决方案是,让接收进程exe1首先发送其排名的消息。当第二个进程使用该消息的标记侦听来自任何源的消息时,它将接收第一个进程的等级。