int MPI_Cart_shift(MPI_Comm comm, int direction, int disp,
int *rank_source, int *rank_dest)
- direction:指定维度
- disp:指定通信的方向和距离,负数表示负方向
- rank_source:通信的源进程的等级
- rank_dest:通信的目的进程的等级
假定我们建立两个维度,x 维度和y 维度,大小分别为 3 和 2,x 维度有环,y 维度无环。我们给 6 个进程构建成笛卡尔拓扑结构,如下:
坐标(x,y)对应的进程等级为 x*2 + y
,和我们平时用一维数组保存多维坐标数据的方式一样。可以类推,如果三个维度分别为 x,y,z,维度大小分别为 nx,ny,nz,那么坐标(x,y,z)对应的进程等级为 x*ny*nz + y*nz + z
。
MPI_Cart_shift
可以获得进程节点在 direction 这个维度方向上的邻居进程的等级。如下,第一个函数获得了 x 轴方向的邻居进程,第二个函数获得了 y 轴方向的邻居进程。(上下左右的概念是相对于你画的图形的,建议以维度的方向为准)
MPI_Cart_shift(comm_cart, 0, 1, &nbrs[0], &nbrs[1]);
MPI_Cart_shift(comm_cart, 1, 1, &nbrs[