6.5.7 低级拓扑函数 |
![]() ![]() |
本章介绍的两个附加函数,用于实现所有其它的拓扑函数。一般的用户不会直接调用它们,除非想要产生附加的虚拟拓扑能力,而不是由MPI提供。
MPI_CART_MAP(comm, ndims, dims, periods, newrank)
IN comm 输入通信子(句柄)
IN ndims 笛卡尔结构的维数(整数)
IN dims 大小为ndims的整数矩阵,说明了每一维的进程数
IN periods 大小为ndims的逻辑矩阵,说明了在每一维上的周期性
OUT newrank 调用进程已排序的标识数;如果调用进程不属于网格(整数) ,值为MPI_UNDEFINED
MPI_CART_MAP(COMM, NDIMS, DIMS, PERIODS, NEWRANK, IERROR)
INTEGER COMM, NDIMS, DIMS(*), NEWRANK, IERROR
LOGICAL PERIODS(*)
MPI_CART_MAP为在物理机器上的调用进程计算一个“最优”的放置。这个函数的一个可能的实现,总是返回调用进程的标识数,即,不执行任何重排序。
对实现者的建议:函数MPI_CART_CREATE(comm,ndims,dims,period,reorder,comm_cart),且reorder=true,那么可以通过调用函数MPI_COMM_MAP(comm,ndims,dims,period,newrank),再调用MPI_COMM_SPLIT(comm,color,key,comm_cart)来实现。其中如果newrank≠MPI_UNDEFINED,则color=0;否则color=MPI_UNDEFINED且key=newrank。
函数MPI_CART_SUB可以通过调用MPI_COMM_ SPLIT来实现,使用所缺维的单一数字编码作为color,而且单一保留维数的数字编码作为key。
通过使用缓存在通信子的拓扑信息,所有其它的笛卡尔拓扑函数可以局域实现。(建议结束)
通用图结构相对应的新函数如下。
MPI_GRAPH_MAP(comm, nnodes, index, edges, newrank)
IN comm 输入通信子(句柄)
IN nnodes 图中节点数(整数)
IN index 整数矩阵描述节点度数(见MPI_GRAPH_CREATE)
IN edges 整数矩阵描述图结构
OUT newrank 调用进程重排序的标识数;
如果调用进程不属于图(整数),则为MPI_UNDEFINED
int MPI_Graph_map(MPI_Com comm, int nnodes, int *index, int *edges, int *newrank)
MPI_GRAPH_MAP(COMM, NNODES, INDEX, EDGES, NEWRANK, IERROR)
INTEGER COMM, NNODES, INDEX(*), EDGES(*), NEWRANK, IERROR
对实现者的建议:函数MPI_CART_CREATE(comm,nnode,index,edges,reorder,comm_graph),且reorder=true,那么可以通过调用函数MPI_COMM_MAP(comm,nnode,index,edges,newrank),再调用MPI_COMM_SPLIT(comm,color,key,comm_graph)来实现。其中如果newrank≠MPI_UNDEFINED,则color=0;否则color=MPI_UNDEFINED且key=newrank。
通过使用缓存在通信子的拓扑信息,所有其它的笛卡尔拓扑函数可以局域实现。(建议结束)
Copyright: NPACT | ![]() ![]() |