我遇到以下问题:
我想基于树形图创建一个虚拟拓扑,例如:
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的进程将bcast发送到进程1,5;具有等级1的进程将bcast发送到进程2,4 ;排名为5的流程将bcast发送到流程3)
答案 0 :(得分:2)
这似乎是不可能的,人们必须为广播创建单独的传播者。虽然MPI_Graph_neighbors_count
和MPI_Graph_neighbors
都足以创建新的组,但有人可能想知道为什么我们首先需要图形拓扑,如果这些组可以使用与图形拓扑完全相同的数据创建?
答案 1 :(得分:2)
是的,您必须在每个进程中创建组,然后您可以在每个组上调用MPI_Bcast
,其中root是节点的父节点(在您的示例中0是1和5的父节点,但您应该记住root rank被分配给本地通信器,所以0在本地组中不必为0,这取决于你如何创建它)。
这有助于:Group and Communicator Management Routines