我已经实现了一个笛卡尔拓扑建模3x3网格:
其中p0、p1等表示过程0、过程1等。因此,拓扑中的每个槽表示一个进程。VAL表示进程包含的值。
我现在想做的是
核对总数
每个进程的
邻居的价值
看看是不是
总计300
。如果有,则输出:
Process 1 neighbour values sums up to 300.
Process 3 neighbour values sums up to 300.
Process 5 neighbour values sums up to 300.
.
.
邻居们不是
左上下或右
. 我已经编写了模拟上述图表的代码:
#include <stdio.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
int value;
int sum;
int rank;
int size;
int coordinates[2];
MPI_Comm grid_comm;
int dim[2],false = 0,reorder;
int top,bottom,right,left;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
dim[0] = 3;
dim[1] = 3;
reorder = 0;
MPI_Cart_create(MPI_COMM_WORLD,2,dim,&false,reorder,&grid_comm);
MPI_Cart_shift(grid_comm,0,1,&top,&bottom);
MPI_Cart_shift(grid_comm,1,1,&left,&right);
MPI_Comm_rank(grid_comm,&rank);
MPI_Cart_coords(grid_comm,rank,2,coordinates);
MPI_Cart_rank(grid_comm,coordinates,&rank);
if (rank % 2 == 0) {
value *=100;
}
else {
value *=200;
}
MPI_Finalize();
return 0;
}
我现在面临的问题是
访问邻居值
在笛卡尔网格中。我想就如何做到这一点提出一些建议。