# Parallel hashmap benchmarks ## Benchmarks TBW ## Detailed results ### Folder * `gcc-x64`: GCC 11, x64 * `clang-x64`: Clang 12, x64 * `vs-x64`: Visual Studio 2019, x64 * `clang-arm64`: Clang 12 ARM64 * `gcc-x86`: GCC 11, x86 * `clang-x86`: Clang 12, x86 * `vs-x86`: Visual Studio 2019, x86 ## Summary results ### GCC 11, x64 ``` main.cpp Number of threads: 16 boost::unordered_flat_map, single threaded: 8614 ms boost::unordered_flat_map, single threaded, shared_mutex: 12495 ms boost::unordered_flat_map, single threaded, rw_spinlock: 9428 ms concurrent_foa, single threaded: 13076 ms concurrent_foa, tbb::spin_rw_mutex, single threaded: 13117 ms concurrent_foa, std::shared_mutex, single threaded: 16436 ms tbb::concurrent_hash_map, single threaded: 22712 ms boost::unordered_flat_map, sharded_prehashed: 6695 ms boost::unordered_flat_map, sharded_prehashed: 13536 ms boost::unordered_flat_map, sharded_prehashed: 7520 ms boost::unordered_flat_map, sharded isolated, prehashed: 7778 ms concurrent foa: 4638 ms concurrent foa, tbb::spin_rw_mutex: 4904 ms concurrent foa, std::shared_mutex: 5011 ms tbb::concurrent_hash_map: 7464 ms gtl::parallel_flat_hash_map: 6696 ms gtl::parallel_flat_hash_map: 35428 ms gtl::parallel_flat_hash_map: 9691 ms ``` ### Clang 12, x64 ``` main.cpp Number of threads: 16 boost::unordered_flat_map, single threaded: 9198 ms boost::unordered_flat_map, single threaded, shared_mutex: 12989 ms boost::unordered_flat_map, single threaded, rw_spinlock: 10287 ms concurrent_foa, single threaded: 12574 ms concurrent_foa, tbb::spin_rw_mutex, single threaded: 12533 ms concurrent_foa, std::shared_mutex, single threaded: 14659 ms tbb::concurrent_hash_map, single threaded: 23231 ms boost::unordered_flat_map, sharded_prehashed: 6662 ms boost::unordered_flat_map, sharded_prehashed: 11109 ms boost::unordered_flat_map, sharded_prehashed: 7316 ms boost::unordered_flat_map, sharded isolated, prehashed: 7575 ms concurrent foa: 4888 ms concurrent foa, tbb::spin_rw_mutex: 4604 ms concurrent foa, std::shared_mutex: 5049 ms tbb::concurrent_hash_map: 7716 ms gtl::parallel_flat_hash_map: 8266 ms gtl::parallel_flat_hash_map: 24839 ms gtl::parallel_flat_hash_map: 12725 ms ``` ### Visual Studio 2019, x64 ### Clang 12, ARM64 ``` main.cpp Number of threads: 8 boost::unordered_flat_map, single threaded: 5675 ms boost::unordered_flat_map, single threaded, shared_mutex: 10249 ms boost::unordered_flat_map, single threaded, rw_spinlock: 6047 ms concurrent_foa, single threaded: 7302 ms concurrent_foa, tbb::spin_rw_mutex, single threaded: 7412 ms concurrent_foa, std::shared_mutex, single threaded: 11663 ms tbb::concurrent_hash_map, single threaded: 17471 ms boost::unordered_flat_map, sharded_prehashed: 5493 ms boost::unordered_flat_map, sharded_prehashed: 11429 ms boost::unordered_flat_map, sharded_prehashed: 3445 ms boost::unordered_flat_map, sharded isolated, prehashed: 4789 ms concurrent foa: 3814 ms concurrent foa, tbb::spin_rw_mutex: 3639 ms concurrent foa, std::shared_mutex: 4633 ms tbb::concurrent_hash_map: 5347 ms gtl::parallel_flat_hash_map: 6156 ms gtl::parallel_flat_hash_map: 11457 ms gtl::parallel_flat_hash_map: 3696 ms ``` ### GCC 11, x86 ``` main.cpp Number of threads: 16 boost::unordered_flat_map, single threaded: 959 ms boost::unordered_flat_map, single threaded, shared_mutex: 1439 ms boost::unordered_flat_map, single threaded, rw_spinlock: 1152 ms concurrent_foa, single threaded: 1477 ms concurrent_foa, tbb::spin_rw_mutex, single threaded: 1478 ms concurrent_foa, std::shared_mutex, single threaded: 1759 ms tbb::concurrent_hash_map, single threaded: 2277 ms boost::unordered_flat_map, sharded_prehashed: 851 ms boost::unordered_flat_map, sharded_prehashed: 1447 ms boost::unordered_flat_map, sharded_prehashed: 692 ms boost::unordered_flat_map, sharded isolated, prehashed: 806 ms concurrent foa: 655 ms concurrent foa, tbb::spin_rw_mutex: 643 ms concurrent foa, std::shared_mutex: 744 ms tbb::concurrent_hash_map: 837 ms gtl::parallel_flat_hash_map: 1151 ms gtl::parallel_flat_hash_map: 1274 ms gtl::parallel_flat_hash_map: 835 ms ``` ### Clang 12, x86 ``` main.cpp Number of threads: 16 boost::unordered_flat_map, single threaded: 1084 ms boost::unordered_flat_map, single threaded, shared_mutex: 1485 ms boost::unordered_flat_map, single threaded, rw_spinlock: 1193 ms concurrent_foa, single threaded: 1366 ms concurrent_foa, tbb::spin_rw_mutex, single threaded: 1382 ms concurrent_foa, std::shared_mutex, single threaded: 1661 ms tbb::concurrent_hash_map, single threaded: 2372 ms boost::unordered_flat_map, sharded_prehashed: 758 ms boost::unordered_flat_map, sharded_prehashed: 1996 ms boost::unordered_flat_map, sharded_prehashed: 581 ms boost::unordered_flat_map, sharded isolated, prehashed: 837 ms concurrent foa: 636 ms concurrent foa, tbb::spin_rw_mutex: 606 ms concurrent foa, std::shared_mutex: 723 ms tbb::concurrent_hash_map: 850 ms gtl::parallel_flat_hash_map: 1017 ms gtl::parallel_flat_hash_map: 2425 ms gtl::parallel_flat_hash_map: 969 ms ``` ### Visual Studio 2019, x86