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

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 second. 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.