From 2413b3fd378711cc48e4452bd63198802e7ac92c Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 9 Mar 2022 23:23:44 +0300 Subject: [PATCH] Add unordered_map benchmark. --- tdutils/test/hashset_benchmark.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tdutils/test/hashset_benchmark.cpp b/tdutils/test/hashset_benchmark.cpp index dfcb53d83..68dfb791c 100644 --- a/tdutils/test/hashset_benchmark.cpp +++ b/tdutils/test/hashset_benchmark.cpp @@ -16,6 +16,7 @@ #include "td/utils/Random.h" #include "td/utils/Slice.h" #include "td/utils/Span.h" +#include "td/utils/StringBuilder.h" #include "td/utils/Time.h" #include "td/utils/VectorQueue.h" @@ -263,6 +264,31 @@ static void BM_emplace_same(benchmark::State &state) { } } +template +static void BM_emplace_string(benchmark::State &state) { + td::Random::Xorshift128plus rnd(123); + TableT table; + constexpr std::size_t N = 100000; + constexpr std::size_t BATCH_SIZE = 1024; + reserve(table, N); + + for (std::size_t i = 0; i < N; i++) { + table.emplace(td::to_string(rnd()), i); + } + + table["0"] = 123; + td::vector strings; + for (std::size_t i = 0; i < 16; i++) { + strings.emplace_back(1, static_cast('0' + i)); + } + + while (state.KeepRunningBatch(BATCH_SIZE)) { + for (std::size_t i = 0; i < BATCH_SIZE; i++) { + benchmark::DoNotOptimize(table.emplace(strings[i & 15], 43784932)); + } + } +} + namespace td { template static void table_remove_if(absl::flat_hash_map &table, FunctT &&func) { @@ -590,6 +616,7 @@ using FlatHashMapImpl = td::FlatHashTable, HashT, EqT> #define REGISTER_REMOVE_IF_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_remove_if, HT); #define REGISTER_EMPLACE_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_emplace_same, HT); +#define REGISTER_EMPLACE_STRING_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_emplace_string, HT); #define REGISTER_CACHE_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache, HT); #define REGISTER_CACHE2_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache2, HT); #define REGISTER_CACHE3_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache3, HT)->Range(1, 1 << 23); @@ -603,6 +630,7 @@ FOR_EACH_TABLE(REGISTER_CACHE2_BENCHMARK) FOR_EACH_TABLE(REGISTER_CACHE_BENCHMARK) FOR_EACH_TABLE(REGISTER_REMOVE_IF_BENCHMARK) FOR_EACH_TABLE(REGISTER_EMPLACE_BENCHMARK) +FOR_EACH_TABLE(REGISTER_EMPLACE_STRING_BENCHMARK) FOR_EACH_TABLE(REGISTER_ERASE_ALL_BENCHMARK) FOR_EACH_TABLE(REGISTER_FIND_BENCHMARK) FOR_EACH_TABLE(REGISTER_REMOVE_IF_SLOW_OLD_BENCHMARK)