#include #include "benchmark/minimal_benchmark.h" #define BASIC_BENCHMARK_TEST(x) \ BENCHMARK(x)->Arg(8)->Arg(512)->Arg(8192) void BM_empty(benchmark::State& state) { while (state.KeepRunning()) { volatile std::size_t x = state.iterations(); ((void)x); } } BENCHMARK(BM_empty); BENCHMARK(BM_empty)->ThreadPerCpu(); void BM_spin_empty(benchmark::State& state) { while (state.KeepRunning()) { for (int x = 0; x < state.range_x(); ++x) { volatile int dummy = x; ((void)dummy); } } } BASIC_BENCHMARK_TEST(BM_spin_empty); BASIC_BENCHMARK_TEST(BM_spin_empty)->ThreadPerCpu(); void BM_spin_pause_before(benchmark::State& state) { for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } while(state.KeepRunning()) { for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } } BASIC_BENCHMARK_TEST(BM_spin_pause_before); BASIC_BENCHMARK_TEST(BM_spin_pause_before)->ThreadPerCpu(); void BM_spin_pause_during(benchmark::State& state) { while(state.KeepRunning()) { state.PauseTiming(); for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } state.ResumeTiming(); for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } } BASIC_BENCHMARK_TEST(BM_spin_pause_during); BASIC_BENCHMARK_TEST(BM_spin_pause_during)->ThreadPerCpu(); void BM_spin_pause_after(benchmark::State& state) { while(state.KeepRunning()) { for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } BASIC_BENCHMARK_TEST(BM_spin_pause_after); BASIC_BENCHMARK_TEST(BM_spin_pause_after)->ThreadPerCpu(); void BM_spin_pause_before_and_after(benchmark::State& state) { for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } while(state.KeepRunning()) { for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } for (int i = 0; i < state.range_x(); ++i) { volatile int dummy = i; ((void)dummy); } } BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after); BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after)->ThreadPerCpu(); void BM_empty_stop_start(benchmark::State& state) { while (state.KeepRunning()) { } } BENCHMARK(BM_empty_stop_start); BENCHMARK(BM_empty_stop_start)->ThreadPerCpu(); BENCHMARK_MAIN()