谷歌Benchmark测试框架

谷歌Benchmark测试框架

Benchmark是谷歌开发的C++性能测试框架。本章将简单介绍其安装使用。

安装

参考博客如下:https://www.cnblogs.com/apoce...

> git clone https://github.com/google/benchmark.git
> cd benchmark
> git clone https://github.com/google/googletest.git googletest
> mkdir -p build 
> cd build cmake -DCMAKE_BUILD_TYPE=RELEASE ../benchmark
> make -j4
> sudo make install
# 如果想install到其他目录,需要自己设置CMAKE_INSTALL_PREFIX

引入benchmark

在最上层的CMakeLists.txt文件中添加链接库。

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
# benchmark依赖thread线程库
add_library(benchmark STATIC IMPORTED)
set_property(TARGET benchmark PROPERTY IMPORTED_LOCATION /usr/local/lib/libbenchmark.a)

如果我们需要在demo.cpp中引入benchmark,需要添加依赖:

add_executable(demo demo.cpp)
target_link_libraries(demo
    benchmark
)

install(TARGETS
    demo
    DESTINATION "bin/"
)

Demo

在demo.cpp文件中

#include 
#include 
#include 

constexpr int len = 6;
std::vector vec{1, 2, 3, 4, 5, 6};
std::array array{1, 2, 3, 4, 5, 6};

// benchmark::State &state用于维护测试上下文信息,以及控制迭代次数
static void vector_test(benchmark::State &state)
{
    for (auto _ : state)
    {
        vec[0];
        vec[1];
        vec[2];
        vec[3];
        vec[4];
        vec[5];
    }
}

static void array_test(benchmark::State &state)
{
    for (auto _ : state)
    {
        array[0];
        array[1];
        array[2];
        array[3];
        array[4];
        array[5];
    }
}

// 注册测试用例
BENCHMARK(vector_test);
BENCHMARK(array_test);
// benchmark的主函数
BENCHMARK_MAIN();

编译过后,运行make install,我们可以在$CMAKE_INSTALL_PREFIX/bin中找到可执行文件demo,然后运行./demo

结果格式如下:

2021-12-02T02:13:36+08:00
Running ./demo
Run on (16 X 1896.37 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x8)
  L1 Instruction 32 KiB (x8)
  L2 Unified 512 KiB (x8)
  L3 Unified 16384 KiB (x1)
Load Average: 0.43, 0.25, 0.10
------------------------------------------------------
Benchmark            Time             CPU   Iterations
------------------------------------------------------
vector_test       6.81 ns         6.81 ns    102373755
array_test        13.6 ns         13.6 ns     51227934

Time表示平均每次的运行时间,CPU为平均CPU运行时间。

你可能感兴趣的:(benchmarkc++)