summaryrefslogtreecommitdiff
path: root/src/mongo/util/decimal_counter_bm.cpp
diff options
context:
space:
mode:
authorBilly Donahue <billy.donahue@mongodb.com>2019-07-08 16:59:45 -0400
committerBilly Donahue <billy.donahue@mongodb.com>2019-07-22 17:07:53 -0400
commitbe18bd1133d6f8118ebb79a2251c4a49b1c84ec1 (patch)
treee5f9fd119eb3938f8315620c01ac6905a37fdd80 /src/mongo/util/decimal_counter_bm.cpp
parent2455e412e3ee165e71ff6403ac33ac2e8f35d823 (diff)
downloadmongo-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.cpp53
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