我可以通过 C++ 中的谷歌基准库计算吞吐量吗

Can I calculate throughput via google benchmark library in C++

提问人:blonded04 提问时间:7/18/2023 更新时间:7/21/2023 访问量:191

问:

我想测量每 N 秒将执行多少次 C++ 函数,有没有办法通过谷歌基准测试来做到这一点?也许使用一些 lambda 作为函数?ComputeStatistics

如果无法通过谷歌基准测试来做到这一点:还有其他方法可以测量吞吐量吗?

C++ 测试 微基准测试 吞吐量 google-benchmark

评论

0赞 tadman 7/18/2023
理论上“会”?
1赞 Peter Cordes 7/18/2023
Benchmark 库的要点是通过循环调用来微基准测试函数。(你可以用它来击败任何内联和交叉迭代优化。任何关于使用 Benchmark 的教程或指南都应该告诉你如何做到这一点。若要测量吞吐量,请使每个调用的输入独立于上一个调用。若要测量延迟,请使下一个调用的一个或多个输入依赖于前一个调用。__attribute__((noinline,noipa))

答:

3赞 Cory Kramer 7/18/2023 #1

吞吐量以 https://github.com/google/benchmark/blob/main/docs/user_guide.md#output-formats 为单位报告items/s

Benchmark                Time(ns)    CPU(ns) Iterations
-------------------------------------------------------
BM_SetInsert/1024/1         28928      29349      23853  133.097kB/s   33.2742k items/s
BM_SetInsert/1024/8         32065      32913      21375  949.487kB/s   237.372k items/s
BM_SetInsert/1024/10        33157      33648      21431  1.13369MB/s   290.225k items/s

所以直接回答你的问题

我想测量每 N 秒执行多少次 C++ 函数

您将取此值乘以秒,这将为您提供大约 N 秒内处理的项目数。items/sN

评论

0赞 blonded04 7/21/2023
正如我所发现的:你必须自己添加自定义项目,这对于一些你可能想要基准测试的有趣例子来说已经足够困难了,而且还增加了一些性能开销(增加了很小但无论如何的广告)。Benchmark::State
0赞 blonded04 7/21/2023 #2

实际上,最简单的方法是用于要计算吞吐量的每个基准,然后简单地从每个基准中获取。->MinTime(seconds)Iterations