1

我正在使用谷歌基准 API 运行一些性能测试。我使用 state.PauseTiming() 和 state.ResumeTiming() 来避免不必要的代码段通过 perf 路径运行。我附上了下面的示例代码

 while (state.KeepRunning()) {
    state.PauseTiming();
    state.ResumeTiming();
    state.PauseTiming();
    state.ResumeTiming();
}

这些函数本身需要 323ns 的 2 次暂停和恢复。

hiRun on (16 X 3196.36 MHz CPU s)
2019-06-19 11:21:06
---------------------------------------------------------------
Benchmark                        Time           CPU Iterations
---------------------------------------------------------------
Benchmark_Test1                 323 ns        324 ns    2158319

这是谷歌基准 API 中的一个错误,还是有任何解决方法?

4

1 回答 1

1

我有一个类似的用例,我注意到暂停和恢复有很多开销,这在他们的文档中也有提到。

解决此问题的方法是 Google Benchmarks 的另一个功能。在 for 循环中手动测量您希望运行时间的代码部分。您可以使用手动计时器(https://github.com/google/benchmark#cpu-timers)来做到这一点。

您在要运行时间的代码段之前和之后获取计时时间戳,然后将其设置为每次迭代时使用的状态SetIterationTime

当您调用此测试时,您需要添加一个->UseManualTime();

于 2020-05-27T13:42:28.530 回答