This source file includes following definitions.
- main
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 #include <errno.h>
  10 #include <stdio.h>
  11 #include <stdlib.h>
  12 #include <string.h>
  13 #include <netdb.h>
  14 #include <unistd.h>
  15 #include <mpi.h>
  16 
  17 int
  18 main(int argc, char **argv)
  19 {
  20     MPI_Status  status;
  21     int         verbose = 0;
  22     int         rank;
  23     int         np;        
  24     int         peer;
  25     int         i;
  26     int         j;
  27     int         length;
  28     char        name[MPI_MAX_PROCESSOR_NAME+1];
  29 
  30     MPI_Init(&argc, &argv);
  31     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  32     MPI_Comm_size(MPI_COMM_WORLD, &np);
  33 
  34     
  35 
  36 
  37     if (MPI_SUCCESS != MPI_Get_processor_name(name, &length)) {
  38         strcpy(name, "unknown");
  39     }
  40 
  41     if (argc>1 && strcmp(argv[1], "-v")==0)
  42         verbose = 1;
  43 
  44     for (i=0; i<np; i++) {
  45         if (rank==i) {
  46             
  47             for(j=i+1; j<np; j++) {
  48                 if (verbose)
  49                     printf("checking connection between rank %d on %s and rank %-4d\n",
  50                            i, name, j);
  51                 MPI_Send(&rank, 1, MPI_INT, j, rank, MPI_COMM_WORLD);
  52                 MPI_Recv(&peer, 1, MPI_INT, j, j, MPI_COMM_WORLD, &status);
  53             }
  54         } else if (rank>i) {
  55             
  56             MPI_Recv(&peer, 1, MPI_INT, i, i, MPI_COMM_WORLD, &status);
  57             MPI_Send(&rank, 1, MPI_INT, i, rank, MPI_COMM_WORLD);
  58         }
  59     }
  60 
  61     MPI_Barrier(MPI_COMM_WORLD);
  62     if (rank==0)
  63         printf("Connectivity test on %d processes PASSED.\n", np);
  64 
  65     MPI_Finalize();
  66     return 0;
  67 }