/**************************** * High-level timing wrappers ****************************/ #include #include "fsecs.h" #include "fcyc.h" #include "clock.h" #include "ftimer.h" #include "config.h" static double Mhz; /* estimated CPU clock frequency */ extern int verbose; /* -v option in mdriver.c */ /* * init_fsecs - initialize the timing package */ void init_fsecs(void) { Mhz = 0; /* keep gcc -Wall happy */ #if USE_FCYC if (verbose) printf("Measuring performance with a cycle counter.\n"); /* set key parameters for the fcyc package */ set_fcyc_maxsamples(20); set_fcyc_clear_cache(1); set_fcyc_compensate(1); set_fcyc_epsilon(0.01); set_fcyc_k(3); Mhz = mhz(verbose > 0); #elif USE_ITIMER if (verbose) printf("Measuring performance with the interval timer.\n"); #elif USE_GETTOD if (verbose) printf("Measuring performance with gettimeofday().\n"); #endif } /* * fsecs - Return the running time of a function f (in seconds) */ double fsecs(fsecs_test_funct f, void *argp) { #if USE_FCYC double cycles = fcyc(f, argp); return cycles/(Mhz*1e6); #elif USE_ITIMER return ftimer_itimer(f, argp, 10); #elif USE_GETTOD return ftimer_gettod(f, argp, 10); #endif }