microbench/util.c: Win32 support

This commit is contained in:
Erik de Castro Lopo 2015-09-02 16:34:22 +10:00
parent 98cab352a0
commit 451efca294

View File

@ -29,14 +29,47 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <stdlib.h>
#include "util.h"
#if defined _WIN32
#include <windows.h>
static double
counter_diff (const LARGE_INTEGER * start, const LARGE_INTEGER * end)
{
LARGE_INTEGER diff, freq;
QueryPerformanceFrequency(&freq);
diff.QuadPart = end->QuadPart - start->QuadPart;
return (double)diff.QuadPart/(double)freq.QuadPart;
}
double
benchmark_function (void (*testfunc) (void), unsigned count)
{
LARGE_INTEGER start, end;
unsigned k;
QueryPerformanceCounter (&start) ;
for (k = 0 ; k < count ; k++)
testfunc();
QueryPerformanceCounter (&end) ;
return counter_diff (&start, &end) / count ;
} /* benchmark_function */
#else
#define _GNU_SOURCE #define _GNU_SOURCE
#include <stdlib.h>
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include "util.h"
static double static double
timespec_diff (const struct timespec * start, const struct timespec * end) timespec_diff (const struct timespec * start, const struct timespec * end)
{ struct timespec difftime; { struct timespec difftime;
@ -68,6 +101,8 @@ benchmark_function (void (*testfunc) (void), unsigned count)
return timespec_diff (&start, &end) / count ; return timespec_diff (&start, &end) / count ;
} /* benchmark_function */ } /* benchmark_function */
#endif
static int static int
double_cmp (const void * a, const void * b) double_cmp (const void * a, const void * b)
{ const double * pa = (double *) a ; { const double * pa = (double *) a ;