我知道--benchmark_repetitions
标志,但这不是我需要的。我想要能够指定一个基准测试的迭代次数。我可以使用一个--benchmark_iterations
标志,它为所有基准测试设置迭代次数。
我知道Google Benchmark很聪明,能够找出需要多少次迭代才能得到好的测量结果。 对于大多数用例来说,这已经足够了,但我的用例不同。我需要精确地控制迭代次数。
我知道--benchmark_repetitions
标志,但这不是我需要的。我想要能够指定一个基准测试的迭代次数。我可以使用一个--benchmark_iterations
标志,它为所有基准测试设置迭代次数。
我知道Google Benchmark很聪明,能够找出需要多少次迭代才能得到好的测量结果。 对于大多数用例来说,这已经足够了,但我的用例不同。我需要精确地控制迭代次数。
BENCHMARK(YourBenchmark)->Iterations(num_ite);
可以解决这个问题。
您可以为每个基准测试指定迭代次数。
如果您正在使用BENCHMARK_F
,请在构造函数中执行此操作。
class BenchmarkBase : public benchmark::Fixture {
public:
BenchmarkBase() {
Iterations(num_ite);
}
};
它不支持精确调整迭代次数的情况。
正如您所指出的那样,它会一直运行,直到有足够的迭代次数以获得足够好的信号(尽管它还没有实际检查统计数据)。我们曾经有一种设置迭代次数的方法,但与时间相关的标志交互复杂,并且令试图配置其基准测试的人感到困惑,因此它们被删除了。
虽然这是一个经常出现的问题,但如果有一种方法可以同时支持迭代和时间,或者支持迭代但在我们认为结果无意义时也发出警告,那么我愿意考虑它。
自1.8.0版本以来,Google Benchmark现在支持通过命令行直接指定迭代次数。这是通过--benchmark_min_time
选项完成的。只需指定迭代次数后跟x即可。
例如,要运行所有基准测试并每个执行一次迭代:
--benchmark_min_time=1x
Iterations(num_ite)
,但都没有起作用。 - Yixing LiuSetUp()
中并没有起作用,但将其添加到构造函数中 确实 对我有用。 - Russ Tedrake