/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */ /* * (C) 2006 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. */ /* * Check that the timer produces monotone nondecreasing times and that * the Tick is reasonable */ #include "mpi.h" #include #include "mpitest.h" static int verbose = 0; #define MAX_TIMER_TEST 5000 int main(int argc, char *argv[]) { double t1[MAX_TIMER_TEST], tick[MAX_TIMER_TEST], tickval; double minDiff, maxDiff, diff; int i, nZeros = 0; int errs = 0; MTest_Init(&argc, &argv); for (i = 0; i < MAX_TIMER_TEST; i++) { t1[i] = MPI_Wtime(); } for (i = 0; i < MAX_TIMER_TEST; i++) { tick[i] = MPI_Wtick(); } /* Look at the values */ /* Look at the tick */ tickval = MPI_Wtick(); for (i = 0; i < MAX_TIMER_TEST; i++) { if (tickval != tick[i]) { fprintf(stderr, "Nonconstant value for MPI_Wtick: %e != %e\n", tickval, tick[i]); errs++; } } /* Look at the timer */ minDiff = 1.e20; maxDiff = -1.0; nZeros = 0; for (i = 1; i < MAX_TIMER_TEST; i++) { diff = t1[i] - t1[i - 1]; if (diff == 0.0) nZeros++; else if (diff < minDiff) minDiff = diff; if (diff > maxDiff) maxDiff = diff; } /* Are the time diff values and tick values consistent */ if (verbose) { printf("Tick = %e, timer range = [%e,%e]\n", tickval, minDiff, maxDiff); if (nZeros) printf("Wtime difference was 0 %d times\n", nZeros); } MTest_Finalize(errs); MPI_Finalize(); return 0; }