Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update perf
[simgrid.git] / teshsuite / smpi / mpich3-test / perf / allredtrace.c
index 070271b..8fb077b 100644 (file)
@@ -5,13 +5,13 @@
  */
 
 /*
  */
 
 /*
- * This code is intended to test the trace overhead when using an 
+ * This code is intended to test the trace overhead when using an
  * MPI tracing package.  To perform the test, follow these steps:
  *
  * 1) Run with the versbose mode selected to determine the delay argument
  *    to use in subsequent tests:
  *      mpiexec -n 4096 allredtrace -v
  * MPI tracing package.  To perform the test, follow these steps:
  *
  * 1) Run with the versbose mode selected to determine the delay argument
  *    to use in subsequent tests:
  *      mpiexec -n 4096 allredtrace -v
- *    Assume that the computed delay count is 6237; that value is used in 
+ *    Assume that the computed delay count is 6237; that value is used in
  *    the following.
  *
  * 2) Run with an explicit delay count, without tracing enabled:
  *    the following.
  *
  * 2) Run with an explicit delay count, without tracing enabled:
@@ -20,7 +20,7 @@
  * 3) Build allredtrace with tracing enabled, then run:
  *      mpiexec -n 4096 allredtrace -delaycount 6237
  *
  * 3) Build allredtrace with tracing enabled, then run:
  *      mpiexec -n 4096 allredtrace -delaycount 6237
  *
- * Compare the total times.  The tracing version should take slightly 
+ * Compare the total times.  The tracing version should take slightly
  * longer but no more than, for example, 15%.
  */
 #include "mpi.h"
  * longer but no more than, for example, 15%.
  */
 #include "mpi.h"
 
 static int verbose = 0;
 static int lCount = 0;
 
 static int verbose = 0;
 static int lCount = 0;
-void Delay( int );
-void SetupDelay( double );
+void Delay(int);
+void SetupDelay(double);
 
 
-int main( int argc, char *argv[] )
+int main(int argc, char *argv[])
 {
     double usecPerCall = 100;
     double t, t1, tsum;
     int i, nLoop = 100;
     int rank;
 
 {
     double usecPerCall = 100;
     double t, t1, tsum;
     int i, nLoop = 100;
     int rank;
 
-    MPI_Init( &argc, &argv );
-    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
-
-    /* Process arguments.  We allow the delay count to be set from the 
-       command line to ensure reproducibility*/
-    for (i=1; i<argc; i++) {
-       if (strcmp( argv[i], "-delaycount" ) == 0) {
-           i++;
-           lCount = atoi( argv[i] );
-       }
-       else if (strcmp( argv[i], "-v" ) == 0) {
-           verbose = 1;
-       }
-       else {
-           fprintf( stderr, "Unrecognized argument %s\n", argv[i] );
-           exit(1);
-       }
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+    /* Process arguments.  We allow the delay count to be set from the
+     * command line to ensure reproducibility */
+    for (i = 1; i < argc; i++) {
+        if (strcmp(argv[i], "-delaycount") == 0) {
+            i++;
+            lCount = atoi(argv[i]);
+        }
+        else if (strcmp(argv[i], "-v") == 0) {
+            verbose = 1;
+        }
+        else {
+            fprintf(stderr, "Unrecognized argument %s\n", argv[i]);
+            exit(1);
+        }
     }
 
     if (lCount == 0) {
     }
 
     if (lCount == 0) {
-       SetupDelay( usecPerCall );
+        SetupDelay(usecPerCall);
     }
     }
-    
-    MPI_Barrier( MPI_COMM_WORLD );
+
+    MPI_Barrier(MPI_COMM_WORLD);
 
     t = MPI_Wtime();
 
     t = MPI_Wtime();
-    for (i=0; i<nLoop; i++) {
-       MPI_Allreduce( &t1, &tsum, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD );
-       Delay( lCount );
+    for (i = 0; i < nLoop; i++) {
+        MPI_Allreduce(&t1, &tsum, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
+        Delay(lCount);
     }
     t = MPI_Wtime() - t;
     }
     t = MPI_Wtime() - t;
-    MPI_Barrier( MPI_COMM_WORLD );
+    MPI_Barrier(MPI_COMM_WORLD);
     if (rank == 0) {
     if (rank == 0) {
-       printf( "For delay count %d, time is %e\n", lCount, t );
+        printf("For delay count %d, time is %e\n", lCount, t);
     }
     }
-    
-    MPI_Barrier( MPI_COMM_WORLD );
+
+    MPI_Barrier(MPI_COMM_WORLD);
 
     MPI_Finalize();
 
     MPI_Finalize();
-    
+
     return 0;
 }
 
     return 0;
 }
 
-void SetupDelay( double usec )
+void SetupDelay(double usec)
 {
     double t, tick;
     double sec = 1.0e-6 * usec;
     int nLoop, i, direction;
 {
     double t, tick;
     double sec = 1.0e-6 * usec;
     int nLoop, i, direction;
-    
+
 
     /* Compute the number of times to run the tests to get an accurate
 
     /* Compute the number of times to run the tests to get an accurate
-       number given the timer resolution. */
+     * number given the timer resolution. */
     nLoop = 1;
     tick = 100 * MPI_Wtick();
     do {
     nLoop = 1;
     tick = 100 * MPI_Wtick();
     do {
-       nLoop = 2 * nLoop;
-       t = MPI_Wtime();
-       for (i=0; i<nLoop; i++) {
-           MPI_Wtime();
-       }
-       t = MPI_Wtime() - t;
+        nLoop = 2 * nLoop;
+        t = MPI_Wtime();
+        for (i = 0; i < nLoop; i++) {
+            MPI_Wtime();
+        }
+        t = MPI_Wtime() - t;
     }
     }
-    while ( t < tick && nLoop < 100000 );
+    while (t < tick && nLoop < 100000);
+
+    if (verbose)
+        printf("nLoop = %d\n", nLoop);
 
 
-    if (verbose) printf( "nLoop = %d\n", nLoop );
-    
     /* Start with an estimated count */
     lCount = 128;
     direction = 0;
     while (1) {
     /* Start with an estimated count */
     lCount = 128;
     direction = 0;
     while (1) {
-       t = MPI_Wtime();
-       for (i=0; i<nLoop; i++) {
-           Delay( lCount );
-       }
-       t = MPI_Wtime() - t;
-       t = t / nLoop;
-       if (verbose) printf( "lCount = %d, time = %e\n", lCount, t );
-       if (t > 10 * tick) nLoop = nLoop / 2;
-       
-       /* Compare measured delay */
-       if (t > 2*sec) {
-           lCount = lCount / 2;
-           if (direction == 1) break;
-           direction = -1;
-       }
-       else if (t < sec / 2) {
-           lCount = lCount * 2;
-           if (direction == -1) break;
-           direction = 1;
-       }
-       else if (t < sec) {
-           /* sec/2 <= t < sec , so estimate the lCount to hit sec */
-           lCount = (sec/t) * lCount;
-       }
-       else 
-           break;
+        t = MPI_Wtime();
+        for (i = 0; i < nLoop; i++) {
+            Delay(lCount);
+        }
+        t = MPI_Wtime() - t;
+        t = t / nLoop;
+        if (verbose)
+            printf("lCount = %d, time = %e\n", lCount, t);
+        if (t > 10 * tick)
+            nLoop = nLoop / 2;
+
+        /* Compare measured delay */
+        if (t > 2 * sec) {
+            lCount = lCount / 2;
+            if (direction == 1)
+                break;
+            direction = -1;
+        }
+        else if (t < sec / 2) {
+            lCount = lCount * 2;
+            if (direction == -1)
+                break;
+            direction = 1;
+        }
+        else if (t < sec) {
+            /* sec/2 <= t < sec , so estimate the lCount to hit sec */
+            lCount = (sec / t) * lCount;
+        }
+        else
+            break;
     }
 
     }
 
-    if (verbose) printf( "lCount = %d, t = %e\n", lCount, t );
+    if (verbose)
+        printf("lCount = %d, t = %e\n", lCount, t);
 
     /* Should coordinate with the other processes - take the max? */
 }
 
 
     /* Should coordinate with the other processes - take the max? */
 }
 
-double delayCounter = 0;
-void Delay( int count )
+volatile double delayCounter = 0;
+void Delay(int count)
 {
     int i;
 
     delayCounter = 0.0;
 {
     int i;
 
     delayCounter = 0.0;
-    for (i=0; i<count; i++) {
-       delayCounter += 2.73;
+    for (i = 0; i < count; i++) {
+        delayCounter += 2.73;
     }
 }
     }
 }