-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Description
Describe the bug
When using counters that represent a rate (benchmark::Counter::kIsRate), the rate appears to be computed per thread. Subsequently, when using kAvgThreadsRate, the rate is computed per thread and then divided by the number of threads (again). This is misleading.
System
OS
ProductName: macOS
ProductVersion: 15.6.1
BuildVersion: 24G90
Compiler
Apple clang version 17.0.0 (clang-1700.0.13.5)
Target: arm64-apple-darwin24.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Library
FetchContent_Declare(
benchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG v1.9.4
)
To reproduce
Write a benchmark that simply sleeps for 1 second, then increments a counter by 1. With 1 thread, we expect a counter of 1, and a rate of 1/s. With 10 threads, we expect a counter of 10 and a rate of 10/s. However, the rate is reported as 1/s and the per-thread rate as 0.1/s. This seems wrong?
static void BM_IntegerAddition(benchmark::State& state) {
for (auto _ : state) {
std::this_thread::sleep_for(std::chrono::seconds(1));
benchmark::DoNotOptimize(1 + 2);
}
state.counters["counter"] = benchmark::Counter(1);
state.counters["counter_rate"] = benchmark::Counter(1, benchmark::Counter::kIsRate);
state.counters["counter_thread_rate"] = benchmark::Counter(1, benchmark::Counter::kAvgThreadsRate);
}
BENCHMARK(BM_IntegerAddition)
->Threads(1)
->Threads(10)
->Iterations(1)
->UseRealTime();---------------------------------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
---------------------------------------------------------------------------------------------------------------
BM_IntegerAddition/iterations:1/real_time/threads:1 1005048541 ns 29000 ns 1 counter=1 counter_rate=0.994977/s counter_thread_rate=0.994977/s
BM_IntegerAddition/iterations:1/real_time/threads:10 1002581584 ns 36300 ns 10 counter=10 counter_rate=0.997425/s counter_thread_rate=0.0997425/s
Expected behavior
---------------------------------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
---------------------------------------------------------------------------------------------------------------
BM_IntegerAddition/iterations:1/real_time/threads:1 1005048541 ns 29000 ns 1 counter=1 counter_rate=0.994977/s counter_thread_rate=0.994977/s
BM_IntegerAddition/iterations:1/real_time/threads:10 1002581584 ns 36300 ns 10 counter=10 counter_rate=9.97425/s counter_thread_rate=0.997425/s
Metadata
Metadata
Assignees
Labels
No labels