gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:55:58 26 4
gpt4 key购买 nike

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

std::map<uint32_t, bool> func(Obj& o1, Obj& o2);

基准函数看起来像这样。
static void BM_Func(benchmark::State& state) {

// Prepare the objects o1 and o2
for (auto _ : state)
func(Obj& o1, Obj& o2);
}
BENCHMARK(BM_Func);

BENCHMARK_MAIN();

现在,代码编译了,我可以收集基准测试结果。但是,我有以下问题。
  • 返回值会发生什么?我是否应该被打扰,如果我
    不在基准函数中的任何地方再次使用这些值?
  • 我应该像这样调用函数吗benchmark::DoNotOptimize( func(Obj& o1, Obj& o2) );避免优化?我不太明白何时使用 benchmark::DoNotOptimize 调用函数
  • 最佳答案

    的危险不是 使用 benchmark::DoNotOptimize是编译器可能会意识到 func绝对没有副作用。然后它会正确地断定您的代码等同于 for (auto _ : state) /* do nothing */; .你当然不想测量任何东西。

    使用 benchmark::DoNotOptimize阻止编译器进行上述实现。它别无选择,只能调用func。获取结果对象(尽管同样的考虑适用 - 如果它可以内联 funcfunc 总是返回例如 true ,那么 func 的其余部分可能会得到优化)。

    如果返回的对象很大,那么销毁它可能需要相当长的时间。由于这发生在代码中的基准测试循环内,因此这次将包含在您的基准测试中。避免这种情况是非常重要的,并且该函数的任何“真实”用户也将不得不招致这个时间,所以答案是“这些对象不会发生任何异常情况”。

    关于c++ - 使用 Google 基准测试时返回值会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092688/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com