int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source,int *rank_dest)
在具有笛卡尔拓扑结构的通信器中,给定一个数据平移的维度和步长,返回数据平移的源进程号和目的进程号。
参数:
comm:具有笛卡尔拓扑结构的通信器
direction:数据平移的维度号
disp:数据平移的方向和步长,大于0表示正方向,小于0表示负方向
rank_source:源进程号
rank_dest:目的进程号
例子
给定6个进程,创建一个二维的3*2的笛卡尔拓扑结构通信器,行维是周期环面结构,列维是非周期环面结构。进程排列示意图如下:
括号中的数字表示进程号,-1表示没有相应的进程,0,0这样的坐标表示进程在二维笛卡尔拓扑中的坐标号。
由于行维是周期环面的,列维是非周期环面的,所以0号进程的上方和4号进程相邻,而左方没有进程相邻。
给定如下程序:
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char *argv[]){
MPI_Init(&argc, &argv);
int numProcessors, rank, my2drank, mycoords[2];
MPI_Comm_size(MPI_COMM_WORLD, &numProcessors);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank==0){