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