Skip to content
Snippets Groups Projects
msgexchange-solution.c 1.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • jansik's avatar
    jansik committed
    #include <mpi.h>
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
    int rank, nprocs, len, n, sum;
    char   pname[MPI_MAX_PROCESSOR_NAME];
    
    
        MPI_Init(&argc, &argv);
        MPI_Comm_size(MPI_COMM_WORLD,&nprocs);
        MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    
    
        MPI_Get_processor_name(pname,&len);
        printf("Hello world! from rank %d of %d on host %s\n", rank, nprocs,pname);
    
        MPI_Barrier(MPI_COMM_WORLD);
    
        if (rank==0) {
            printf("Enter the number to broadcast ");
            scanf("%d",&n);
        }
    
        MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
        printf("1, rank %d, n= %d\n",rank,n);
    
        if (rank==1) {
           n=5;
           MPI_Send(&n, 1, MPI_INT, 2, 0, MPI_COMM_WORLD);
           printf("2. rank %d, n= %d\n",rank,n);
           MPI_Recv(&n, 1, MPI_INT, 2, MPI_ANY_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
           printf("3. rank %d, n= %d\n",rank,n);
        }
    
        if (rank==2) {
           MPI_Recv(&n, 1, MPI_INT,1, MPI_ANY_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
           printf("2. rank %d, n= %d\n",rank,n);
           n=15;
           MPI_Send(&n, 1, MPI_INT,1, 0, MPI_COMM_WORLD);
           printf("3. rank %d, n= %d\n",rank,n);
        }
        
        MPI_Barrier(MPI_COMM_WORLD);
    
        sum=0;
        MPI_Reduce(&n,&sum,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
        printf("4. rank %d, n= %d\n",rank,sum);
    
    
        MPI_Finalize();
    
        return 0;
    }