Я реализовал декартову топологию, моделирующую сетку 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;
}
Проблема, с которой я сейчас сталкиваюсь, заключается в доступе к значению соседей в декартовой сетке.Хотел бы получить совет о том, как я могу это сделать.