问题标签 [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 投票
1 回答
3128 浏览

c++ - Google Benchmark 自定义设置和拆卸方法

我正在使用基准库对一些代码进行基准测试。我想在调用实际基准代码之前调用一个设置方法,而不是每次都重复,用于多个基准方法调用。例如:

正如我们所看到的,设置代码将在我指定的范围内被多次调用。我确实看过夹具测试。但我的问题是它可以在不使用夹具测试的情况下完成。如果是,那么我们该怎么做呢?

0 投票
1 回答
4625 浏览

c++ - Google Benchmark Iteration 的含义是什么?

我正在使用 Google Benchmark 来测量一些代码的执行时间。例如,我编写了以下代码来衡量其执行时间性能。

当上面的代码运行时,它显示了以下结果:

但我无法弄清楚这里的迭代是什么意思?还有为什么时间和CPU彼此不同?

0 投票
0 回答
145 浏览

microbenchmark - 为什么谷歌基准 csv_reporter 打印出未使用的标题?

我们正在使用 Google (micro) Benchmark ( https://github.com/google/benchmark ) 进行基准测试。当我们显示结果时,基准会显示所有标题(甚至是未使用的标题)。基准测试结果使用 csv_reporter ( https://github.com/google/benchmark/blob/master/src/csv_reporter.cc ) 显示。我在代码中看到(第 71 行),它遍历所有标题(元素,第 34 行的声明)并打印出来。

我找不到禁用未使用的标头的方法,这样基准测试看起来并不好。这就是我的基准测试结果现在的样子:

如您所见,无缘无故有很多未使用的列。但是,我想将自定义计数器保留在最后,因为它们有我显示的数据,我只是无法将它放在标记中。

也就是说,我想删除这些标题:bytes_per_second, items_per_second, label, error_occurred, error_message

0 投票
1 回答
3501 浏览

c++ - Google Benchmark 作为 cmake 依赖项

我正在尝试编译一个依赖于 Libtorch (Pytorch) 库的谷歌基准测试。我已经安装了Google Benchmarkmake install据我了解,我应该能够使用 find_package() 添加这两个依赖项。最后我添加了一些编译器标志。

这是我的 CMakeLists.txt:

应该注意的是,无论有没有 GCC_LINK_FLAGS,我总是会收到一个致命错误:找不到“benchmark/benchmark.h”文件。当我的代码只依赖于 Pytorch 时,它正在编译和运行。是否可以将 find_package 与谷歌基准一起使用?如果不是,我该如何正确处理?

编辑1:

这是我运行的命令。

0 投票
1 回答
628 浏览

cmake - GBenchmark 和 CMake

从网络上的相关搜索中,我得到了一个 google-benchmark不容易融入 CMake 项目的印象。我可以做到这一点的一种方法是添加为外部项目,逐字复制GTestgoogle-test自述文件中的相应文本:

并具有如何在 Windows 中使用 cmake 构建和链接 google benchmark 中CMakeLists.txt.in的内容

然而,这有一个巨大的缺点:每次我们更改CMakeLists.txt托管所有这些的最顶层的东西时,它都会从头开始构建 google-benchmark,并运行所有“测试”,无论它们是什么。因此编译时间变得更长。

如果没有对 Linux 服务器的 root 访问权限,是否有更便携的方式将基准代码安装在一个人的主目录中,同时能够在 CMake 项目中链接到它?

编辑:我必须说我已经能够git clone测试代码并成功地将其构建在我的主目录中。

编辑:回答我自己的问题。我不确定这是否值得关闭,并留给顾客来决定,但我已经解决了如下问题。在CMakeLists.txt其中可以有以下内容:

这里的关键是target_link_directories-Lhttps://github.com/google/benchmark的示例中指定

0 投票
2 回答
434 浏览

c++ - 使用 Google 基准测试时返回值会发生什么变化?

我正在使用 Google 基准测试我们软件中的一些功能。假设函数签名如下所示。返回类型可以是任何其他派生数据类型。

基准函数看起来像这样。

现在,代码编译了,我可以收集基准测试结果。但是,我有以下问题。

  1. 返回值会发生什么?如果我不再在基准函数中的任何地方使用这些值,我是否应该为此烦恼?
  2. 我应该像这样调用函数benchmark::DoNotOptimize( func(Obj& o1, Obj& o2) );以避免优化吗?我真的不明白何时调用该函数benchmark::DoNotOptimize
0 投票
1 回答
1417 浏览

c++ - Google-benchmark 结果中显示的时间没有意义

我正在对我的处理器上的一些示例函数进行基准测试,每个内核都以 2 GHz 运行。以下是进行基准测试的功能。此外,可在快速工作台上使用

以下是 Google 基准测试结果。

结果表明,执行时间0.490 ns0.858 ns前两个函数。但是,我不明白的是,如果我的核心运行在 2 GHz,这意味着一个周期是0.5 ns,这使得结果看起来不合理。

我知道显示的结果是迭代次数的平均值。而如此短的执行时间意味着大多数示例都在下面0.5 ns

我错过了什么?

编辑1:i从评论看来, 添加一个常量似乎x不是一个好主意。事实上,我是从调用std::cout虚函数和非虚函数开始的。这有助于我理解虚函数不是内联的,调用需要在运行时解决。

但是,在功能中具有输出进行基准测试在终端上看起来并不好。(有没有办法从 Godbolt 分享我的代码?)任何人都可以提出替代方法来在函数内打印一些东西吗?

0 投票
1 回答
434 浏览

conan - google-benchmark conan 包中缺少用户和频道字段

我正在尝试使用 C++ 包管理器柯南安装谷歌基准库。但是, conan-center似乎缺少用户和频道字段。如果我尝试在柯南中心搜索库,我也会收到错误消息。

柯南中心出了什么问题,还是我错过了什么?我注意到其他软件包表现出相同的行为(gtest、doctest 等),尽管它们也有 bincrafters 提供的“常规”版本。

0 投票
0 回答
24 浏览

c++ - 谷歌基准从 double 返回更多的 int divison 时间

我是谷歌基准工具的新手,我正在测试所有的操作时间。请在下面找到我的代码。在这段代码中,我正在测试每个操作(添加/子/mul/div)将在我的硬件上花费多少时间。

我得到了低于结果。

在此处输入图像描述

为什么双除法时间少于 int 除法?正如我得出的结论,这是由于我们在除数时从浮点数转换为整数?

0 投票
0 回答
52 浏览

c++ - 如何在使用谷歌基准运行的一个完整应用程序中对一项功能进行基准测试?

应用程序工作流程是这样的:

在一个完整的应用程序运行过程中,我需要测量process(packet). 在谷歌基准测试中单独调用process(packet)是行不通的,因为进程会改变一些内部数据结构,这会影响下一次process(packet)调用的时间。为每个内部状态制作固定装置似乎也违反直觉。

我如何用谷歌基准做到这一点?

我知道我可以简单地制作一些 ifdefs/flags 并制作测量所用时间的应用程序版本,process(packet)但这会违背谷歌基准测试的目的。我的预期时间process(packet)太小了,大约 200ns。