Skip to content
Snippets Groups Projects
Select Git revision
  • dc0056086dae50571fa2bef952de6bd4abb9817f
  • master default protected
  • explicit
3 results

fsecs.c

Blame
  • fsecs.c 1.22 KiB
    /****************************
     * High-level timing wrappers
     ****************************/
    #include <stdio.h>
    #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 
    }