Removed a transient function call which doesn't exist anymore.
[charm.git] / examples / ampi / pingpong / pingpong-1way.c
1 /***********************************************
2           MPI / AMPI pingpong test program
3           Prints bandwidth and latency for a specific message size
4        
5           Sameer Kumar 02/08/05
6 **************************************/
7  
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <mpi.h>
11
12 int main(int argc, char **argv)
13 {
14   int my_id;            /* process id */
15   int p;                /* number of processes */
16   char* message_s, *message_r;  /* storage for the message */
17   int i, max_msgs, msg_size;
18   MPI_Status status;    /* return status for receive */
19   double elapsed_time_sec;
20   double bandwidth;
21   double startTime = 0;
22   
23   MPI_Init( &argc, &argv );
24   
25   MPI_Comm_rank( MPI_COMM_WORLD, &my_id );
26   MPI_Comm_size( MPI_COMM_WORLD, &p );
27   
28   if ((sscanf (argv[1], "%d", &max_msgs) < 1) ||
29       (sscanf (argv[2], "%d", &msg_size) < 1)) {
30     fprintf (stderr, "need msg count and msg size as params\n");
31     goto EXIT;
32   }
33
34   message_s = (char*)malloc (msg_size);  
35   message_r = (char*)malloc (msg_size);
36
37   /* don't start timer until everybody is ok */
38   MPI_Barrier(MPI_COMM_WORLD); 
39   
40   if( my_id < p/2 ) {
41     startTime = MPI_Wtime();
42     
43     for(i=0; i<max_msgs; i++){
44       MPI_Send(message_s, msg_size, MPI_CHAR, my_id+p/2, 0, MPI_COMM_WORLD);
45       MPI_Recv(message_r, msg_size, MPI_CHAR, my_id+p/2, 0, MPI_COMM_WORLD, 
46                &status); 
47     }
48     
49     MPI_Barrier(MPI_COMM_WORLD); 
50
51     elapsed_time_sec = MPI_Wtime() - startTime; 
52
53     fprintf(stdout, "Totaltime: %8.3f s\n",elapsed_time_sec);
54     elapsed_time_sec /= 2;  //We want the ping performance not round-trip.
55     elapsed_time_sec /= max_msgs; //time for each message
56     bandwidth = msg_size / elapsed_time_sec; //bandwidth
57     
58     fprintf (stdout, "%5d %7d\t ", max_msgs, msg_size);
59     fprintf (stdout,"%8.3f us,\t %8.3f MB/sec\n",
60              elapsed_time_sec * 1e6, bandwidth / 1e6);
61     
62   }
63   else {
64     for(i=0; i<max_msgs; i++){
65       MPI_Recv(message_r, msg_size, MPI_CHAR, my_id-p/2, 0, MPI_COMM_WORLD, 
66                &status); 
67       MPI_Send(message_s, msg_size, MPI_CHAR, my_id-p/2, 0, MPI_COMM_WORLD);
68     }
69     
70     MPI_Barrier(MPI_COMM_WORLD); 
71   }         
72   
73   free(message_s);
74   free(message_r);
75  EXIT:
76   MPI_Finalize();
77   
78   return 0;
79 }
80