Looking for benchmarking code snippet (c++) Looking for benchmarking code snippet (c++) windows windows

Looking for benchmarking code snippet (c++)


Your answer: Yes

Caveat: That WON'T work in multihtreaded code or multiple core machines, you need a robust wall-clock timer.So I recommend you use omp's wallclock. OMP is included with VC and GCC, and most compilers and its a standard you don't need to worry about disappearing

#include <omp.h>// Starting the time measurementdouble start = omp_get_wtime();// Computations to be measured...// Measuring the elapsed timedouble end = omp_get_wtime();// Time calculation (in seconds)


#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)namespace win32 {    #include <windows.h>}class timer{    win32::LARGE_INTEGER start_time_;public:    timer() { QueryPerformanceCounter( &start_time_ ); }    void   restart() { QueryPerformanceCounter( &start_time_ ); }    double elapsed() const    {        win32::LARGE_INTEGER end_time, frequency;        QueryPerformanceCounter( &end_time );        QueryPerformanceFrequency( &frequency );        return double( end_time.QuadPart - start_time_.QuadPart )            / frequency.QuadPart;    }};#else#include <ctime>class timer{    clock_t _start_time;public:    timer() { _start_time = clock(); }    void   restart() { _start_time = clock(); }    double elapsed() const    {        return double(clock() - _start_time) / CLOCKS_PER_SEC;    }};#endiftemplate< typename Func >double measure_time( Func f ){    timer t;    f();    return t.elapsed();}


This is a quick and dirty way to time a block of C/C++ code. You need to #include <sys/time.h>, which should be a standard header...

struct timeval start, end;gettimeofday(&start, NULL);// benchmark codegettimeofday(&end, NULL);long long time =   (end.tv_sec * (unsigned int)1e6 +   end.tv_usec) -                  (start.tv_sec * (unsigned int)1e6 + start.tv_usec);

This should give 1-2µs resolution on modern Linux systems (what OS are you using?), which means that it's not well suited to learning much for items taking of <10µs. However, you don't seem to be in that situation.

Update: Based on specified OS... Windows implementation of gettimeofday()