Fix HashSet benchmark.

This commit is contained in:
levlam 2022-02-11 11:26:58 +03:00
parent 1a3adc3ee7
commit 6ae2096d68
3 changed files with 26 additions and 29 deletions

View File

@ -74,17 +74,16 @@ if (NOT WIN32 AND NOT CYGWIN)
endif() endif()
find_package(ABSL QUIET) find_package(ABSL QUIET)
find_package(gflags QUIET)
find_package(folly QUIET) find_package(folly QUIET)
if (ABSL_FOUND AND gflags_FOUND AND folly_FOUND) if (ABSL_FOUND AND folly_FOUND)
add_executable(memory-hashset-memprof EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/hashset_memory.cpp) add_executable(memory-hashset-memprof EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/hashset_memory.cpp)
target_compile_definitions(memory-hashset-memprof PRIVATE USE_MEMPROF=1) target_compile_definitions(memory-hashset-memprof PRIVATE USE_MEMPROF=1)
target_link_libraries(memory-hashset-memprof PRIVATE tdutils memprof_stat) target_link_libraries(memory-hashset-memprof PRIVATE tdutils memprof_stat)
target_link_libraries(memory-hashset-memprof PRIVATE SYSTEM Folly::folly absl::flat_hash_map absl::hash) target_link_libraries(memory-hashset-memprof PRIVATE Folly::folly absl::flat_hash_map absl::hash)
add_executable(memory-hashset-os ${CMAKE_CURRENT_SOURCE_DIR}/hashset_memory.cpp) add_executable(memory-hashset-os ${CMAKE_CURRENT_SOURCE_DIR}/hashset_memory.cpp)
target_compile_definitions(memory-hashset-os PRIVATE USE_MEMPROF=0) target_compile_definitions(memory-hashset-os PRIVATE USE_MEMPROF=0)
target_link_libraries(memory-hashset-os PRIVATE tdutils) target_link_libraries(memory-hashset-os PRIVATE tdutils)
target_link_libraries(memory-hashset-os PRIVATE SYSTEM Folly::folly absl::flat_hash_map absl::hash) target_link_libraries(memory-hashset-os PRIVATE Folly::folly absl::flat_hash_map absl::hash)
endif() endif()

View File

@ -356,7 +356,7 @@ if (CRC32C_FOUND)
target_link_libraries(tdutils PRIVATE crc32c) target_link_libraries(tdutils PRIVATE crc32c)
endif() endif()
if (ABSL_FOUND) if (ABSL_FOUND)
target_link_libraries(tdutils PUBLIC SYSTEM absl::flat_hash_map absl::flat_hash_set absl::hash) target_link_libraries(tdutils PUBLIC absl::flat_hash_map absl::flat_hash_set absl::hash)
endif() endif()
if (WIN32) if (WIN32)
@ -388,11 +388,10 @@ install(TARGETS tdutils EXPORT TdTargets
) )
find_package(benchmark QUIET) find_package(benchmark QUIET)
find_package(gflags QUIET)
find_package(folly QUIET) find_package(folly QUIET)
if (ABSL_FOUND AND benchmark_FOUND AND gflags_FOUND AND folly_FOUND) if (ABSL_FOUND AND benchmark_FOUND AND folly_FOUND)
add_executable(benchmark-hashset ${CMAKE_CURRENT_SOURCE_DIR}/test/hashset_benchmark.cpp) add_executable(benchmark-hashset ${CMAKE_CURRENT_SOURCE_DIR}/test/hashset_benchmark.cpp)
target_link_libraries(benchmark-hashset PRIVATE tdutils) target_link_libraries(benchmark-hashset PRIVATE tdutils)
target_link_libraries(benchmark-hashset PRIVATE SYSTEM benchmark::benchmark Folly::folly absl::flat_hash_map absl::hash) target_link_libraries(benchmark-hashset PRIVATE benchmark::benchmark Folly::folly absl::flat_hash_map absl::hash)
endif() endif()

View File

@ -360,7 +360,7 @@ static void BM_cache3(benchmark::State &state) {
table.emplace(key, i); table.emplace(key, i);
for (size_t j = 1; j < step; j++) { for (size_t j = 1; j < step; j++) {
auto key_to_find = keys.data()[rnd()%keys.size()]; auto key_to_find = keys.data()[rnd() % keys.size()];
benchmark::DoNotOptimize(table.find(key_to_find)); benchmark::DoNotOptimize(table.find(key_to_find));
} }
@ -382,10 +382,14 @@ static void BM_remove_if_slow(benchmark::State &state) {
table.emplace(rnd() + 1, i); table.emplace(rnd() + 1, i);
if (table.size() > N) { if (table.size() > N) {
size_t cnt = 0; size_t cnt = 0;
td::table_remove_if(table, [&cnt](auto &) { cnt += 2; return cnt <= N; }); td::table_remove_if(table, [&cnt, n = N](auto &) {
cnt += 2;
return cnt <= n;
});
} }
} }
}} }
}
template <typename TableT> template <typename TableT>
static void benchmark_create(td::Slice name) { static void benchmark_create(td::Slice name) {
@ -427,27 +431,26 @@ static void benchmark_create(td::Slice name) {
F(std::unordered_map) \ F(std::unordered_map) \
F(std::map) F(std::map)
//BENCHMARK(BM_Get<VectorTable<td::uint64, td::uint64>>)->Range(1, 1 << 26); //BENCHMARK_TEMPLATE(BM_Get, VectorTable<td::uint64, td::uint64>)->Range(1, 1 << 26);
//BENCHMARK(BM_Get<SortedVectorTable<td::uint64, td::uint64>>)->Range(1, 1 << 26); //BENCHMARK_TEMPLATE(BM_Get, SortedVectorTable<td::uint64, td::uint64>)->Range(1, 1 << 26);
//BENCHMARK(BM_Get<NoOpTable<td::uint64, td::uint64>>)->Range(1, 1 << 26); //BENCHMARK_TEMPLATE(BM_Get, NoOpTable<td::uint64, td::uint64>)->Range(1, 1 << 26);
#define REGISTER_GET_BENCHMARK(HT) BENCHMARK(BM_Get<HT<td::uint64, td::uint64>>)->Range(1, 1 << 23); #define REGISTER_GET_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_Get, HT<td::uint64, td::uint64>)->Range(1, 1 << 23);
#define REGISTER_FIND_BENCHMARK(HT) \ #define REGISTER_FIND_BENCHMARK(HT) \
BENCHMARK(BM_find_same<HT<td::uint64, td::uint64>>) \ BENCHMARK_TEMPLATE(BM_find_same, HT<td::uint64, td::uint64>) \
->ComputeStatistics("max", [](const td::vector<double> &v) { return *std::max_element(v.begin(), v.end()); }) \ ->ComputeStatistics("max", [](const td::vector<double> &v) { return *std::max_element(v.begin(), v.end()); }) \
->ComputeStatistics("min", [](const td::vector<double> &v) { return *std::min_element(v.begin(), v.end()); }) \ ->ComputeStatistics("min", [](const td::vector<double> &v) { return *std::min_element(v.begin(), v.end()); }) \
->Repetitions(20) \ ->Repetitions(20) \
->DisplayAggregatesOnly(true); ->DisplayAggregatesOnly(true);
#define REGISTER_REMOVE_IF_BENCHMARK(HT) BENCHMARK(BM_remove_if<HT<td::uint64, td::uint64>>); #define REGISTER_REMOVE_IF_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_remove_if, HT<td::uint64, td::uint64>);
#define REGISTER_EMPLACE_BENCHMARK(HT) BENCHMARK(BM_emplace_same<HT<td::uint64, td::uint64>>); #define REGISTER_EMPLACE_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_emplace_same, HT<td::uint64, td::uint64>);
#define REGISTER_CACHE_BENCHMARK(HT) BENCHMARK(BM_cache<HT<td::uint64, td::uint64>>); #define REGISTER_CACHE_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache, HT<td::uint64, td::uint64>);
#define REGISTER_CACHE2_BENCHMARK(HT) BENCHMARK(BM_cache2<HT<td::uint64, td::uint64>>); #define REGISTER_CACHE2_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache2, HT<td::uint64, td::uint64>);
#define REGISTER_CACHE3_BENCHMARK(HT) BENCHMARK(BM_cache3<HT<td::uint64, td::uint64>>)->Range(1, 1 << 23); #define REGISTER_CACHE3_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_cache3, HT<td::uint64, td::uint64>)->Range(1, 1 << 23);
#define REGISTER_ERASE_ALL_BENCHMARK(HT) BENCHMARK(BM_erase_all_with_begin<HT<td::uint64, td::uint64>>); #define REGISTER_ERASE_ALL_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_erase_all_with_begin, HT<td::uint64, td::uint64>);
#define REGISTER_REMOVE_IF_SLOW_BENCHMARK(HT) BENCHMARK(BM_remove_if_slow<HT<td::uint64, td::uint64>>); #define REGISTER_REMOVE_IF_SLOW_BENCHMARK(HT) BENCHMARK_TEMPLATE(BM_remove_if_slow, HT<td::uint64, td::uint64>);
FOR_EACH_TABLE(REGISTER_CACHE3_BENCHMARK) FOR_EACH_TABLE(REGISTER_CACHE3_BENCHMARK)
FOR_EACH_TABLE(REGISTER_CACHE_BENCHMARK) FOR_EACH_TABLE(REGISTER_CACHE_BENCHMARK)
@ -460,12 +463,8 @@ FOR_EACH_TABLE(REGISTER_EMPLACE_BENCHMARK)
FOR_EACH_TABLE(REGISTER_GET_BENCHMARK) FOR_EACH_TABLE(REGISTER_GET_BENCHMARK)
FOR_EACH_TABLE(REGISTER_FIND_BENCHMARK) FOR_EACH_TABLE(REGISTER_FIND_BENCHMARK)
#define REGISTER_(X) BENCHMARK(X<HT<td::uint64, td:uint64>);
#define REGISTER(X) FOR_EACH_TABLE(REGISTER_(X))
#define RUN_CREATE_BENCHMARK(HT) benchmark_create<HT<td::uint64, td::uint64>>(#HT); #define RUN_CREATE_BENCHMARK(HT) benchmark_create<HT<td::uint64, td::uint64>>(#HT);
int main(int argc, char **argv) { int main(int argc, char **argv) {
// FOR_EACH_TABLE(RUN_CREATE_BENCHMARK); // FOR_EACH_TABLE(RUN_CREATE_BENCHMARK);