2

I have this minimal example of Google Benchmark usage. The weird thing is that "42" is printed a number of times (4), not just once. I understand that the library has to run things several times to gain statistics but this I though that this is handled by the statie-loop itself.

This is a minimal example of something more complicated where I wanted to print (outside the loop) the result to verify that different implementations of the same function would give the same result.

#include <benchmark/benchmark.h>
#include<iostream>

#include <thread> //sleep for

int SomeFunction(){
    using namespace std::chrono_literals;
    std::this_thread::sleep_for(10ms);
    return 42;
}

static void BM_SomeFunction(benchmark::State& state) {
  // Perform setup here
  int result = -1;
  for (auto _ : state) {
    // This code gets timed
    result = SomeFunction();
    benchmark::DoNotOptimize(result);
  }
  std::cout<< result <<std::endl;
}
// Register the function as a benchmark
BENCHMARK(BM_SomeFunction);

// Run the benchmark
BENCHMARK_MAIN();

output: (42 is printed 4 times, why more than once, why 4?)

Running ./a.out
Run on (12 X 4600 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x6)
  L1 Instruction 32 KiB (x6)
  L2 Unified 256 KiB (x6)
  L3 Unified 12288 KiB (x1)
Load Average: 0.30, 0.65, 0.79
42
42
42
42
----------------------------------------------------------
Benchmark                Time             CPU   Iterations
----------------------------------------------------------
BM_SomeFunction   10243011 ns        11051 ns         1000

How else could I test (at least visually) that different benchmarking blocks give the same answer?

alfC
  • 14,261
  • 4
  • 67
  • 118

0 Answers0