rbdlsim/3rdparty/vectorial/bench/bench.h

66 lines
1.2 KiB
C++

#ifndef BENCH_H
#define BENCH_H
#include <string>
#include <stdlib.h>
#ifdef __APPLE__
#define BENCH_MACH
#include <mach/mach_time.h>
#include <stdint.h>
#elif defined(_WIN32)
#define BENCH_QPC
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <malloc.h>
#else
#define BENCH_GTOD
#include <sys/time.h>
#endif
static void* memalign(size_t count, size_t align) {
#ifdef _WIN32
return _aligned_malloc(count,align);
#else
void *ptr;
int e = posix_memalign(&ptr, align, count);
// if( e == EINVAL ) printf("EINVAL posix_memalign\n");
// if( e == ENOMEM ) printf("ENOMEM posix_memalign\n");
return ptr;
#endif
}
static void memfree(void* ptr) {
#ifdef _WIN32
_aligned_free(ptr);
#else
free(ptr);
#endif
}
namespace profiler {
#ifdef BENCH_GTOD
typedef struct timeval time_t;
#endif
#ifdef BENCH_MACH
typedef const uint64_t time_t;
#endif
#ifdef BENCH_QPC
typedef LARGE_INTEGER time_t;
#endif
void init();
time_t now();
double diffTime(time_t start, time_t end);
}
std::string formatTime(double d, double relative=-1);
void profile(const char* name, void (*func)(), int iterations, int elements);
#endif