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