了解MPI组通信

时间:2015-11-01 20:26:40

标签: c mpi

我试图通过以下示例来理解MPI群组通信的概念:

int new_rank, rank, size, ranks1[4]={0,1,2,3}, ranks2[4]={4,5,6,7};
MPI_Group Original_Group, New_Group;
MPI_Comm comm1;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
MPI_Comm_size(MPI_COMM_WORLD, &size);

MPI_Comm_group(MPI_COMM_WORLD, &Original_Group);

    if (rank < 4) {
      MPI_Group_incl(Original_Group, 4, ranks1, &New_Group);
      }
    else {
      MPI_Group_incl(Original_Group, 4, ranks2, &New_Group);
      }

MPI_Comm_create(MPI_COMM_WORLD, New_Group, &comm1);

MPI_Group_rank(New_Group, &new_rank);

printf("rank= %d newrank= %d \n",rank,new_rank);

实际上,我想将n*n矩阵除以一组处理器,比如9个处理器,这样每行被分成3个块并发送到一个组中的3个处理器来执行一些计算。例如:下图显示n*n矩阵被划分为sqrt(n)块并分配给不同的处理器,使得每行形成一个组,即P1,P2,P3是组1,P4,P5,P6是第2组,依此类推。

| P1 | P2 | P3 |

| P4 | P5 | P6 |

| P7 | P8 | P9 |

我试图通过创建3个组(每个行处理器的每个组)来使用前面的代码,但我的程序崩溃了。这是否意味着我不需要制作3组?如果是这样,例如,P1如何知道其组中的邻居处理器?

0 个答案:

没有答案