Experimental results for candidate Boost Bloom Library
The tables show the false positive rate (FPR) and execution times in nanoseconds per operation
for six different configurations of boost::bloom::filter<int, ...>
where N elements have been inserted. Filters are constructed with a capacity
c*N (bits), so c is the number of bits used per element. For each combination of c and
a given filter configuration, we have selected the optimum value of K (that yielding the minimum FPR).
Standard release-mode settings are used;
AVX2 is indicated for Visual Studio builds (/arch:AVX2) and 64-bit GCC/Clang builds (-mavx2),
which causes fast_multiblock32 to use its AVX2 variant.
For reference, we provide also insertion, successful lookup and unsuccessful lookup times
for a boost::unordered_flat_set<int> with the same number of elements N.
Results
GCC 14, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.39 | 4.57 | 3.53 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1635 | 11.18 | 10.72 | 16.47 | 4 | 3.3525 | 4.02 | 4.36 | 4.37 | 5 | 2.4274 | 4.99 | 5.52 | 5.52 |
| 12 | 9 | 0.3151 | 17.06 | 15.66 | 17.41 | 5 | 1.0369 | 4.79 | 4.92 | 4.92 | 8 | 0.4244 | 6.84 | 8.82 | 8.85 |
| 16 | 11 | 0.0455 | 19.54 | 18.48 | 16.31 | 6 | 0.4138 | 5.36 | 5.29 | 5.42 | 11 | 0.0782 | 9.18 | 13.70 | 13.69 |
| 20 | 14 | 0.0084 | 26.54 | 23.32 | 16.69 | 7 | 0.1936 | 6.37 | 5.89 | 5.89 | 14 | 0.0163 | 11.25 | 15.64 | 15.65 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7402 | 2.93 | 3.26 | 3.31 | 5 | 3.0203 | 4.82 | 5.08 | 5.09 | 5 | 2.3232 | 5.49 | 6.69 | 6.85 |
| 12 | 8 | 0.5360 | 2.46 | 3.10 | 3.16 | 6 | 0.8293 | 5.43 | 5.50 | 5.50 | 8 | 0.3758 | 8.12 | 10.02 | 9.98 |
| 16 | 11 | 0.1169 | 5.69 | 5.84 | 3.94 | 7 | 0.2824 | 6.27 | 6.30 | 6.30 | 11 | 0.0581 | 16.81 | 14.25 | 14.07 |
| 20 | 14 | 0.0304 | 5.65 | 5.74 | 3.95 | 8 | 0.1197 | 6.72 | 6.57 | 6.58 | 14 | 0.0131 | 11.87 | 17.35 | 17.33 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 30.20 | 18.11 | 6.58 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1566 | 11.76 | 11.21 | 16.83 | 4 | 3.3462 | 4.63 | 4.83 | 4.80 | 5 | 2.4515 | 5.74 | 6.59 | 6.59 |
| 12 | 9 | 0.3146 | 18.42 | 17.13 | 17.58 | 5 | 1.0310 | 5.40 | 5.05 | 5.22 | 8 | 0.4244 | 7.17 | 9.84 | 9.81 |
| 16 | 11 | 0.0456 | 25.68 | 23.77 | 17.90 | 6 | 0.4035 | 6.56 | 6.44 | 6.86 | 11 | 0.0776 | 11.01 | 15.15 | 15.52 |
| 20 | 14 | 0.0066 | 42.45 | 40.03 | 19.43 | 7 | 0.1879 | 10.32 | 9.27 | 8.71 | 14 | 0.0153 | 14.31 | 18.49 | 19.86 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7234 | 3.45 | 3.92 | 3.92 | 5 | 3.0448 | 5.52 | 5.70 | 5.74 | 5 | 2.3208 | 6.26 | 7.64 | 7.87 |
| 12 | 8 | 0.5407 | 2.75 | 3.41 | 3.39 | 6 | 0.8244 | 5.81 | 5.83 | 5.83 | 8 | 0.3758 | 8.85 | 10.69 | 10.76 |
| 16 | 11 | 0.1174 | 7.02 | 7.64 | 5.18 | 7 | 0.2885 | 7.59 | 7.72 | 7.47 | 11 | 0.0641 | 17.84 | 15.60 | 15.84 |
| 20 | 14 | 0.0276 | 11.73 | 10.32 | 7.55 | 8 | 0.1185 | 9.53 | 12.03 | 14.22 | 14 | 0.0120 | 17.53 | 21.92 | 22.00 |
Clang 18, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.40 | 4.08 | 3.35 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1635 | 9.34 | 8.87 | 15.33 | 4 | 3.3525 | 3.32 | 4.07 | 4.07 | 5 | 2.4274 | 3.04 | 3.57 | 3.58 |
| 12 | 9 | 0.3151 | 13.68 | 13.27 | 16.60 | 5 | 1.0369 | 3.84 | 4.56 | 4.74 | 8 | 0.4244 | 2.70 | 3.39 | 3.37 |
| 16 | 11 | 0.0455 | 17.35 | 16.77 | 15.81 | 6 | 0.4138 | 4.34 | 5.08 | 5.10 | 11 | 0.0782 | 5.64 | 6.47 | 6.23 |
| 20 | 14 | 0.0084 | 20.08 | 20.68 | 16.03 | 7 | 0.1936 | 4.83 | 5.89 | 5.86 | 14 | 0.0163 | 5.88 | 6.92 | 6.92 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7402 | 2.57 | 2.49 | 2.50 | 5 | 3.0203 | 3.90 | 4.70 | 4.59 | 5 | 2.3232 | 3.18 | 3.52 | 3.49 |
| 12 | 8 | 0.5360 | 2.14 | 2.25 | 2.26 | 6 | 0.8293 | 4.49 | 5.27 | 5.28 | 8 | 0.3758 | 3.72 | 3.74 | 3.73 |
| 16 | 11 | 0.1169 | 4.18 | 4.43 | 3.15 | 7 | 0.2824 | 4.96 | 6.01 | 6.02 | 11 | 0.0581 | 5.88 | 6.26 | 5.56 |
| 20 | 14 | 0.0304 | 4.18 | 4.39 | 3.20 | 8 | 0.1197 | 2.84 | 3.33 | 3.31 | 14 | 0.0131 | 6.29 | 7.01 | 7.22 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 31.89 | 15.37 | 6.06 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1566 | 10.42 | 8.81 | 15.22 | 4 | 3.3462 | 3.56 | 4.36 | 4.23 | 5 | 2.4515 | 3.34 | 3.85 | 3.85 |
| 12 | 9 | 0.3146 | 15.00 | 14.36 | 16.58 | 5 | 1.0310 | 4.10 | 4.78 | 4.92 | 8 | 0.4244 | 2.89 | 3.55 | 3.55 |
| 16 | 11 | 0.0456 | 19.72 | 19.38 | 16.52 | 6 | 0.4035 | 5.27 | 5.86 | 6.34 | 11 | 0.0776 | 6.48 | 7.37 | 7.09 |
| 20 | 14 | 0.0066 | 32.24 | 33.91 | 17.14 | 7 | 0.1879 | 6.81 | 7.66 | 8.06 | 14 | 0.0153 | 7.54 | 9.30 | 9.08 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7234 | 2.89 | 2.84 | 2.87 | 5 | 3.0448 | 4.25 | 5.03 | 4.92 | 5 | 2.3208 | 3.53 | 3.84 | 3.81 |
| 12 | 8 | 0.5407 | 2.32 | 2.41 | 2.41 | 6 | 0.8244 | 4.77 | 5.51 | 5.65 | 8 | 0.3758 | 3.93 | 3.97 | 4.03 |
| 16 | 11 | 0.1174 | 6.09 | 5.75 | 3.99 | 7 | 0.2885 | 5.68 | 6.82 | 6.77 | 11 | 0.0641 | 6.69 | 7.13 | 7.14 |
| 20 | 14 | 0.0276 | 6.15 | 6.52 | 4.59 | 8 | 0.1185 | 4.19 | 4.97 | 4.69 | 14 | 0.0120 | 8.07 | 9.45 | 9.81 |
Clang 15, ARM64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 22.11 | 4.47 | 3.41 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1635 | 7.28 | 5.16 | 12.02 | 4 | 3.3525 | 1.43 | 1.32 | 1.33 | 5 | 2.4274 | 2.62 | 1.87 | 1.89 |
| 12 | 9 | 0.3151 | 11.91 | 7.48 | 13.20 | 5 | 1.0369 | 1.52 | 1.44 | 1.44 | 8 | 0.4244 | 2.34 | 2.09 | 2.35 |
| 16 | 11 | 0.0455 | 15.09 | 9.26 | 11.91 | 6 | 0.4138 | 1.98 | 1.96 | 1.69 | 11 | 0.0782 | 4.45 | 3.64 | 3.22 |
| 20 | 14 | 0.0084 | 20.89 | 12.65 | 12.83 | 7 | 0.1936 | 2.11 | 2.23 | 2.77 | 14 | 0.0163 | 5.42 | 4.38 | 4.27 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7402 | 2.18 | 1.93 | 1.88 | 5 | 3.0203 | 1.75 | 1.43 | 1.43 | 5 | 2.3232 | 2.53 | 1.94 | 1.96 |
| 12 | 8 | 0.5360 | 1.66 | 1.50 | 1.52 | 6 | 0.8293 | 1.81 | 1.56 | 1.57 | 8 | 0.3758 | 3.12 | 2.50 | 2.46 |
| 16 | 11 | 0.1169 | 3.29 | 2.73 | 1.97 | 7 | 0.2824 | 1.94 | 1.76 | 1.77 | 11 | 0.0581 | 4.53 | 3.26 | 3.35 |
| 20 | 14 | 0.0304 | 3.17 | 3.22 | 1.90 | 8 | 0.1197 | 2.28 | 1.79 | 1.71 | 14 | 0.0131 | 5.12 | 4.28 | 4.47 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 37.27 | 18.18 | 12.17 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1566 | 14.14 | 10.47 | 20.24 | 4 | 3.3462 | 3.61 | 4.30 | 4.60 | 5 | 2.4515 | 3.50 | 3.70 | 4.19 |
| 12 | 9 | 0.3146 | 25.73 | 26.44 | 26.54 | 5 | 1.0310 | 6.52 | 6.52 | 7.08 | 8 | 0.4244 | 8.41 | 10.48 | 8.99 |
| 16 | 11 | 0.0456 | 47.48 | 44.00 | 27.10 | 6 | 0.4035 | 14.74 | 13.42 | 9.55 | 11 | 0.0776 | 16.75 | 16.21 | 15.65 |
| 20 | 14 | 0.0066 | 72.32 | 61.79 | 28.66 | 7 | 0.1879 | 12.10 | 10.78 | 11.66 | 14 | 0.0153 | 21.70 | 20.69 | 20.54 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7234 | 3.07 | 4.14 | 5.24 | 5 | 3.0448 | 3.07 | 3.22 | 4.09 | 5 | 2.3208 | 4.00 | 4.81 | 4.71 |
| 12 | 8 | 0.5407 | 5.88 | 7.00 | 8.00 | 6 | 0.8244 | 6.86 | 7.42 | 8.24 | 8 | 0.3758 | 10.55 | 11.37 | 13.76 |
| 16 | 11 | 0.1174 | 17.07 | 12.61 | 9.21 | 7 | 0.2885 | 9.99 | 10.37 | 9.22 | 11 | 0.0641 | 16.44 | 14.40 | 14.88 |
| 20 | 14 | 0.0276 | 13.75 | 15.09 | 9.08 | 8 | 0.1185 | 10.09 | 9.45 | 9.21 | 14 | 0.0120 | 21.51 | 20.97 | 14.86 |
VS 2022, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 34.85 | 5.62 | 3.46 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1635 | 11.92 | 12.45 | 16.92 | 4 | 3.3525 | 5.79 | 4.19 | 4.21 | 5 | 2.4274 | 7.84 | 5.55 | 5.52 |
| 12 | 9 | 0.3151 | 18.53 | 17.52 | 17.50 | 5 | 1.0369 | 6.92 | 4.72 | 4.87 | 8 | 0.4244 | 11.63 | 8.49 | 8.39 |
| 16 | 11 | 0.0455 | 23.46 | 21.37 | 16.83 | 6 | 0.4138 | 8.66 | 5.27 | 5.27 | 11 | 0.0782 | 15.17 | 10.88 | 10.91 |
| 20 | 14 | 0.0084 | 30.82 | 26.95 | 17.47 | 7 | 0.1936 | 9.86 | 6.09 | 5.87 | 14 | 0.0163 | 18.17 | 14.17 | 14.25 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7402 | 3.35 | 3.91 | 3.92 | 5 | 3.0203 | 6.94 | 5.23 | 5.24 | 5 | 2.3232 | 9.15 | 5.54 | 5.56 |
| 12 | 8 | 0.5360 | 2.84 | 4.81 | 4.05 | 6 | 0.8293 | 8.01 | 5.95 | 5.82 | 8 | 0.3758 | 16.65 | 8.66 | 7.90 |
| 16 | 11 | 0.1169 | 4.93 | 7.06 | 5.36 | 7 | 0.2824 | 9.25 | 6.54 | 6.53 | 11 | 0.0581 | 15.88 | 10.38 | 10.39 |
| 20 | 14 | 0.0304 | 4.89 | 7.01 | 5.38 | 8 | 0.1197 | 10.37 | 7.34 | 7.33 | 14 | 0.0131 | 18.81 | 12.49 | 13.43 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 41.89 | 21.44 | 7.53 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1566 | 14.58 | 13.10 | 17.68 | 4 | 3.3462 | 7.01 | 4.49 | 4.57 | 5 | 2.4515 | 9.23 | 6.30 | 6.44 |
| 12 | 9 | 0.3146 | 23.40 | 20.17 | 18.58 | 5 | 1.0310 | 9.08 | 5.49 | 5.66 | 8 | 0.4244 | 17.13 | 10.88 | 10.95 |
| 16 | 11 | 0.0456 | 46.34 | 44.54 | 19.16 | 6 | 0.4035 | 12.52 | 7.33 | 8.51 | 11 | 0.0776 | 25.36 | 17.57 | 18.25 |
| 20 | 14 | 0.0066 | 78.08 | 61.86 | 22.86 | 7 | 0.1879 | 16.43 | 11.12 | 14.34 | 14 | 0.0153 | 31.03 | 23.49 | 26.51 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7234 | 3.96 | 4.23 | 4.22 | 5 | 3.0448 | 7.96 | 5.58 | 5.70 | 5 | 2.3208 | 9.54 | 6.27 | 6.27 |
| 12 | 8 | 0.5407 | 3.43 | 5.36 | 4.71 | 6 | 0.8244 | 9.47 | 6.68 | 6.71 | 8 | 0.3758 | 18.18 | 10.49 | 10.28 |
| 16 | 11 | 0.1174 | 9.34 | 12.43 | 10.38 | 7 | 0.2885 | 13.60 | 8.10 | 7.27 | 11 | 0.0641 | 19.67 | 12.92 | 13.33 |
| 20 | 14 | 0.0276 | 12.68 | 12.65 | 9.75 | 8 | 0.1185 | 14.50 | 10.36 | 14.10 | 14 | 0.0120 | 29.96 | 20.10 | 17.65 |
GCC 14, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 60.61 | 29.57 | 14.09 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1546 | 27.00 | 41.50 | 36.01 | 4 | 3.3200 | 12.39 | 15.85 | 15.92 | 5 | 2.4144 | 16.31 | 20.49 | 20.59 |
| 12 | 9 | 0.3118 | 37.11 | 63.49 | 39.21 | 5 | 1.0423 | 17.35 | 19.46 | 19.30 | 8 | 0.4200 | 21.29 | 26.66 | 26.74 |
| 16 | 11 | 0.0453 | 44.42 | 77.59 | 38.22 | 6 | 0.3972 | 17.38 | 18.65 | 18.55 | 11 | 0.0783 | 28.92 | 33.39 | 33.30 |
| 20 | 14 | 0.0062 | 56.26 | 96.16 | 37.46 | 7 | 0.1886 | 18.25 | 18.82 | 18.83 | 14 | 0.0149 | 35.33 | 37.73 | 37.78 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7635 | 10.54 | 13.61 | 13.61 | 5 | 3.0523 | 16.12 | 19.70 | 19.74 | 5 | 2.3168 | 30.41 | 22.18 | 22.19 |
| 12 | 8 | 0.5186 | 12.89 | 16.49 | 15.91 | 6 | 0.8142 | 16.05 | 18.69 | 18.65 | 8 | 0.3742 | 39.52 | 29.10 | 29.04 |
| 16 | 11 | 0.1230 | 14.52 | 19.41 | 19.48 | 7 | 0.2784 | 18.07 | 18.64 | 18.29 | 11 | 0.0667 | 64.27 | 45.84 | 45.89 |
| 20 | 14 | 0.0297 | 24.06 | 25.56 | 25.61 | 8 | 0.1259 | 18.91 | 20.02 | 20.04 | 14 | 0.0106 | 77.96 | 55.45 | 55.56 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 70.06 | 97.60 | 17.80 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1489 | 27.64 | 42.82 | 39.27 | 4 | 3.3441 | 12.81 | 16.14 | 16.28 | 5 | 2.4525 | 16.68 | 20.64 | 20.60 |
| 12 | 9 | 0.3184 | 36.98 | 62.89 | 40.59 | 5 | 1.0317 | 17.44 | 19.69 | 19.55 | 8 | 0.4209 | 21.44 | 25.89 | 25.82 |
| 16 | 11 | 0.0455 | 44.71 | 77.40 | 39.24 | 6 | 0.4015 | 17.62 | 19.50 | 18.91 | 11 | 0.0783 | 29.78 | 35.23 | 34.67 |
| 20 | 14 | 0.0068 | 60.49 | 99.95 | 39.75 | 7 | 0.1883 | 20.14 | 21.16 | 21.13 | 14 | 0.0158 | 38.55 | 42.71 | 43.93 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7396 | 10.74 | 13.80 | 13.78 | 5 | 3.0511 | 16.31 | 19.91 | 19.94 | 5 | 2.3280 | 32.87 | 22.48 | 22.51 |
| 12 | 8 | 0.5422 | 12.73 | 16.37 | 15.78 | 6 | 0.8206 | 16.30 | 18.87 | 18.98 | 8 | 0.3751 | 40.70 | 29.79 | 29.58 |
| 16 | 11 | 0.1202 | 15.02 | 19.95 | 19.31 | 7 | 0.2865 | 18.69 | 19.27 | 18.66 | 11 | 0.0645 | 65.75 | 49.03 | 48.21 |
| 20 | 14 | 0.0284 | 27.08 | 29.66 | 30.02 | 8 | 0.1200 | 20.74 | 22.41 | 21.62 | 14 | 0.0117 | 82.22 | 59.95 | 60.43 |
Clang 18, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 61.70 | 10.16 | 7.00 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1546 | 13.58 | 22.26 | 26.36 | 4 | 3.3200 | 9.38 | 12.24 | 12.08 | 5 | 2.4144 | 12.32 | 15.87 | 15.98 |
| 12 | 9 | 0.3118 | 19.28 | 33.85 | 28.66 | 5 | 1.0423 | 11.39 | 14.05 | 13.99 | 8 | 0.4200 | 17.15 | 22.24 | 22.41 |
| 16 | 11 | 0.0453 | 24.77 | 47.24 | 29.64 | 6 | 0.3972 | 13.49 | 15.16 | 15.30 | 11 | 0.0783 | 23.80 | 31.92 | 31.73 |
| 20 | 14 | 0.0062 | 31.41 | 60.34 | 30.09 | 7 | 0.1886 | 14.46 | 16.24 | 16.20 | 14 | 0.0149 | 29.86 | 36.84 | 36.91 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7635 | 6.96 | 9.30 | 9.32 | 5 | 3.0523 | 11.67 | 13.81 | 13.34 | 5 | 2.3168 | 13.23 | 16.34 | 16.67 |
| 12 | 8 | 0.5186 | 11.48 | 13.86 | 13.91 | 6 | 0.8142 | 13.48 | 15.22 | 15.23 | 8 | 0.3742 | 17.42 | 22.12 | 21.36 |
| 16 | 11 | 0.1230 | 12.94 | 16.97 | 17.02 | 7 | 0.2784 | 14.50 | 16.33 | 15.84 | 11 | 0.0667 | 25.47 | 30.39 | 30.21 |
| 20 | 14 | 0.0297 | 16.32 | 21.91 | 21.74 | 8 | 0.1259 | 15.80 | 17.55 | 17.36 | 14 | 0.0106 | 32.93 | 35.59 | 35.54 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 71.64 | 40.57 | 9.71 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1489 | 13.87 | 22.64 | 27.82 | 4 | 3.3441 | 9.43 | 12.30 | 12.43 | 5 | 2.4525 | 12.79 | 16.26 | 16.41 |
| 12 | 9 | 0.3184 | 19.19 | 34.03 | 29.09 | 5 | 1.0317 | 11.79 | 13.64 | 13.69 | 8 | 0.4209 | 16.82 | 21.90 | 22.06 |
| 16 | 11 | 0.0455 | 24.36 | 46.35 | 29.59 | 6 | 0.4015 | 13.35 | 14.71 | 14.78 | 11 | 0.0783 | 23.57 | 32.07 | 32.07 |
| 20 | 14 | 0.0068 | 30.94 | 59.51 | 29.64 | 7 | 0.1883 | 14.10 | 15.52 | 15.64 | 14 | 0.0158 | 29.47 | 36.31 | 36.26 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7396 | 7.14 | 9.33 | 9.37 | 5 | 3.0511 | 11.79 | 13.90 | 13.87 | 5 | 2.3280 | 13.27 | 17.40 | 17.32 |
| 12 | 8 | 0.5422 | 11.18 | 13.85 | 13.83 | 6 | 0.8206 | 13.33 | 15.01 | 14.98 | 8 | 0.3751 | 17.86 | 21.98 | 21.94 |
| 16 | 11 | 0.1202 | 13.20 | 16.69 | 16.67 | 7 | 0.2865 | 14.21 | 16.23 | 16.22 | 11 | 0.0645 | 25.72 | 30.91 | 30.92 |
| 20 | 14 | 0.0284 | 16.09 | 20.99 | 20.95 | 8 | 0.1200 | 15.36 | 17.21 | 17.19 | 14 | 0.0117 | 32.84 | 34.72 | 34.59 |
VS 2022, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 40.46 | 8.53 | 6.59 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1546 | 54.58 | 51.83 | 35.84 | 4 | 3.3200 | 18.09 | 17.43 | 20.51 | 5 | 2.4144 | 19.94 | 39.61 | 39.79 |
| 12 | 9 | 0.3118 | 84.97 | 79.01 | 39.92 | 5 | 1.0423 | 20.43 | 18.83 | 21.23 | 8 | 0.4200 | 24.72 | 58.54 | 56.46 |
| 16 | 11 | 0.0453 | 105.70 | 96.90 | 38.46 | 6 | 0.3972 | 21.51 | 19.08 | 20.57 | 11 | 0.0783 | 36.43 | 77.52 | 77.76 |
| 20 | 14 | 0.0062 | 135.32 | 123.03 | 40.09 | 7 | 0.1886 | 23.80 | 20.91 | 21.34 | 14 | 0.0149 | 42.09 | 92.79 | 92.94 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7253 | 16.28 | 23.73 | 23.75 | 5 | 3.0523 | 21.97 | 22.02 | 24.79 | 5 | 2.3168 | 22.93 | 40.26 | 40.71 |
| 12 | 8 | 0.5350 | 15.99 | 32.43 | 23.83 | 6 | 0.8142 | 23.21 | 23.72 | 25.01 | 8 | 0.3742 | 29.64 | 56.80 | 57.51 |
| 16 | 11 | 0.1194 | 26.37 | 54.68 | 39.04 | 7 | 0.2784 | 25.77 | 26.21 | 27.71 | 11 | 0.0667 | 41.70 | 76.43 | 80.47 |
| 20 | 14 | 0.0262 | 24.83 | 54.74 | 36.21 | 8 | 0.1259 | 27.16 | 28.52 | 29.60 | 14 | 0.0106 | 47.24 | 91.56 | 92.88 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 58.54 | 35.16 | 10.63 |
filter<K> |
filter<1,block<uint64_t,K>> |
filter<1,multiblock<uint64_t,K>> |
|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 6 | 2.1489 | 61.88 | 56.56 | 40.29 | 4 | 3.3441 | 19.64 | 17.86 | 22.20 | 5 | 2.4525 | 22.12 | 40.21 | 40.32 |
| 12 | 9 | 0.3184 | 91.27 | 82.65 | 42.69 | 5 | 1.0317 | 21.80 | 20.88 | 22.04 | 8 | 0.4209 | 27.20 | 61.38 | 57.52 |
| 16 | 11 | 0.0455 | 117.08 | 109.57 | 44.28 | 6 | 0.4015 | 23.86 | 20.42 | 21.58 | 11 | 0.0783 | 40.75 | 79.44 | 81.77 |
| 20 | 14 | 0.0068 | 160.90 | 148.74 | 43.92 | 7 | 0.1883 | 27.98 | 22.36 | 23.37 | 14 | 0.0158 | 46.18 | 94.98 | 95.24 |
filter<K,fast_multiblock32<K>> |
filter<1,block<uint64_t, K>,1> |
filter<1,multiblock<uint64_t,K>,1> |
|||||||||||||
| c | K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
K | FPR [%] |
ins. | succ. lkp. |
uns. lkp. |
| 8 | 5 | 2.7254 | 16.85 | 28.57 | 28.47 | 5 | 3.0511 | 23.83 | 24.33 | 27.76 | 5 | 2.3280 | 25.66 | 41.02 | 41.48 |
| 12 | 8 | 0.5375 | 16.31 | 35.93 | 27.26 | 6 | 0.8206 | 25.74 | 26.61 | 27.48 | 8 | 0.3751 | 32.14 | 57.35 | 57.81 |
| 16 | 11 | 0.1187 | 30.67 | 73.55 | 54.40 | 7 | 0.2865 | 38.27 | 34.53 | 36.04 | 11 | 0.0645 | 50.59 | 83.14 | 87.74 |
| 20 | 14 | 0.0287 | 47.83 | 95.78 | 72.78 | 8 | 0.1200 | 42.99 | 45.78 | 46.96 | 14 | 0.0117 | 81.88 | 122.32 | 127.17 |