如何更改 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 使范围从 1
到 100
的指数增长值,结果只有 4 个具有 4 个不同值的基准对于第二个参数,而不是像我预期和想要的那样,从 1
到 100
的 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
我有一个非常简单的 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 使范围从 1
到 100
的指数增长值,结果只有 4 个具有 4 个不同值的基准对于第二个参数,而不是像我预期和想要的那样,从 1
到 100
的 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