如何更改 Google 基准 'Range()' 函数的增量或步长或比例

How to change the increment or step or scale of a Google Benchmark 'Range()' function

我有一个非常简单的 Google 基准测试程序,它对采用两个整数参数的函数进行基准测试,我正在尝试使用该基准测试来查看函数所花费的时间究竟是如何随着第二个参数的值而增加的从 1 增加到 100,因此第一个参数保持 999999 的相同值。

在我看来最合乎逻辑的实现方式是使用 Google Benchmark 的 Ranges() 函数,如下所示:

// registering function 'largestDivisorOdd' as a benchmark
BENCHMARK(largestDivisorOdd) ->Ranges( { {999999, 999999}, {1,100} } );

结果输出是这样的:

-----------------------------------------------------------------------
Benchmark                             Time             CPU   Iterations
-----------------------------------------------------------------------
largestDivisorOdd/999999/1          116 ns          116 ns      6018141
largestDivisorOdd/999999/8          205 ns          205 ns      3485489
largestDivisorOdd/999999/64        2715 ns         2715 ns       260611
largestDivisorOdd/999999/100       2710 ns         2710 ns       256160

我的问题是,似乎 Google Benchmark 使范围从 1100 的指数增长值,结果只有 4 个具有 4 个不同值的基准对于第二个参数,而不是像我预期和想要的那样,从 1100 的 100 个值的 100 个基准。

以下其中一项应该有效:

BENCHMARK(largestDivisorOdd)
    ->ArgsProduct({
      benchmark::CreateRange(999999, 999999, /*multi=*/2), // This is probably not what you want
      benchmark::CreateDenseRange(1, 100, /*step=*/1) // This creates a DenseRange from 1 to 100
    })

或创建您自己的自定义参数:

static void CustomArguments(benchmark::internal::Benchmark* b) {
  for (int i = 999999; i <= 999999; ++i)
    for (int j = 1; j <= 100; j++)
      b->Args({i, j});
}
BENCHMARK(BM_SetInsert)->Apply(CustomArguments);

两个例子都来自User Guide