Welcome 微信登录

首页 / 操作系统 / Linux / MPI中使用split进行通信域的分裂

MPI的小作业,刚写完,贴上。
题目和代码如下,要求使用split进行通信域的分裂:/*奇数进程之间和偶数进程之间各自独立地进行循环数据传递,初始值为各自的进程数,各进程都加上自己在MPI_COMM_WORLD中的进程号后传递给下一个进程,各个进程都打印自己的在MPI_COMM_WORLD中的进程号以及接收到的数据。by East*/ #include"mpi.h"#include<stdio.h>#include<malloc.h> int main( int argc, char *argv[] ){     int rank, size;     int n_rank, n_size;     int *data, buf;      MPI_Comm n_comm;     MPI_Status status;     MPI_Request request;      MPI_Init(&argc, &argv);     MPI_Comm_rank( MPI_COMM_WORLD, &rank );     MPI_Comm_size(MPI_COMM_WORLD, &size);      MPI_Comm_split(MPI_COMM_WORLD, rank%2, 0, &n_comm);     //得到新的rank和size     MPI_Comm_rank(n_comm, &n_rank);     MPI_Comm_size(n_comm, &n_size);          data = (int *)malloc( size * sizeof(int) );     //data数组的值为各通信域的进程数,加上自己在MPI_COMM_WORLD中的进程号     data[rank] = n_size + rank;      MPI_Irecv(&buf, 1, MPI_INT, (n_size + n_rank-1)%n_size, 0, n_comm, &request);//   MPI_Wait(&request, &status);      MPI_Send(&data[rank], 1, MPI_INT, (n_rank+1)%n_size, 0, n_comm);     MPI_Wait(&request, &status);      printf("[%d]号进程发送数据:%d ",rank, data[rank]);     printf("[%d]号进程收到数据:%d ",rank, buf);          MPI_Comm_free(&n_comm);     MPI_Finalize();     return 0;}