MPI二维笛卡尔坐标划分【1】

来源:互联网 发布:阿里妈妈淘宝客违规 编辑:程序博客网 时间:2024/04/29 21:03

本文简单演示,如何对现有进程进行二维划分,如何获得进程的X和Y坐标。

只有一段程序:

#include <mpi.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){  int rank,size;  int rankX, rankY;  int ndims = 2;  int dims[2] = {2, 2};   int periods[2] = {0, 0};   int reorder = 0;  int remainX[2] = {1, 0};   int remainY[2] = {0, 1};   MPI_Comm comm2d;  MPI_Comm commX, commY;  MPI_Init(&argc, &argv);  MPI_Comm_rank(MPI_COMM_WORLD, &rank);  MPI_Comm_size(MPI_COMM_WORLD, &size);  MPI_Cart_create(MPI_COMM_WORLD, ndims, dims, periods, reorder, &comm2d);  MPI_Cart_sub(comm2d, remainX, &commX);  MPI_Cart_sub(comm2d, remainY, &commY);  MPI_Comm_rank(commX, &rankX);  MPI_Comm_rank(commY, &rankY);  printf("rank = %d;   X = %d;  Y = %d\n", rank, rankX, rankY);  MPI_Finalize();  return 0;}

将上面这段程序拷贝到test.c文件中。

Makefile内容如下


TARGET = test.exeall : test.c  mpicc -g -O0 $^ -o $(TARGET)run : $(TARGET)  mpiexec -n 4 ./$(TARGET)clean :   rm *.exe -rf


实验结果:

mpiexec -n 4 ./test.exerank = 0;   X = 0;  Y = 0rank = 2;   X = 1;  Y = 0rank = 3;   X = 1;  Y = 1rank = 1;   X = 0;  Y = 1





0 0
原创粉丝点击