Parallel processing MPI虚拟图拓扑广播

Parallel processing MPI虚拟图拓扑广播,parallel-processing,mpi,Parallel Processing,Mpi,我有以下问题: 我想基于树形图创建一个虚拟拓扑,例如: 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
| \  | 
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)

这似乎是不可能的,必须为广播创建单独的通讯器。虽然
MPI\u图形\u邻域\u计数
MPI\u图形\u邻域
都应该足以创建新的组,但人们可能会想,如果可以使用与图形拓扑完全相同的数据创建这些组,那么我们首先为什么需要图形拓扑呢?

是的,您必须在每个进程中创建组,然后可以在每个组上调用
MPI\u Bcast
,其中root是节点的父级(在您的示例中,0是1和5的父级,但您应该记住,root列组已分配给本地通信器,因此0在本地组中不必为0,这取决于您如何创建它)。 这有助于: