如何在 Google Benchmark 中特殊处理迭代次数?

11

我知道--benchmark_repetitions标志,但这不是我需要的。我想要能够指定一个基准测试的迭代次数。我可以使用一个--benchmark_iterations 标志,它为所有基准测试设置迭代次数。

我知道Google Benchmark很聪明,能够找出需要多少次迭代才能得到好的测量结果。 对于大多数用例来说,这已经足够了,但我的用例不同。我需要精确地控制迭代次数。

3个回答

10

BENCHMARK(YourBenchmark)->Iterations(num_ite);可以解决这个问题。

您可以为每个基准测试指定迭代次数。

如果您正在使用BENCHMARK_F,请在构造函数中执行此操作。

class BenchmarkBase : public benchmark::Fixture {
public:

    BenchmarkBase() {
        Iterations(num_ite);
    }
};

或者 benchmark::RegisterBenchmark(...) -> Iterations(num_ite) 用于自定义 main() 函数的基准测试。 - mcandre
我尝试在构造函数或SetUp()中添加Iterations(num_ite),但都没有起作用。 - Yixing Liu
顺便说一句 - 将它添加到 SetUp() 中并没有起作用,但将其添加到构造函数中 确实 对我有用。 - Russ Tedrake

2

它不支持精确调整迭代次数的情况。

正如您所指出的那样,它会一直运行,直到有足够的迭代次数以获得足够好的信号(尽管它还没有实际检查统计数据)。我们曾经有一种设置迭代次数的方法,但与时间相关的标志交互复杂,并且令试图配置其基准测试的人感到困惑,因此它们被删除了。

虽然这是一个经常出现的问题,但如果有一种方法可以同时支持迭代和时间,或者支持迭代但在我们认为结果无意义时也发出警告,那么我愿意考虑它。


1

自1.8.0版本以来,Google Benchmark现在支持通过命令行直接指定迭代次数。这是通过--benchmark_min_time选项完成的。只需指定迭代次数后跟x即可。

例如,要运行所有基准测试并每个执行一次迭代:

--benchmark_min_time=1x

改动在这里进行:https://github.com/google/benchmark/pull/1525


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接