Federico Ficarelli @ Meetup C++ 2018-12-13
benchmark::State&
benchmark::State&
BENCHMARK(...)
macroBENCHMARK_MAIN()
macroArg(n)
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0));
}
}
BENCHMARK(bench)
->Arg(1)
->Arg(2)
// ...
->Arg(10);
Range(n, m)
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0));
}
}
BENCHMARK(bench)->Range(2, 10);
RangeMultiplier(n)
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0));
}
}
BENCHMARK(bench)->RangeMultiplier(3)->Range(2, 10);
DenseRange(n, m)
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0));
}
}
BENCHMARK(bench)->DenseRange(2, 10);
Args({...})
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0),
state.range(1));
}
}
BENCHMARK(bench)->Args({1<<10, 128})->Args({2<<10, 256});
Args({...})
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0),
state.range(1));
}
}
BENCHMARK(bench)
->Args({0, 0})->Args({0, 1}) ... ->Args({0, 10})
->Args({1, 0})->Args({1, 1}) ... ->Args({1, 10})
// ...
->Args({10, 0})->Args({10, 1}) ... ->Args({10, 10});
Ranges({...}, {...}, ...)
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0),
state.range(1));
}
}
BENCHMARK(bench)->Ranges({0, 10}, {0, 10});
Apply(<callable>)
static void args(benchmark::internal::Benchmark* b) {
for(auto i = 0; i <= 10; ++i)
for(auto j = 32; j <= 1024 * 1024; j *= 8)
b->Args({i, j});
}
static void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<std::int32_t> v(state.range(0),
state.range(1));
}
}
BENCHMARK(bench)->Apply(args);
template <typename T>
void bench(benchmark::State& state) {
for(auto _: state) {
std::vector<T> v(256);
}
}
BENCHMARK_TEMPLATE(bench, std::int8_t);
BENCHMARK_TEMPLATE(bench, std::int16_t);
BENCHMARK_TEMPLATE(bench, std::int32_t);
SetBytesProcessed(n)
void bench(benchmark::State& state) {
std::vector<int> v(state.range(0));
for(auto _: state) {
const auto sum =
std::accumulate(std::begin(v), std::end(v), 0);
}
const auto bytes =
state.iterations() * v.size() * sizeof(int);
state.SetBytesProcessed(bytes);
}
BENCHMARK(bench)->Range(8, 1024);
SetItemsProcessed(n)
void bench(benchmark::State& state) {
std::vector<int> v(state.range(0));
for(auto _: state) {
const auto sum =
std::accumulate(std::begin(v), std::end(v), 0);
}
const auto items =
state.iterations() * v.size();
state.SetItemsProcessed(items);
}
BENCHMARK(bench)->Range(8, 1024);
state.counters[<id>]
void bench(benchmark::State& state) {
std::vector<int> v(state.range(0));
for(auto _: state) {
const auto sum =
std::accumulate(std::begin(v), std::end(v), 0);
}
const auto units =
state.iterations() * v.size() / 2;
state.counters["Units"] = units;
}
BENCHMARK(bench)->Range(8, 1024);
void bench(benchmark::State& state) {
std::vector<int> v(state.range(0));
for(auto _: state) {
const auto sum =
std::accumulate(std::begin(v), std::end(v), 0);
}
state.SetComplexityN(v.size());
}
BENCHMARK(bench)->Range(8, 1024)->Complexity(benchmark::oN);