MPI虚拟图拓扑广播

5

我有一个问题:

我想基于树形图创建虚拟拓扑,例如:

   0
 /   \
1    5
| \  | 
2  4 3

顶点编号是进程的排名。 我已经完成了这个任务,并且掌握了我的新通信器:
MPI_Comm graph_comm;
MPI_Graph_create(MPI_COMM_WORLD, nnodes, indexes, edges, 0, &graph_comm);

现在我的问题是: 是否有可能从每个具有子节点的父节点发送广播(MPI_Bcast)仅发送给它们的子节点(在这个例子中,排名为0的进程向进程1、5发送bcast;排名为1的进程向进程2、4发送bcast;排名为5的进程向进程3发送bcast)?
2个回答

2

看起来似乎不可能,必须为广播创建单独的通信器。虽然MPI_Graph_neighbors_countMPI_Graph_neighbors都足以创建新的组,但人们可能会想知道,如果可以使用与图拓扑相同的数据创建这些组,为什么我们需要图拓扑呢?


2
是的,您必须在每个进程中创建组,然后可以在每个组上调用 MPI_Bcast,其中根节点是节点的父节点(在您的示例中,0 是 1 和 5 的父节点,但您应该记住根排名被分配给本地通信器,因此0在本地组中不一定是0,这取决于您如何创建它)。 这个链接可能有帮助:组和通信管理例程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接