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

Time:11-16

I have a very simple Google Benchmark program that benchmarks a function taking two integer arguments, I'm trying to use the benchmark to see how exactly does the time the function takes increase as the second argument's value increases from 1 to 100, so with the first argument staying with the same value of 999999 .

The way to achieve this that looked the most logical to me was to use Google Benchmark's Ranges() function like this:

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

The resulting output was this:

-----------------------------------------------------------------------
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

My problem is that it seems Google Benchmark has made the range from only values of an exponential increase from 1 to 100, resulting in only 4 benchmarks of 4 different values for the second parameter, instead of 100 benchmarks of 100 values from 1 to 100 as I expected and wanted.

CodePudding user response:

One of the following should work:

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
    })

Or create your own custom arguments:

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);

Both examples are taken from the User Guide

  • Related