#include #include #include #include #include #include namespace { template void RunLookupPositiveScalarKeysBench(::NBench::NCpu::TParams& iface, Args&&... args) { using key_type = i32; static_assert(std::is_same_v); Map hm(std::forward(args)...); TVector keys(elemCount); for (auto& k : keys) { k = RandomNumber(std::numeric_limits::max()); hm.emplace(k, 0); } for (const auto i : xrange(iface.Iterations())) { Y_UNUSED(i); for (const auto& k : keys) { Y_DO_NOT_OPTIMIZE_AWAY(hm[k]); } } } constexpr size_t TEST1_ELEM_COUNT = 10; constexpr size_t TEST2_ELEM_COUNT = 1000; constexpr size_t TEST3_ELEM_COUNT = 1000000; } /* *********************************** TEST1 *********************************** * Insert TEST1_ELEM_COUNT positive integers and than make lookup. * No init size provided for tables. * key_type - i32 */ Y_CPU_BENCHMARK(Test1_fh_TFlatHashMap_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, TEST1_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test1_fh_TFlatHashMap_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST1_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test1_fh_TFlatHashMap_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TDenseProbing>, TEST1_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test1_fh_TDenseHashMapStaticMarker_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TLinearProbing>, TEST1_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test1_fh_TDenseHashMapStaticMarker_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST1_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test1_fh_TDenseHashMapStaticMarker_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, TEST1_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test1_foreign_TDenseHash, iface) { RunLookupPositiveScalarKeysBench, TEST1_ELEM_COUNT>(iface, (i32)-1); } Y_CPU_BENCHMARK(Test1_foreign_THashMap, iface) { RunLookupPositiveScalarKeysBench, TEST1_ELEM_COUNT>(iface); } /* *********************************** TEST2 *********************************** * Insert TEST2_ELEM_COUNT positive integers and than make lookup. * No init size provided for tables. * key_type - i32 */ Y_CPU_BENCHMARK(Test2_fh_TFlatHashMap_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, TEST2_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test2_fh_TFlatHashMap_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST2_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test2_fh_TFlatHashMap_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TDenseProbing>, TEST2_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test2_fh_TDenseHashMapStaticMarker_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TLinearProbing>, TEST2_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test2_fh_TDenseHashMapStaticMarker_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST2_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test2_fh_TDenseHashMapStaticMarker_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, TEST2_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test2_foreign_TDenseHash, iface) { RunLookupPositiveScalarKeysBench, TEST2_ELEM_COUNT>(iface, (i32)-1); } Y_CPU_BENCHMARK(Test2_foreign_THashMap, iface) { RunLookupPositiveScalarKeysBench, TEST2_ELEM_COUNT>(iface); } /* *********************************** TEST3 *********************************** * Insert TEST2_ELEM_COUNT positive integers and than make lookup. * No init size provided for tables. * key_type - i32 */ Y_CPU_BENCHMARK(Test3_fh_TFlatHashMap_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, TEST3_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test3_fh_TFlatHashMap_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST3_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test3_fh_TFlatHashMap_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TDenseProbing>, TEST3_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test3_fh_TDenseHashMapStaticMarker_LinearProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TLinearProbing>, TEST3_ELEM_COUNT>(iface); } /* Y_CPU_BENCHMARK(Test3_fh_TDenseHashMapStaticMarker_QuadraticProbing, iface) { RunLookupPositiveScalarKeysBench, std::equal_to, NFlatHash::TQuadraticProbing>, TEST3_ELEM_COUNT>(iface); } */ Y_CPU_BENCHMARK(Test3_fh_TDenseHashMapStaticMarker_DenseProbing, iface) { RunLookupPositiveScalarKeysBench, TEST3_ELEM_COUNT>(iface); } Y_CPU_BENCHMARK(Test3_foreign_TDenseHash, iface) { RunLookupPositiveScalarKeysBench, TEST3_ELEM_COUNT>(iface, (i32)-1); } Y_CPU_BENCHMARK(Test3_foreign_THashMap, iface) { RunLookupPositiveScalarKeysBench, TEST3_ELEM_COUNT>(iface); }