nanobench — nanobench documentation

# nanobench

Hint

View and download nanobench on Github. Get the latest `release`.

`ankerl::nanobench` is a platform independent microbenchmarking library for C++11/14/17/20.

     1#define ANKERL_NANOBENCH_IMPLEMENT
     2#include <nanobench.h>
     3
     4int main() {
     5    double d = 1.0;
     6    ankerl::nanobench::Bench().run("some double ops", [&] {
     7        d += 1.0 / d;
     8        if (d > 5.0) {
     9            d -= 5.0;
    10        }
    11        ankerl::nanobench::doNotOptimizeAway(d);
    12    });
    13}

The whole executable runs for ~60ms and prints

    |               ns/op |                op/s |    err% |          ins/op |          cyc/op |    IPC |         bra/op |   miss% |     total | benchmark
    |--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
    |                7.52 |      132,948,239.79 |    1.1% |            6.65 |           24.07 |  0.276 |           1.00 |    8.9% |      0.00 | `some double ops`

Which github renders like

ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---
7.52 | 132,948,239.79 | 1.1% | 6.65 | 24.07 | 0.276 | 1.00 | 8.9% | 0.00 | `some double ops`

The benchmarked code takes 7.52 nanoseconds to run, so ~133 million times per seconds. Measurements fluctuate by 1.1%. On average 6.65 instructions are executed in 24.07 CPU cycles, resulting in 0.276 instructions per cycle. A single branch is in the code, which branch prediction missed in 8.9% of the cases. Total runtime of the benchmark with the name `some double ops` is 0.00, so just a few milliseconds.

## Design Goals

Ease of use

  Simple but powerful API, fast compile times, easy to integrate anywhere.

Fast

  Get accurate results as fast as possible

Accurate

  Get deterministic, repeatable, and accurate results that you can make sound decisions on.

Robust

  Be robust against outliers, warn if results are not reliable.