首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google/benchmark结果不一致

Google/benchmark结果不一致
EN

Stack Overflow用户
提问于 2018-08-29 19:23:10
回答 2查看 852关注 0票数 1

我刚开始使用谷歌基准测试,当在本地运行代码与在Quick-Bench.com上运行代码时,运行相同的基准测试(如下所示)时,我会收到不同的结果,该基准测试使用C++检索本地时间。两次我都使用了GCC 8.2和-O3。

为什么在本地运行与在quick-bench.com上运行结果会有很大的不同?哪一个是正确的?

代码语言:javascript
复制
#include <benchmark/benchmark.h>
#include <ctime>      
#include <sys/time.h> 
#include <chrono>     


static void BM_ctime(benchmark::State& state) {
  unsigned long long count = 0;

  for (auto _ : state) {
    std::time_t sec = std::time(0);  

    benchmark::DoNotOptimize(count += sec);
  }
}

BENCHMARK(BM_ctime);


static void BM_sysTime(benchmark::State& state) {
  unsigned long long count = 0;

  for (auto _ : state) {
    unsigned long sec = time(NULL);

    benchmark::DoNotOptimize(count += sec);
  }
}

BENCHMARK(BM_sysTime);


static void BM_chronoMilliseconds(benchmark::State& state) {
  unsigned long long count = 0;

  for (auto _ : state) {
    unsigned long long ms = std::chrono::duration_cast<std::chrono::milliseconds>(
      std::chrono::system_clock::now().time_since_epoch()
    ).count();

    benchmark::DoNotOptimize(count += ms);
  }
}

BENCHMARK(BM_chronoMilliseconds);

static void BM_chronoSececonds(benchmark::State& state) {
  unsigned long long count = 0;

  for (auto _ : state) {
    unsigned long long sec = std::chrono::duration_cast<std::chrono::seconds>(
      std::chrono::system_clock::now().time_since_epoch()
    ).count();

    benchmark::DoNotOptimize(count += sec);
  }
}

BENCHMARK(BM_chronoSececonds);

在本地产生以下结果:

代码语言:javascript
复制
-------------------------------------------------------------
Benchmark                      Time           CPU Iterations
-------------------------------------------------------------
BM_ctime                     183 ns        175 ns    4082013
BM_sysTime                   197 ns        179 ns    4004829
BM_chronoMilliseconds         37 ns         36 ns   19092506
BM_chronoSececonds            37 ns         36 ns   19057991

QuickBench结果:

EN

回答 2

Stack Overflow用户

发布于 2018-08-29 21:13:07

基准测试结果与平台/架构/机器相关。当你在同一台机器上运行它们时,假设你的基准测试总是相同的,这甚至是不现实的,温度,性能缩放选项,损耗等因素都会影响性能。

票数 1
EN

Stack Overflow用户

发布于 2020-04-17 20:28:55

我只是在我的机器上运行你的例子,我看到了下面的结果:

代码语言:javascript
复制
----------------------------------------------------------------
Benchmark                      Time             CPU   Iterations
----------------------------------------------------------------
BM_ctime                    3.26 ns         3.25 ns    215110555
BM_sysTime                  3.26 ns         3.25 ns    215154791
BM_chronoMilliseconds       2502 ns         2502 ns       279856
BM_chronoSececonds          2502 ns         2501 ns       279854

假设一条NOP指令占用1个时钟周期,在我的系统上是0.5 ns,那么CPU time / NoOp time的比率大约是5000

然而,我不应该真的担心,因为至少对我来说,这不是基准的意思。将我系统上的值与Quick bench中的值进行比较是没有意义的。相反,我使用基准值来比较同一台机器上的不同实现或算法,从而消除了这些疑虑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52076296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档