并行程序设计基础——虚拟进程拓扑(2)

目录

一、图拓扑

1、MPI_GRAPH_CREATE

2、MPI_GRAPHDIMS_GET

3、MPI_GRAPH_GET

4、MPI_GRAPH_NEIGHBORS_COUNT

5、MPI_GRAPH_NEIGHBORS

6、MPI_GRAPH_MAP

二、虚拟进程拓扑和向量数据类型实现Jacobi迭代

三、小结


一、图拓扑

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值