请教大家关于 google benchmark 的一个问题

2021-08-14 00:09:26 +08:00
 csfreshman

晚上在虚拟机上安装了 google benchmark 运行了一个网上的例子,运行 ok,自己写了一个始终显示都是 0ns 耗时,请求各位大佬分析,哪里有问题?

#include <benchmark/benchmark.h>
#include <vector>

int loop = 100000;
static void bench_vector_reserve(benchmark::State& state)
{
    std::vector<int> ans;
    ans.reserve(loop);
    for(int i = 0;i < loop;i++)
        ans.push_back(i);
}
BENCHMARK(bench_vector_reserve);

static void bench_vector(benchmark::State& state)
{
    std::vector<int> ans;
    for(int i = 0;i < loop;i++)
        ans.push_back(i);
}
BENCHMARK(bench_vector);

BENCHMARK_MAIN();

最近学习 C++了解到 vector 会动态扩容,比如每次空间 double,我上面的例子不管 loop 调多大,运行结果都显示:

[root workspace]#./a.out
2021-08-13T12:00:19-04:00
Running ./a.out
Run on (4 X 1900 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x2)
  L1 Instruction 32 KiB (x2)
  L2 Unified 256 KiB (x2)
  L3 Unified 3072 KiB (x1)
Load Average: 0.02, 0.03, 0.00
---------------------------------------------------------------
Benchmark                     Time             CPU   Iterations
---------------------------------------------------------------
bench_vector_reserve      0.000 ns        0.000 ns            0
bench_vector              0.000 ns        0.000 ns            0
[root workspace]#

有没有帮忙老哥分析一波?

1515 次点击
所在节点    程序员
4 条回复
csfreshman
2021-08-14 00:18:01 +08:00
求各位大佬分析一波,我顶不住了先休息了😝
BiteTheDust
2021-08-14 00:57:30 +08:00
你没看官网文档示例吗,得把你测试的内容放在循环体里。
```
static void BM_StringCreation(benchmark::State& state) {
for (auto _ : state)
std::string empty_string;
}
```
```
static void bench_vector_reserve(benchmark::State& state)
{
for (auto _ : state)
{
std::vector<int> ans;
ans.reserve(loop);
for(int i = 0;i < loop;i++)
ans.push_back(i);
}
}
```
c0xt30a
2021-08-14 03:50:37 +08:00
看起来是被优化掉了
csfreshman
2021-08-15 16:29:15 +08:00
@BiteTheDust 多谢,看了源代码的例子,按照你说的这种写法确实能跑起来,感谢老铁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795699

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX