安装
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) { 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);
|