Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 谷歌基准代码设置_C++_Google Benchmark - Fatal编程技术网

C++ 谷歌基准代码设置

C++ 谷歌基准代码设置,c++,google-benchmark,C++,Google Benchmark,给定以下代码 #include <benchmark/benchmark.h> #include <iostream> static void BM_foo(benchmark::State& state) { std::cout << "Foo "<< std::endl; for (auto _: state) { std::cout << state.iterations() << " I

给定以下代码

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

static void BM_foo(benchmark::State& state) {
  std::cout << "Foo "<< std::endl;
  for (auto _: state) {
    std::cout <<  state.iterations()  << " In loop " <<std::endl;
  }
}

BENCHMARK(BM_foo);

BENCHMARK_MAIN();
问题:

  • 我是否必须在这里使用全局变量DBConnection,以便每个线程都可以访问它
  • 假设“DBSession*session=conn.openSession();”可以在“conn真正设置好”之前执行,并且我也不想每次都对openSession进行基准测试,我该如何解决这个问题
  • 所以我总共有4个问题,分为两部分,如果你对我的代码有更多的建议,那会更好。谢谢

  • 我们多次运行整个基准测试,以找到要运行的最佳迭代次数,但是每个基准测试运行只运行一次序言。你做得对

  • 如果需要,您需要自己跟踪迭代。然而,如果你这样做了,那么你的基准测试可能与迭代次数无关,迭代次数是动态确定的。如果您想要固定的迭代次数,您应该查看
    State::KeepRunningBatch


  • 具有全局工作的连接,或夹具的静态成员

  • 我会添加一个显式的等待,等待在每个线程上建立连接。在打开会话之前,某种类型的
    conn.IsReady()
    处于循环中


  • 它看起来很像你需要的是一个评测库,而不是一个miro benchamraking库“std::我们是否可以多次调用整个基准函数,用不同的迭代计数控制内部循环。如果您的内部循环更昂贵,您将看到Foo打印的次数更少,因为我们可以更快地达到最低运行时间。它按预期工作。@dma:如果序言也很昂贵,我不想花时间重新运行它怎么办?如何确保序言只运行一次?
    DBConnection* conn; // global variables, so that each thread can run access it.
    
    static void BM_db_insert(benchmark::State& state) {
      if (state.thread_index == 0) {
        # only let 1 thread to setup the DBConnections
        conn = openDBConn();
      }
      DBSession* session = conn.openSession();
      for (auto _ : state) {
        session.insertOp(id, ..); 
      }
      session.close();
      if (state.thread_index == 0) {
        conn.close();
      }
    }