问题标签 [google-benchmark]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
635 浏览

c++ - cpu 的谷歌基准报告时间不正确

我正在使用benchmark::RegisterBenchmark基准测试我的代码。举个简单的例子,我有:

初始化函数正在做:

我想用一些额外的参数从 fun() 多次调用我的基准函数。为了简单起见,我现在用阶乘替换了基准函数。有了这个,报告的时间总是0。我在这里错过了什么?另一件事是,如果我不写for (auto _ : state)它会引发运行时错误并退出。报告的迭代次数始终为 1000000000。

0 投票
5 回答
4552 浏览

cmake - 如何在 Windows 中使用 cmake 构建和链接谷歌基准测试

我正在尝试构建 google-benchmark 并使用 cmake 将其与我的库一起使用。我已经成功地构建了 google-benchmark 并使用 cmake 成功运行了它的所有测试。不幸的是,我无法使用 cmake 或 cl 在 Windows 中将它与我的 c++ 代码正确链接。

我认为的问题是 google-benchmark 在 src 文件夹中构建库,即它是在 src/Release/benchmark.lib 中构建的,现在如果我使用 ${benchmark_LIBRARIES} 它会在src 外部的 Release 文件夹,因为这是构建所有库的通常位置。并且很难找到适用于 Windows 的示例。

这是我尝试过的两种方法,都可以构建库并运行所有测试,但我无法正确地将库指向 target_link_library

在此之后我如何将它链接到我的 c++ 文件 try.cpp

0 投票
1 回答
79 浏览

c++ - How can I understand these symbols in a C++ code?

  1. Why the posix_memalign is written as ::posix_memalign?
  2. What is memory here?

I am looking to benchmark the read and write speeds of my cache memories and RAM. For this purpose, I want to use google benchmark library and I saw an example code that utilizes it. More or less I get the idea of the code but what does memory stand here? And why are we making it as a pointer to void? Also, why the example writes posix_memalign with ::? Is it because we are referencing to the google benchmark class?

0 投票
0 回答
435 浏览

cmake - 配置 cmake 以在并行目录中使用 google test 到 google 基准测试

我有一个项目,我在一个名为 Tests/GTest 的子目录中有 googletest,我想将 google 基准测试放在一个名为 Tests/GBenchmark 的并行子目录中(可能还有 Tests/GMock 中的 google mock)。这似乎是这里的公司编码约定。但是,我不知道如何在 CMakeLists.txt 中放置一个指令,向 google benchmark 解释它将在哪里找到 googletest。

我尝试在 HandleGTest 提示部分添加各种版本的“../GTest”,但这并没有帮助。通过添加符号链接,我更接近了一点,但这对我来说似乎是一种黑客行为。

0 投票
0 回答
1673 浏览

linux - 如何释放eventfd/eventpoll/timerfd创建的匿名inode?

我正在尝试使用 Google Benchmark 测量 API。它处理客户端/服务器代码。Google Benchmark 应用程序多次运行 setUp() TearDown() 对,以适当的方式测量时间。客户端/服务器通过 TCP 传输工作。

问题:在单个进程(Google Benchmark)中,客户端多次重启。这会导致存在剩余的匿名 inode,因此出现错误

epoll:打开的文件太多

当我尝试 lsof | grep "a_inode",我看到eventfd/eventpoll/filefd创建的所有匿名inode都处于打开状态。

命令 PID TID 用户 FD 类型 设备尺寸/关闭 节点名称

gbench 6514 6517 boarnerges 1020u a_inode 0,13 0 9567 [eventfd]

gbench 6514 6517 boarnerges 1021u a_inode 0,13 0 9567 [eventpoll]

gbench 6514 6517 boarnerges 1022u a_inode 0,13 0 9567 [timerfd]

gbench 6514 6520 boarnerges cwd DIR 8,1 4096 543203 /home/boarnerges/project_GoogleBenchmark/build

gbench 6514 6520 boarnerges rtd DIR 8,1 4096 2 /

gbench 6514 6520 boarnerges txt REG 8,1 2494784 949699 /home/boarnerges/project_GoogleBenchmark/build/tests/tests/GBenchmarkTests/benchmark_client/it_gbenchmark_client

我该如何解决这个问题?可以从进程中释放匿名 inode 吗?

0 投票
1 回答
959 浏览

google-benchmark - 如何正确使用带有自定义参数的模板化谷歌基准测试装置?

我想修改模板化的谷歌基准(带有自定义参数)以使用测试夹具类运行,但不知道这是否真的可行,如果可以,正确的语法如何。

仅仅添加夹具类似乎是不够的。

编译器抱怨 before-last 代码行 error: expected initializer before '->' token,但也无法从测试中的夹具中找到变量声明。这可能是结果或附加错误。我需要另外注册灯具吗?该示例在没有固定装置的情况下完美运行。

0 投票
1 回答
660 浏览

benchmarking - 谷歌基准 state.PauseTiming() 和 state.ResumeTiming() 需要很长时间

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

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

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

0 投票
1 回答
121 浏览

google-benchmark - N 个函数 x M 个带有谷歌基准的数据集

想象一下,我想针对三个不同的数据集测试序列化/反序列化例程。这导致 2x3=6 基准。

理想情况下,我想实现以下目标:

  • 避免代码重复
  • 每次可执行调用仅调用数据集生成器函数一次,并且仅在未被排除时--benchmark_filter=...(生成器函数很昂贵)
  • 有意义的基准名称(例如“Serialize/DatasetAlpha”)

指南中提到的任何功能似乎都不完全符合目的。到目前为止,我发现的最接近的解决方案是使用 vararg-parameterized Serialize()/Deserialize()函数以及生成器函数,它们会将生成的数据作为单例返回。

有没有更好的办法?

这是我想避免的:

0 投票
1 回答
110 浏览

mpi - googlebenchmark 和 MPI:有希望吗?

我想在谷歌基准下运行特定的 MPI 函数。就像是:

当然,我们知道会发生什么:

我知道 MPI 对我想做的事情并不酷。但是谷歌基准测试太有用了,至少不能尝试找到一个黑客来完成这项工作。

有什么可以做的吗?我可以分叉一个进程并将 lambda 传递给它吗?有没有可行的线程模式?即使是昂贵的东西也会有所帮助,因为我可以foo()从 which call中减去在没有调用的情况下进行任何 hack 工作的成本foo()

0 投票
1 回答
1228 浏览

c++ - 禁用优化后,quick-bench.com 上的基准测试速度更快

我创建了一个非常简单的基准来说明短字符串优化并在quick-bench.com上运行它。该基准测试非常适用于 SSO 禁用/启用的字符串类的比较,结果与 GCC 和 Clang 非常一致。-O2但是,我意识到当我禁用优化时,报告的时间比启用优化 (或)观察到的时间快 4 倍左右-O3,无论是使用 GCC 还是 Clang。

基准测试在这里:http: //quick-bench.com/DX2G2AdxUb7sGPE-zLRa41-MCk0

知道什么可能导致未优化的基准测试运行速度提高 4 倍吗?

不幸的是,我看不到生成的程序集;不知道问题出在哪里(“记录反汇编”框已选中,但对我的运行没有影响)。此外,当我使用 Google Benchmark 在本地运行基准测试时,结果与预期一致,即优化后的基准测试运行得更快。

我还尝试比较 Compiler Explorer 中的两种变体,未优化的变体似乎执行了更多指令:https ://godbolt.org/z/I4a171 。