mirror of
https://github.com/google/benchmark.git
synced 2024-12-28 05:20:14 +08:00
45b194e4d4
* Introduce Coefficient of variation aggregate I believe, it is much more useful / use to understand, because it is already normalized by the mean, so it is not affected by the duration of the benchmark, unlike the standard deviation. Example of real-world output: ``` raw.pixls.us-unique/GoPro/HERO6 Black$ ~/rawspeed/build-old/src/utilities/rsbench/rsbench GOPR9172.GPR --benchmark_repetitions=27 --benchmark_display_aggregates_only=true --benchmark_counters_tabular=true 2021-09-03T18:05:56+03:00 Running /home/lebedevri/rawspeed/build-old/src/utilities/rsbench/rsbench Run on (32 X 3596.16 MHz CPU s) CPU Caches: L1 Data 32 KiB (x16) L1 Instruction 32 KiB (x16) L2 Unified 512 KiB (x16) L3 Unified 32768 KiB (x2) Load Average: 7.00, 2.99, 1.85 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Benchmark Time CPU Iterations CPUTime,s CPUTime/WallTime Pixels Pixels/CPUTime Pixels/WallTime Raws/CPUTime Raws/WallTime WallTime,s ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ GOPR9172.GPR/threads:32/process_time/real_time_mean 11.1 ms 353 ms 27 0.353122 31.9473 12M 33.9879M 1085.84M 2.83232 90.4864 0.0110535 GOPR9172.GPR/threads:32/process_time/real_time_median 11.0 ms 352 ms 27 0.351696 31.9599 12M 34.1203M 1090.11M 2.84336 90.8425 0.0110081 GOPR9172.GPR/threads:32/process_time/real_time_stddev 0.159 ms 4.60 ms 27 4.59539m 0.0462064 0 426.371k 14.9631M 0.0355309 1.24692 158.944u GOPR9172.GPR/threads:32/process_time/real_time_cv 1.44 % 1.30 % 27 0.0130136 1.44633m 0 0.0125448 0.0137802 0.0125448 0.0137802 0.0143795 ``` Fixes https://github.com/google/benchmark/issues/1146 * Be consistent, it's CV, not 'rel std dev'
46 lines
1.7 KiB
C++
46 lines
1.7 KiB
C++
|
|
#undef NDEBUG
|
|
#include <cstdio>
|
|
#include <string>
|
|
|
|
#include "benchmark/benchmark.h"
|
|
#include "output_test.h"
|
|
|
|
// Ok this test is super ugly. We want to check what happens with the file
|
|
// reporter in the presence of DisplayAggregatesOnly().
|
|
// We do not care about console output, the normal tests check that already.
|
|
|
|
void BM_SummaryRepeat(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
}
|
|
}
|
|
BENCHMARK(BM_SummaryRepeat)->Repetitions(3)->DisplayAggregatesOnly();
|
|
|
|
int main(int argc, char* argv[]) {
|
|
const std::string output = GetFileReporterOutput(argc, argv);
|
|
|
|
if (SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3") != 7 ||
|
|
SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3\"") != 3 ||
|
|
SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3_mean\"") != 1 ||
|
|
SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3_median\"") !=
|
|
1 ||
|
|
SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3_stddev\"") !=
|
|
1 ||
|
|
SubstrCnt(output, "\"name\": \"BM_SummaryRepeat/repeats:3_cv\"") != 1) {
|
|
std::cout << "Precondition mismatch. Expected to only find 8 "
|
|
"occurrences of \"BM_SummaryRepeat/repeats:3\" substring:\n"
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3_mean\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3_median\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3_stddev\", "
|
|
"\"name\": \"BM_SummaryRepeat/repeats:3_cv\"\nThe entire "
|
|
"output:\n";
|
|
std::cout << output;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|