5 From: hook@nas.nasa.gov (Edward C. Hook)
14 #define EXIT_SUCCESS 0
15 #define EXIT_FAILURE 1
18 int main( int argc, char *argv[] )
27 MPI_Init(&argc,&argv);
28 MPI_Comm_rank(MPI_COMM_WORLD,&rank);
29 MPI_Comm_size(MPI_COMM_WORLD,&size);
31 for ( i=1 ; i < argc ; ++i ) {
32 if ( argv[i][0] != '-' )
36 chunk = atoi(argv[++i]);
39 fprintf(stderr,"Unrecognized argument %s\n",
41 MPI_Abort(MPI_COMM_WORLD,EXIT_FAILURE);
45 sb = (int *)malloc(size*chunk*sizeof(int));
47 perror( "can't allocate send buffer" );
48 MPI_Abort(MPI_COMM_WORLD,EXIT_FAILURE);
50 rb = (int *)malloc(size*chunk*sizeof(int));
52 perror( "can't allocate recv buffer");
54 MPI_Abort(MPI_COMM_WORLD,EXIT_FAILURE);
56 for ( i=0 ; i < size*chunk ; ++i ) {
61 /* fputs("Before MPI_Alltoall\n",stdout); */
63 /* This should really send MPI_CHAR, but since sb and rb were allocated
64 as chunk*size*sizeof(int), the buffers are large enough */
65 status = MPI_Alltoall(sb,chunk,MPI_INT,rb,chunk,MPI_INT,
68 /* fputs("Before MPI_Allreduce\n",stdout); */
69 MPI_Allreduce( &status, &gstatus, 1, MPI_INT, MPI_SUM,
72 /* fputs("After MPI_Allreduce\n",stdout); */
74 if (gstatus == 0) printf( " No Errors\n" );
76 printf("all_to_all returned %d\n",gstatus);