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 |
| 25.98 | 5.28 | 3.70 |
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 | 10.27 | 9.84 | 15.72 | 4 | 3.3525 | 3.74 | 4.13 | 4.10 | 5 | 2.4274 | 4.83 | 5.05 | 5.03 |
| 12 | 9 | 0.3151 | 15.50 | 14.35 | 16.59 | 5 | 1.0369 | 4.48 | 4.58 | 4.61 | 8 | 0.4244 | 6.44 | 7.72 | 7.74 |
| 16 | 11 | 0.0455 | 19.10 | 17.91 | 15.86 | 6 | 0.4138 | 5.13 | 5.10 | 5.19 | 11 | 0.0782 | 8.84 | 12.37 | 13.03 |
| 20 | 14 | 0.0084 | 25.23 | 22.63 | 16.40 | 7 | 0.1936 | 6.14 | 5.69 | 5.69 | 14 | 0.0163 | 10.97 | 14.67 | 14.64 |
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.75 | 3.05 | 3.10 | 5 | 3.0203 | 4.53 | 4.77 | 4.73 | 5 | 2.3232 | 5.19 | 5.89 | 6.13 |
| 12 | 8 | 0.5360 | 2.30 | 2.91 | 2.91 | 6 | 0.8293 | 5.09 | 5.14 | 5.15 | 8 | 0.3758 | 7.63 | 9.14 | 9.18 |
| 16 | 11 | 0.1169 | 5.52 | 5.55 | 3.80 | 7 | 0.2824 | 5.95 | 5.99 | 5.99 | 11 | 0.0581 | 16.69 | 13.21 | 13.19 |
| 20 | 14 | 0.0304 | 5.49 | 5.53 | 3.77 | 8 | 0.1197 | 6.47 | 6.35 | 6.35 | 14 | 0.0131 | 11.55 | 16.50 | 16.46 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 30.46 | 17.60 | 8.08 |
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 | 13.16 | 12.79 | 17.28 | 4 | 3.3462 | 5.78 | 5.43 | 5.48 | 5 | 2.4515 | 6.13 | 7.01 | 7.04 |
| 12 | 9 | 0.3146 | 21.68 | 19.34 | 18.38 | 5 | 1.0310 | 5.90 | 7.29 | 8.00 | 8 | 0.4244 | 8.00 | 9.88 | 9.83 |
| 16 | 11 | 0.0456 | 29.43 | 34.41 | 19.37 | 6 | 0.4035 | 15.89 | 10.54 | 7.62 | 11 | 0.0776 | 12.65 | 17.42 | 15.37 |
| 20 | 14 | 0.0066 | 47.46 | 42.99 | 19.70 | 7 | 0.1879 | 10.57 | 11.30 | 16.92 | 14 | 0.0153 | 16.06 | 22.45 | 21.62 |
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.63 | 4.21 | 4.22 | 5 | 3.0448 | 5.90 | 6.06 | 6.09 | 5 | 2.3208 | 6.65 | 8.12 | 8.41 |
| 12 | 8 | 0.5407 | 2.95 | 3.79 | 3.76 | 6 | 0.8244 | 6.18 | 6.28 | 6.25 | 8 | 0.3758 | 8.18 | 9.94 | 9.91 |
| 16 | 11 | 0.1174 | 9.15 | 9.06 | 6.31 | 7 | 0.2885 | 8.01 | 7.96 | 8.00 | 11 | 0.0641 | 17.99 | 15.56 | 15.32 |
| 20 | 14 | 0.0276 | 9.86 | 9.82 | 6.99 | 8 | 0.1185 | 11.06 | 10.93 | 9.96 | 14 | 0.0120 | 18.08 | 24.36 | 23.90 |
Clang 18, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.70 | 4.02 | 3.79 |
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.22 | 9.22 | 15.38 | 4 | 3.3525 | 3.32 | 4.05 | 3.97 | 5 | 2.4274 | 3.04 | 3.58 | 3.58 |
| 12 | 9 | 0.3151 | 13.72 | 13.48 | 16.47 | 5 | 1.0369 | 3.84 | 4.57 | 4.73 | 8 | 0.4244 | 2.71 | 3.36 | 3.37 |
| 16 | 11 | 0.0455 | 17.39 | 16.67 | 15.77 | 6 | 0.4138 | 4.35 | 5.09 | 5.09 | 11 | 0.0782 | 5.51 | 6.35 | 6.19 |
| 20 | 14 | 0.0084 | 20.42 | 21.18 | 15.26 | 7 | 0.1936 | 4.82 | 5.87 | 5.85 | 14 | 0.0163 | 5.82 | 6.89 | 6.90 |
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.56 | 2.50 | 2.49 | 5 | 3.0203 | 3.87 | 4.69 | 4.57 | 5 | 2.3232 | 3.24 | 3.53 | 3.48 |
| 12 | 8 | 0.5360 | 2.18 | 2.26 | 2.25 | 6 | 0.8293 | 4.60 | 5.33 | 5.34 | 8 | 0.3758 | 3.71 | 3.71 | 3.74 |
| 16 | 11 | 0.1169 | 4.18 | 4.37 | 3.17 | 7 | 0.2824 | 4.93 | 6.02 | 6.00 | 11 | 0.0581 | 5.85 | 6.09 | 6.11 |
| 20 | 14 | 0.0304 | 4.13 | 4.35 | 3.14 | 8 | 0.1197 | 2.83 | 3.33 | 3.36 | 14 | 0.0131 | 6.29 | 7.01 | 7.21 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 31.43 | 15.45 | 6.51 |
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.15 | 10.83 | 16.57 | 4 | 3.3462 | 4.02 | 4.79 | 4.62 | 5 | 2.4515 | 3.69 | 4.36 | 4.31 |
| 12 | 9 | 0.3146 | 16.13 | 15.49 | 17.40 | 5 | 1.0310 | 5.15 | 5.20 | 5.65 | 8 | 0.4244 | 4.33 | 4.34 | 4.11 |
| 16 | 11 | 0.0456 | 20.65 | 27.37 | 18.02 | 6 | 0.4035 | 5.73 | 6.64 | 7.85 | 11 | 0.0776 | 8.44 | 7.97 | 8.10 |
| 20 | 14 | 0.0066 | 43.40 | 42.56 | 18.01 | 7 | 0.1879 | 8.11 | 8.90 | 10.98 | 14 | 0.0153 | 8.83 | 13.11 | 11.84 |
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.21 | 3.14 | 3.28 | 5 | 3.0448 | 4.81 | 5.64 | 5.44 | 5 | 2.3208 | 3.85 | 4.31 | 4.30 |
| 12 | 8 | 0.5407 | 2.52 | 2.68 | 2.67 | 6 | 0.8244 | 5.74 | 6.32 | 5.88 | 8 | 0.3758 | 4.43 | 4.96 | 4.97 |
| 16 | 11 | 0.1174 | 5.40 | 5.81 | 4.26 | 7 | 0.2885 | 7.79 | 9.07 | 9.99 | 11 | 0.0641 | 7.23 | 8.01 | 9.21 |
| 20 | 14 | 0.0276 | 10.08 | 9.57 | 5.59 | 8 | 0.1185 | 4.84 | 8.12 | 5.98 | 14 | 0.0120 | 9.15 | 11.54 | 10.73 |
Clang 15, ARM64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 25.37 | 7.98 | 5.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 | 9.64 | 7.28 | 16.31 | 4 | 3.3525 | 2.25 | 1.81 | 1.75 | 5 | 2.4274 | 3.33 | 4.06 | 2.67 |
| 12 | 9 | 0.3151 | 16.89 | 9.20 | 15.84 | 5 | 1.0369 | 2.23 | 2.01 | 1.96 | 8 | 0.4244 | 4.37 | 3.15 | 2.59 |
| 16 | 11 | 0.0455 | 17.32 | 10.04 | 16.51 | 6 | 0.4138 | 3.04 | 2.69 | 2.31 | 11 | 0.0782 | 9.38 | 3.43 | 5.56 |
| 20 | 14 | 0.0084 | 25.69 | 17.45 | 16.77 | 7 | 0.1936 | 3.52 | 3.25 | 2.68 | 14 | 0.0163 | 8.47 | 6.02 | 7.80 |
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.43 | 2.46 | 4.83 | 5 | 3.0203 | 2.34 | 1.83 | 1.83 | 5 | 2.3232 | 3.87 | 2.12 | 2.75 |
| 12 | 8 | 0.5360 | 2.12 | 2.39 | 2.41 | 6 | 0.8293 | 2.28 | 1.85 | 2.06 | 8 | 0.3758 | 6.27 | 3.75 | 3.79 |
| 16 | 11 | 0.1169 | 3.67 | 3.19 | 3.03 | 7 | 0.2824 | 3.24 | 3.89 | 2.66 | 11 | 0.0581 | 8.59 | 3.57 | 4.41 |
| 20 | 14 | 0.0304 | 6.18 | 5.05 | 3.31 | 8 | 0.1197 | 2.20 | 2.46 | 2.06 | 14 | 0.0131 | 7.40 | 5.69 | 5.35 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 37.05 | 20.12 | 12.87 |
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 | 18.09 | 16.12 | 26.61 | 4 | 3.3462 | 5.16 | 6.19 | 7.25 | 5 | 2.4515 | 6.54 | 7.04 | 5.66 |
| 12 | 9 | 0.3146 | 46.39 | 36.65 | 31.99 | 5 | 1.0310 | 8.69 | 9.74 | 10.84 | 8 | 0.4244 | 12.02 | 14.01 | 12.94 |
| 16 | 11 | 0.0456 | 68.01 | 54.68 | 33.66 | 6 | 0.4035 | 15.53 | 12.03 | 13.39 | 11 | 0.0776 | 23.71 | 18.49 | 18.36 |
| 20 | 14 | 0.0066 | 95.45 | 72.08 | 32.50 | 7 | 0.1879 | 15.96 | 12.95 | 14.75 | 14 | 0.0153 | 33.94 | 32.68 | 29.22 |
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 | 6.25 | 10.01 | 9.26 | 5 | 3.0448 | 5.61 | 6.08 | 6.25 | 5 | 2.3208 | 7.02 | 8.63 | 6.81 |
| 12 | 8 | 0.5407 | 8.89 | 9.47 | 9.97 | 6 | 0.8244 | 11.97 | 10.95 | 12.14 | 8 | 0.3758 | 15.87 | 16.31 | 15.31 |
| 16 | 11 | 0.1174 | 19.66 | 17.78 | 12.44 | 7 | 0.2885 | 12.70 | 12.06 | 11.53 | 11 | 0.0641 | 19.54 | 15.72 | 15.58 |
| 20 | 14 | 0.0276 | 13.53 | 15.84 | 10.63 | 8 | 0.1185 | 10.14 | 9.70 | 9.35 | 14 | 0.0120 | 20.61 | 18.35 | 18.87 |
VS 2022, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 35.10 | 5.81 | 3.54 |
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 | 12.00 | 12.50 | 16.99 | 4 | 3.3525 | 5.82 | 4.22 | 4.26 | 5 | 2.4274 | 7.89 | 5.58 | 5.58 |
| 12 | 9 | 0.3151 | 18.39 | 17.67 | 17.63 | 5 | 1.0369 | 6.96 | 4.73 | 4.74 | 8 | 0.4244 | 11.61 | 8.51 | 8.55 |
| 16 | 11 | 0.0455 | 23.96 | 21.39 | 16.81 | 6 | 0.4138 | 8.62 | 5.32 | 5.27 | 11 | 0.0782 | 15.26 | 10.93 | 10.87 |
| 20 | 14 | 0.0084 | 31.16 | 27.17 | 17.49 | 7 | 0.1936 | 9.91 | 6.08 | 5.91 | 14 | 0.0163 | 17.91 | 14.28 | 14.21 |
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.34 | 3.93 | 3.93 | 5 | 3.0203 | 6.98 | 5.30 | 5.23 | 5 | 2.3232 | 9.17 | 5.58 | 5.60 |
| 12 | 8 | 0.5360 | 2.88 | 4.87 | 4.10 | 6 | 0.8293 | 8.03 | 6.02 | 5.85 | 8 | 0.3758 | 16.33 | 8.75 | 7.85 |
| 16 | 11 | 0.1169 | 4.98 | 7.11 | 5.37 | 7 | 0.2824 | 9.29 | 6.54 | 6.54 | 11 | 0.0581 | 15.85 | 10.51 | 10.48 |
| 20 | 14 | 0.0304 | 4.91 | 7.15 | 5.38 | 8 | 0.1197 | 10.34 | 7.48 | 7.38 | 14 | 0.0131 | 18.97 | 12.90 | 13.81 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 42.72 | 21.17 | 7.75 |
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.61 | 13.14 | 17.68 | 4 | 3.3462 | 7.00 | 4.73 | 4.54 | 5 | 2.4515 | 9.44 | 6.35 | 6.29 |
| 12 | 9 | 0.3146 | 22.75 | 19.28 | 18.61 | 5 | 1.0310 | 9.08 | 5.28 | 5.28 | 8 | 0.4244 | 14.18 | 10.47 | 10.09 |
| 16 | 11 | 0.0456 | 34.23 | 26.44 | 18.14 | 6 | 0.4035 | 12.54 | 7.54 | 10.14 | 11 | 0.0776 | 25.03 | 16.08 | 18.21 |
| 20 | 14 | 0.0066 | 67.06 | 71.22 | 22.08 | 7 | 0.1879 | 16.89 | 13.46 | 13.84 | 14 | 0.0153 | 29.43 | 24.60 | 25.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.7234 | 3.64 | 4.22 | 4.24 | 5 | 3.0448 | 7.91 | 5.67 | 5.67 | 5 | 2.3208 | 12.10 | 6.36 | 6.41 |
| 12 | 8 | 0.5407 | 3.67 | 5.71 | 4.50 | 6 | 0.8244 | 10.14 | 6.86 | 6.87 | 8 | 0.3758 | 19.51 | 10.93 | 10.87 |
| 16 | 11 | 0.1174 | 8.31 | 10.75 | 9.23 | 7 | 0.2885 | 14.15 | 17.63 | 13.66 | 11 | 0.0641 | 24.20 | 14.11 | 14.90 |
| 20 | 14 | 0.0276 | 14.97 | 17.52 | 13.72 | 8 | 0.1185 | 18.67 | 16.33 | 16.04 | 14 | 0.0120 | 29.82 | 19.63 | 20.87 |
GCC 14, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 60.45 | 31.64 | 16.78 |
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 | 26.99 | 41.40 | 36.24 | 4 | 3.3200 | 12.44 | 16.15 | 15.94 | 5 | 2.4144 | 16.14 | 20.38 | 20.41 |
| 12 | 9 | 0.3118 | 36.83 | 63.22 | 39.11 | 5 | 1.0423 | 17.49 | 19.42 | 19.24 | 8 | 0.4200 | 21.28 | 26.68 | 26.74 |
| 16 | 11 | 0.0453 | 44.34 | 77.07 | 37.99 | 6 | 0.3972 | 17.27 | 18.53 | 18.44 | 11 | 0.0783 | 28.85 | 33.14 | 33.17 |
| 20 | 14 | 0.0062 | 56.32 | 96.18 | 37.40 | 7 | 0.1886 | 18.18 | 18.79 | 18.80 | 14 | 0.0149 | 35.08 | 37.55 | 37.60 |
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.47 | 13.51 | 13.51 | 5 | 3.0523 | 16.04 | 19.70 | 19.71 | 5 | 2.3168 | 30.46 | 22.05 | 22.03 |
| 12 | 8 | 0.5186 | 12.79 | 16.47 | 15.86 | 6 | 0.8142 | 15.90 | 18.64 | 18.63 | 8 | 0.3742 | 39.29 | 28.91 | 28.95 |
| 16 | 11 | 0.1230 | 14.46 | 19.39 | 19.44 | 7 | 0.2784 | 18.00 | 18.55 | 18.25 | 11 | 0.0667 | 63.69 | 45.78 | 45.76 |
| 20 | 14 | 0.0297 | 24.06 | 25.48 | 25.46 | 8 | 0.1259 | 18.87 | 19.93 | 20.01 | 14 | 0.0106 | 77.58 | 55.33 | 55.43 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 70.95 | 105.15 | 20.64 |
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.37 | 42.56 | 39.18 | 4 | 3.3441 | 12.75 | 16.07 | 16.16 | 5 | 2.4525 | 16.47 | 20.59 | 20.60 |
| 12 | 9 | 0.3184 | 35.79 | 60.85 | 39.98 | 5 | 1.0317 | 17.21 | 19.65 | 19.32 | 8 | 0.4209 | 21.12 | 25.23 | 25.22 |
| 16 | 11 | 0.0455 | 42.76 | 74.18 | 38.20 | 6 | 0.4015 | 17.07 | 18.63 | 18.51 | 11 | 0.0783 | 28.49 | 33.12 | 33.05 |
| 20 | 14 | 0.0068 | 56.35 | 94.82 | 37.71 | 7 | 0.1883 | 18.23 | 20.63 | 19.39 | 14 | 0.0158 | 35.37 | 38.90 | 38.03 |
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.70 | 13.75 | 13.75 | 5 | 3.0511 | 16.27 | 19.85 | 19.84 | 5 | 2.3280 | 32.84 | 22.53 | 22.54 |
| 12 | 8 | 0.5422 | 12.54 | 16.42 | 15.51 | 6 | 0.8206 | 15.98 | 18.79 | 18.73 | 8 | 0.3751 | 40.09 | 29.09 | 29.09 |
| 16 | 11 | 0.1202 | 14.48 | 19.03 | 18.86 | 7 | 0.2865 | 17.82 | 18.57 | 18.21 | 11 | 0.0645 | 64.62 | 46.88 | 47.00 |
| 20 | 14 | 0.0284 | 24.97 | 26.53 | 26.43 | 8 | 0.1200 | 19.78 | 20.50 | 21.89 | 14 | 0.0117 | 80.73 | 57.19 | 57.74 |
Clang 18, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 63.35 | 12.85 | 8.42 |
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.79 | 23.09 | 26.61 | 4 | 3.3200 | 9.52 | 12.32 | 12.32 | 5 | 2.4144 | 12.76 | 16.04 | 16.07 |
| 12 | 9 | 0.3118 | 19.52 | 35.45 | 29.33 | 5 | 1.0423 | 12.18 | 14.05 | 14.10 | 8 | 0.4200 | 17.27 | 22.42 | 22.50 |
| 16 | 11 | 0.0453 | 24.79 | 47.45 | 30.11 | 6 | 0.3972 | 13.61 | 15.46 | 15.48 | 11 | 0.0783 | 24.12 | 32.21 | 32.17 |
| 20 | 14 | 0.0062 | 32.38 | 60.76 | 30.32 | 7 | 0.1886 | 14.55 | 16.32 | 16.31 | 14 | 0.0149 | 30.20 | 37.11 | 37.12 |
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 | 7.01 | 9.38 | 9.43 | 5 | 3.0523 | 11.77 | 13.93 | 13.90 | 5 | 2.3168 | 13.28 | 16.78 | 16.80 |
| 12 | 8 | 0.5186 | 12.01 | 14.01 | 13.99 | 6 | 0.8142 | 13.54 | 15.36 | 15.37 | 8 | 0.3742 | 17.84 | 22.51 | 22.49 |
| 16 | 11 | 0.1230 | 13.85 | 17.63 | 17.65 | 7 | 0.2784 | 14.64 | 16.79 | 16.79 | 11 | 0.0667 | 25.68 | 30.86 | 30.88 |
| 20 | 14 | 0.0297 | 17.16 | 22.06 | 22.04 | 8 | 0.1259 | 15.92 | 17.89 | 17.92 | 14 | 0.0106 | 32.99 | 35.89 | 35.86 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 76.52 | 46.98 | 11.22 |
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 | 14.13 | 22.90 | 28.42 | 4 | 3.3441 | 9.66 | 12.56 | 12.57 | 5 | 2.4525 | 13.08 | 16.66 | 16.63 |
| 12 | 9 | 0.3184 | 19.24 | 34.63 | 29.95 | 5 | 1.0317 | 11.87 | 13.73 | 13.73 | 8 | 0.4209 | 16.79 | 21.53 | 21.86 |
| 16 | 11 | 0.0455 | 24.16 | 47.07 | 30.23 | 6 | 0.4015 | 13.44 | 14.81 | 14.81 | 11 | 0.0783 | 23.77 | 32.84 | 32.80 |
| 20 | 14 | 0.0068 | 31.80 | 61.99 | 32.96 | 7 | 0.1883 | 14.52 | 15.78 | 15.79 | 14 | 0.0158 | 29.90 | 36.89 | 36.85 |
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.18 | 9.45 | 9.43 | 5 | 3.0511 | 11.85 | 13.93 | 13.96 | 5 | 2.3280 | 13.28 | 17.57 | 17.54 |
| 12 | 8 | 0.5422 | 11.14 | 13.81 | 13.78 | 6 | 0.8206 | 13.23 | 14.84 | 14.84 | 8 | 0.3751 | 17.78 | 21.72 | 21.62 |
| 16 | 11 | 0.1202 | 12.98 | 16.48 | 16.49 | 7 | 0.2865 | 14.21 | 16.15 | 16.14 | 11 | 0.0645 | 25.49 | 30.99 | 30.97 |
| 20 | 14 | 0.0284 | 16.36 | 21.40 | 21.20 | 8 | 0.1200 | 15.47 | 17.48 | 17.37 | 14 | 0.0117 | 33.09 | 35.25 | 35.27 |
VS 2022, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 41.22 | 8.59 | 6.65 |
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.75 | 52.12 | 36.05 | 4 | 3.3200 | 18.16 | 17.29 | 20.45 | 5 | 2.4144 | 20.03 | 39.81 | 39.84 |
| 12 | 9 | 0.3118 | 84.16 | 78.93 | 39.84 | 5 | 1.0423 | 20.41 | 18.90 | 21.17 | 8 | 0.4200 | 24.69 | 58.63 | 56.42 |
| 16 | 11 | 0.0453 | 104.63 | 96.29 | 38.40 | 6 | 0.3972 | 21.36 | 19.13 | 20.41 | 11 | 0.0783 | 36.12 | 77.54 | 77.55 |
| 20 | 14 | 0.0062 | 133.40 | 121.47 | 40.22 | 7 | 0.1886 | 23.58 | 20.59 | 21.16 | 14 | 0.0149 | 41.73 | 92.56 | 92.80 |
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.25 | 23.51 | 23.54 | 5 | 3.0523 | 21.58 | 22.40 | 24.79 | 5 | 2.3168 | 22.79 | 40.44 | 40.66 |
| 12 | 8 | 0.5350 | 16.01 | 32.46 | 23.64 | 6 | 0.8142 | 23.87 | 23.78 | 25.72 | 8 | 0.3742 | 29.21 | 57.02 | 57.46 |
| 16 | 11 | 0.1194 | 26.57 | 54.34 | 38.86 | 7 | 0.2784 | 25.90 | 26.06 | 26.83 | 11 | 0.0667 | 41.72 | 76.35 | 80.32 |
| 20 | 14 | 0.0262 | 24.90 | 52.46 | 36.10 | 8 | 0.1259 | 27.07 | 28.90 | 28.84 | 14 | 0.0106 | 46.92 | 91.32 | 92.90 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 72.10 | 37.97 | 12.33 |
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 | 62.34 | 58.38 | 40.30 | 4 | 3.3441 | 19.65 | 18.14 | 22.61 | 5 | 2.4525 | 21.97 | 40.46 | 40.54 |
| 12 | 9 | 0.3184 | 92.12 | 85.21 | 42.88 | 5 | 1.0317 | 22.54 | 19.37 | 22.17 | 8 | 0.4209 | 28.29 | 60.70 | 58.44 |
| 16 | 11 | 0.0455 | 126.02 | 112.02 | 42.81 | 6 | 0.4015 | 24.71 | 20.76 | 22.53 | 11 | 0.0783 | 40.41 | 80.19 | 80.73 |
| 20 | 14 | 0.0068 | 189.29 | 178.77 | 51.51 | 7 | 0.1883 | 35.39 | 31.14 | 27.76 | 14 | 0.0158 | 48.01 | 101.07 | 100.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.7254 | 16.75 | 28.26 | 28.33 | 5 | 3.0511 | 23.65 | 24.11 | 27.79 | 5 | 2.3280 | 25.11 | 41.32 | 41.89 |
| 12 | 8 | 0.5375 | 16.44 | 38.08 | 28.25 | 6 | 0.8206 | 26.18 | 28.15 | 28.92 | 8 | 0.3751 | 32.75 | 60.15 | 61.44 |
| 16 | 11 | 0.1187 | 30.70 | 65.50 | 52.84 | 7 | 0.2865 | 29.67 | 30.37 | 35.90 | 11 | 0.0645 | 47.27 | 80.35 | 82.28 |
| 20 | 14 | 0.0287 | 37.10 | 76.31 | 56.65 | 8 | 0.1200 | 38.82 | 38.11 | 39.40 | 14 | 0.0117 | 55.28 | 100.23 | 99.93 |