google benchmark

(3 mins to read)

安装

1
2
3
4
5
6
7
8
9
git clone --depth 1 https://github.com/google/benchmark.git
cd benchmark
cmake -E make_directory "build"
cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on -DCMAKE_BUILD_TYPE=Release ../
cmake --build "build" --config Release

cmake -E chdir "build" ctest --build-config Release

sudo cmake --build "build" --config Release --target install

cmake

1
2
3
4
5
find_package(benchmark REQUIRED)
target_link_libraries(xxx
PRIVATE
benchmark::benchmark
)

使用

1
2
3
4
5
6
7
8
9
10
11
12
void SomeFunction(int a, int b) {
return std::max(a, b);
}
static void BM_SomeFunction(benchmark::State& state) { // a wrapper
for (auto _ : state) {
SumeFunction(1, 2);
}
}

BENCHMARK(BM_SomeFunction);

BENCHMARK_MAIN();

也可以自己定义main函数,只需要在最后加上以下两行

1
2
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();

官方对整型变量的支持比较好,有各种range的传参方式。如果需要传入其他变量,需要使用CAPTURE,传参方式类似emplace_back之类的Iterations可以指定迭代次数Unit指定时间单位(默认是ns)

1
2
3
BENCHMARK_CAPTURE(BM_xxx, xxx_test, arg)
->Iterations(5)
->Unit(benchmark::kMillisecond);