Automated benchmarks of boost::concurrent_flat_map
and boost::concurrent_node_map
against oneapi::tbb::concurrent_hash_map
and gtl::parallel_flat_hash_map
.
parallel_load
: T threads concurrently perform N operations update, successful lookup and unsuccessful lookup, randomly chosen with probabilities 10%, 45% and 45%, respectively, on a concurrent map of (int
,int
) pairs. The keys used by all operations are also random, where update and successful lookup follow a Zipf distribution over [1, N/10] with skew exponent s, and unsuccessful lookup follows a Zipf distribution with the same skew s over [1 + N/10, 2N/10] (so, not overlapping with the former interval).
boost::concurrent_flat_map
andboost::concurrent_node_map
are exercised using both regular and bulk visitation: in the latter case, lookup keys are buffered in a local array and then processed at once each time the buffer reachesbulk_visit_size
.
gcc-x64
: GCC 12, x64clang-x64
: Clang 15, x64vs-x64
: Visual Studio 2022, x64clang-arm64
: Clang 12, ARM64gcc-x86
: GCC 12, x86clang-x86
: Clang 15, x86vs-x86
: Visual Studio 2022, x86
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
500k updates, 4.5M lookups skew=0.01 |
500k updates, 4.5M lookups skew=0.5 |
500k updates, 4.5M lookups skew=0.99 |
![]() |
![]() |
![]() |
---|---|---|
5M updates, 45M lookups skew=0.01 |
5M updates, 45M lookups skew=0.5 |
5M updates, 45M lookups skew=0.99 |