目录
一、图拓扑
1、MPI_GRAPH_CREATE
MPI_GRAPH_CREATE返回一个指向新的通信域的句柄,这个通信域包含的进程的拓扑结构是一个由参数nnodes、index和edges定义的图。如果reorder=false,那么在新的进程组中每一个进程的标识号就与在旧进程组中的标识号相一致。否则,会对进程附以新的编号。如果图包含的节点数nnodes小于comm内进程的个数,那么有些进程返回MPI_COMM_NULL(类似于MPI_COMM_SPLIT)。如果图的节点数大于comm内进程总数,则该调用会出错。
图中总的节点数为nnodes-1,节点编号从0到nnodes-1。如果用C来表示,则index[i]是节点0到节点i所有节点的度数之和。因此,0号节点的度数即为index[0],1号节点的度数为index[1]-index[0],i号节点的度数为index[i]-index[i-1],i从1到nnodes-1。所有节点的边都按照节点编号的次序,从小到大,存放在数组edges中。
MPI_GRAPH_CREATE(comm_old, nnodes, index, edges, reorder, comm_graph)
IN comm_old 没有定义拓扑的通信域(句柄)
IN nnodes 图中包含的节点数(整数)
IN index 节点的度数(整数数组)
IN edges 图的边数(整数数组)
IN reorder 标识数是否可以重排序(逻辑型)
OUT comm_graph 定义了图拓扑的通信域(句柄)
//c语言的说明
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, int reorder, MPI_Comm *comm_graph)
//Fortran语言的说明
MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH, IERROR)
INTEGER COMM_OLD, NNODES, INDEX(*), EDGES(*), COMM_GRAPH, IERROR
LOGICAL REORDER
比如对于有四个节点的图,图中各节点的连接关系为:
节点编号 | 节点度数 | 该节点连接的其它节点 |
0 | 2 | 1,3 |
1 | 1 | 0 |
2 | 1 | 3 |
3 | 2 | 0,2 |
则参数nnodes、index和edges的定义应该是
节点总数 | 节点的顺序累计度数 | 按节点顺序的边列表 |
nnodes=4 | index=2,3,4,6 | edges=1,3,0,3,0,2 |
因此,在C语言中,index[0]是节点0的度数&#x