Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何仅为使用MPI库的进程子集调用(c+;+;)函数?_C++_Mpi_Openmpi - Fatal编程技术网

C++ 如何仅为使用MPI库的进程子集调用(c+;+;)函数?

C++ 如何仅为使用MPI库的进程子集调用(c+;+;)函数?,c++,mpi,openmpi,C++,Mpi,Openmpi,问题说明了一切。我有三个通讯员(也有小组)。现在我只想为一个通信子集调用a函数。这就是为其他子集屏蔽函数。这是可能的,还是应该显式地更正循环,检查组中是否存在当前进程,然后调用函数 谢谢,除了在MPI\u Allreduce()中滥用用户定义的归约运算符之外,无法对子通信程序的所有成员调用函数。最干净的做法是: int group_rank; // Test if current process belongs to "group" MPI_Group_rank(group, &grou

问题说明了一切。我有三个通讯员(也有小组)。现在我只想为一个通信子集调用a函数。这就是为其他子集屏蔽函数。这是可能的,还是应该显式地更正循环,检查组中是否存在当前进程,然后调用函数


谢谢,

除了在
MPI\u 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();

您能修改创建三个通讯器的代码吗?在这种情况下,我建议您添加一个变量(即Hristo建议的
my_group
),该变量可在程序的其余运行时保存组排名。因此,每当您需要调用特定于组(或通信器)的函数时,只需选中
group\u rank

基本原理

大多数MPI程序倾向于使用某种全局
my_rank
变量(存储进程的等级),因此添加
my_组
将符合此编程策略。

Hmmmmm。。。早在我做这项工作的时候,我就被要求模拟节点之间的环形、tor和超立方体互连。由于MPI允许所有节点相互通信,所以我使用模N代数来选择在某一步通信的节点。我记得,对于一个超立方体来说,要把它做好是相当棘手的。如果您感兴趣的话,我可以稍后提供一个链接,指向我用来在环上执行矩阵乘法的代码(我想)。让我知道。这还不错,我想我可以用它。这样做通常是个好主意吗?预计会有什么下降?我看不到任何潜在的下降。是的,明白了!我们正在开发代码,所以一切都是可能的!我只是想也许MPI库中有内置的回调函数。。。。显然不是。这将是非常有帮助的,虽然!!!无论如何,谢谢你:)