ivafanas / sltbench

C++ benchmark tool. Practical, stable and fast performance testing framework.
Boost Software License 1.0
150 stars 10 forks source link
benchmark benchmark-framework benchmarking cplusplus cpp cpp-library open-source performance test-framework testing testing-tools

sltbench

Build Status Build status

C++ benchmark tool. Practical, stable and fast performance testing framework.

This tool is trained to gain about 5% measure stability (depends on function, input and context). Of course, it cannot strongly guarantee 5% stability (some functions are unstable itself, nothing helps), but it tends to.

Why sltbench

The closest and the most famous analogue is googlebench - microbenchmarking library from Google engineers.

Key features of sltbench are:

measure time

(Results below are obtained on 4 cores i7-2600 CPU @ 3.40GHz, 8Gb RAM for sltbench dataset; see "Metrics" section for details; see How to benchmark section for instructions)

sltbench googlebench nonius
benchmark time, sec 87.45 416.44 482.03
average rel error, % 0.4% 5.6% 2.6%
maximum rel error, % 2.9% 15.1% 60%

4.7x times speedup might be useful for projects with big performance tests count. For the original project regression performance testing tooks about a week and testing time reduction matters.

Less relative error means:

compilation time

Sltbench contains improvements on compilation time of benchmarks (not library!) for the most popular api since 2.4.0. Benchmarks for functions without arguments and driver launch might be implemented in a more lightweight manner. See Advanced user guide for explanation how to reuse improvements.

(benchcompile metric results below are obtained on Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz, clang-6.0.0, dataset=simple for optimized cases only)

compilation time, sec
sltbench 2.4.0 2.5
googlebench v1.5.1 16.5

Motivating example

The following code registers my_function for timing. Just compile it (do not forget about includes) and the executable file will test my_function for performance.

void my_function()
{
    std::vector<size_t> v(100000, 0);
    std::sort(v.begin(), v.end());
}

SLTBENCH_FUNCTION(my_function);

SLTBENCH_MAIN();

Documentation

License

sltbench is released under the Apache 2.0 license