这个问题说明了一切。我有三个沟通者(组也可用)。现在我想为一个通信子集调用 a 函数。那就是屏蔽其他子集的功能。这是可能的还是我应该明确地纠正一个循环并检查组中当前进程的存在,然后调用该函数。
谢谢,
除了在MPI_Allreduce()
. 最干净的做法是:
int group_rank;
// Test if current process belongs to "group"
MPI_Group_rank(group, &group_rank);
if (group_rank != MPI_UNDEFINED)
call_the_function();
你能修改创建三个通信器的代码吗?在这种情况下,我建议您添加一个变量(即my_group
,如 Hristo 建议的那样),为程序运行时的其余部分保存组排名。因此,每当您需要调用特定于组(或通信器)的函数时,只需检查group_rank
.
基本原理
大多数 MPI 程序无论如何都倾向于具有某种全局my_rank
变量(它存储进程的等级),因此添加 amy_group
将符合此编程策略。