diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2019-07-08 16:59:45 -0400 |
---|---|---|
committer | Billy Donahue <billy.donahue@mongodb.com> | 2019-07-22 17:07:53 -0400 |
commit | be18bd1133d6f8118ebb79a2251c4a49b1c84ec1 (patch) | |
tree | e5f9fd119eb3938f8315620c01ac6905a37fdd80 /src/mongo/util/decimal_counter_bm.cpp | |
parent | 2455e412e3ee165e71ff6403ac33ac2e8f35d823 (diff) | |
download | mongo-be18bd1133d6f8118ebb79a2251c4a49b1c84ec1.tar.gz |
SERVER-42034 Optimize ItoA (~13% faster, remove the 1kLoC static table)
Diffstat (limited to 'src/mongo/util/decimal_counter_bm.cpp')
-rw-r--r-- | src/mongo/util/decimal_counter_bm.cpp | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/src/mongo/util/decimal_counter_bm.cpp b/src/mongo/util/decimal_counter_bm.cpp index 8507622d1cd..fb0f0cc601e 100644 --- a/src/mongo/util/decimal_counter_bm.cpp +++ b/src/mongo/util/decimal_counter_bm.cpp @@ -37,41 +37,60 @@ namespace mongo { void BM_decimalCounterPreInc(benchmark::State& state) { - DecimalCounter<uint32_t> count; + uint64_t items = 0; for (auto _ : state) { - benchmark::ClobberMemory(); - benchmark::DoNotOptimize(StringData(++count)); + DecimalCounter<uint32_t> count; + for (int i = state.range(0); i--;) { + benchmark::ClobberMemory(); + benchmark::DoNotOptimize(StringData(++count)); + } + items += state.range(0); } + state.SetItemsProcessed(items); } void BM_decimalCounterPostInc(benchmark::State& state) { - DecimalCounter<uint32_t> count; + uint64_t items = 0; for (auto _ : state) { - benchmark::ClobberMemory(); - benchmark::DoNotOptimize(StringData(count++)); + DecimalCounter<uint32_t> count; + for (int i = state.range(0); i--;) { + benchmark::ClobberMemory(); + benchmark::DoNotOptimize(StringData(count++)); + } + items += state.range(0); } + state.SetItemsProcessed(items); } void BM_ItoACounter(benchmark::State& state) { - uint32_t count = 0; + uint64_t items = 0; for (auto _ : state) { - benchmark::ClobberMemory(); - benchmark::DoNotOptimize(StringData(ItoA(++count))); + uint32_t count = 0; + for (int i = state.range(0); i--;) { + benchmark::ClobberMemory(); + benchmark::DoNotOptimize(StringData(ItoA(++count))); + } + items += state.range(0); } + state.SetItemsProcessed(items); } void BM_to_stringCounter(benchmark::State& state) { - uint32_t count = 0; - std::string str; + uint64_t items = 0; for (auto _ : state) { - benchmark::ClobberMemory(); - benchmark::DoNotOptimize(std::to_string(++count)); + uint32_t count = 0; + for (int i = state.range(0); i--;) { + benchmark::ClobberMemory(); + benchmark::DoNotOptimize(std::to_string(++count)); + } + items += state.range(0); } + state.SetItemsProcessed(items); } -BENCHMARK(BM_decimalCounterPreInc); -BENCHMARK(BM_decimalCounterPostInc); -BENCHMARK(BM_ItoACounter); -BENCHMARK(BM_to_stringCounter); +BENCHMARK(BM_decimalCounterPreInc)->Arg(10000); +BENCHMARK(BM_decimalCounterPostInc)->Arg(10000); +BENCHMARK(BM_ItoACounter)->Arg(10000); +BENCHMARK(BM_to_stringCounter)->Arg(10000); } // namespace mongo |