Skip to content

Latest commit

 

History

History
67 lines (50 loc) · 1.89 KB

README.md

File metadata and controls

67 lines (50 loc) · 1.89 KB

Build Status

BrainTwister benchmark

Accurate benchmark library for C++

Copyright (C) 2018 Bernd Doser, [email protected]

All rights reserved.

BrainTwister benchmark is free software made available under the MIT License. For details see LICENSE.

conan.io

C++ conan.io package is available at https://bintray.com/braintwister/conan

Description

BrainTwister benchmark determine accurate timings of a C++ function be executing it several times to get a reliable result. Outliers (spikes) will be detected and repeated. Number of "warm up" runs can be defined

Benchmark benchmark{JSON{R"(
    {
        "min_replications": 4,
        "max_replications": 100000,
        "min_execution_time": "00:00:01.000000000",
        "spike_detection": 1,
        "spike_detection_factor": 0.1,
        "warm_up_runs": 2
    }
)"}};

int N = 100000;
std::vector<int> v, v_init(N);

std::random_device rnd_device;
std::mt19937 mersenne_engine(rnd_device());
std::uniform_int_distribution<int> dist(1, 100000);

auto gen = std::bind(dist, mersenne_engine);
generate(std::begin(v_init), std::end(v_init), gen);

auto results = benchmark.benchIt(
    [&v](){
        std::sort(std::begin(v), std::end(v));
    },
    [&v, v_init](){
        v = v_init;
    }
);

The time format is hh:mm:ss.nnnnnnnnn with (h)ours, (m)inutes, (s)econds, and (n)anoseconds. The benchmark execution function benchIt expect two functions. The first one is the function which will be benchmarked. The second one is optional and can be used if the benchmark function needs some initialization. In the given example the unsorted vector will be copied back before the next run.