6.5.3 通用(图)构造子

BACKWARD FORWARD


MPI_GRAPH_CREATE(comm_old, nnodes, index, edges, reorder, comm_graph)

int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges,

MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH, IERROR)

MPI_CART_CREATE返回一个指向新的通信子的句柄, 这个句柄与笛卡尔拓扑信息相联系。如果reorder = false, 那么在新组中每一进程的标识数就与在旧组中的标识数相一致。否则, 函数会重新对进程编号。如果图的大小, nnodes,小于comm组的大小, 那么有些进程返回MPI_COMM_NULL, 类似MPI_COMM_CREATE。如果说明的网格大于组的尺寸, 调用出错。

三个参数nnodes、index和edges定义了图的结构。nnodes 是图的结点数。结点编号从0到nnodes-1。数组第i号单元的index 存储了前i个图结点的邻居的总数。结点0、1、…、nnodes-1的邻居的列表被存储在数组edges连续的位置中。数组edges表示为一个展开的边列表。index中的单元总数是nnodes,并且edges中的单元总数等于图边的总数。

参数nnodes, INDES和edges的定义以下面的简单的例子说明。

那么, 输入参数为:

因此, 在C语言中, index[0]是节点0的度数, index[i] - index[i-1] 是节点 i的度数, i=1, ..., nnodes-1; 节点0的邻居列表存储在edges[j]中, 其中0≤j ≤index[0]-1, 节点i的邻居列表, i > 0, 存储在edges[j]中, 其中0≤j ≤index[i]-1。

在Fortran语言中, index(1)是节点0的度数, 并且index(i+1) - index(i)是节点i的度数, i=1, ..., nnodes-1; 节点0的邻居列表存储在edges(j)中, 其中0≤j ≤index(0)-1, 节点i的邻居列表, i > 0, 存储在edges(j)中, 其中0≤j ≤index(i)-1。

对实现者的建议: 下面的拓扑信息很可能与通信子一起存储:

对于图结构,结点数等于组中进程数。因此, 没有明显地存储结点数。在数组起始位置上的一个附加的零单元简化了对拓扑信息的访问。(对实现者建议的结束)


Copyright: NPACT BACKWARD FORWARD