我正在使用google benchmark 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
这是一个bug在谷歌基准API或有任何变通的办法吗?
我有一个类似的用例,我注意到,暂停和恢复有很多开销,这是在他们的文档中也提到。
这个的变通方法是Google Benchmarks的另一个功能。在for循环里面手动测量你想要运行时间的那部分代码。你可以使用手动定时器(https:/github.comgooglebenchmark#cpu-timers。).
你可以在你想要运行时间的代码段之前和之后获取计时码时间戳,然后你可以在每次迭代时使用 SetIterationTime
.
当你调用这个测试的时候,你需要添加一个叫做 ->UseManualTime();