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.99 | 4.47 | 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 | 11.08 | 10.58 | 16.51 | 4 | 3.3525 | 3.95 | 4.29 | 4.29 | 5 | 2.4274 | 5.05 | 5.72 | 5.74 |
| 12 | 9 | 0.3151 | 16.78 | 15.53 | 17.67 | 5 | 1.0369 | 4.81 | 4.94 | 5.00 | 8 | 0.4244 | 6.98 | 8.79 | 8.81 |
| 16 | 11 | 0.0455 | 19.59 | 18.70 | 16.64 | 6 | 0.4138 | 5.35 | 5.29 | 5.29 | 11 | 0.0782 | 9.15 | 13.70 | 13.75 |
| 20 | 14 | 0.0084 | 26.41 | 22.11 | 15.99 | 7 | 0.1936 | 6.40 | 6.06 | 5.90 | 14 | 0.0163 | 11.43 | 15.55 | 15.56 |
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.94 | 3.26 | 3.26 | 5 | 3.0203 | 4.82 | 5.03 | 5.03 | 5 | 2.3232 | 5.48 | 6.61 | 6.79 |
| 12 | 8 | 0.5360 | 2.47 | 3.11 | 3.10 | 6 | 0.8293 | 5.40 | 5.48 | 5.49 | 8 | 0.3758 | 8.06 | 10.02 | 9.89 |
| 16 | 11 | 0.1169 | 5.71 | 5.73 | 3.89 | 7 | 0.2824 | 6.22 | 6.27 | 6.29 | 11 | 0.0581 | 16.72 | 14.11 | 14.08 |
| 20 | 14 | 0.0304 | 5.66 | 5.72 | 3.88 | 8 | 0.1197 | 6.68 | 6.54 | 6.54 | 14 | 0.0131 | 11.83 | 17.21 | 17.21 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 29.93 | 17.52 | 6.39 |
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 | 12.88 | 12.05 | 17.22 | 4 | 3.3462 | 4.43 | 4.71 | 4.73 | 5 | 2.4515 | 5.79 | 6.58 | 6.56 |
| 12 | 9 | 0.3146 | 18.37 | 17.56 | 17.69 | 5 | 1.0310 | 5.16 | 5.59 | 5.54 | 8 | 0.4244 | 7.61 | 9.37 | 9.38 |
| 16 | 11 | 0.0456 | 24.79 | 23.25 | 17.40 | 6 | 0.4035 | 6.42 | 6.08 | 6.14 | 11 | 0.0776 | 10.65 | 14.60 | 14.61 |
| 20 | 14 | 0.0066 | 37.13 | 35.52 | 18.00 | 7 | 0.1879 | 9.00 | 8.41 | 8.13 | 14 | 0.0153 | 13.97 | 18.09 | 17.88 |
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.42 | 3.86 | 3.87 | 5 | 3.0448 | 5.53 | 5.71 | 5.72 | 5 | 2.3208 | 6.27 | 7.63 | 7.89 |
| 12 | 8 | 0.5407 | 2.73 | 3.45 | 3.38 | 6 | 0.8244 | 5.85 | 5.89 | 5.89 | 8 | 0.3758 | 8.67 | 10.56 | 10.63 |
| 16 | 11 | 0.1174 | 7.15 | 6.83 | 4.77 | 7 | 0.2885 | 7.22 | 7.25 | 8.01 | 11 | 0.0641 | 17.70 | 15.40 | 15.32 |
| 20 | 14 | 0.0276 | 8.13 | 7.84 | 5.80 | 8 | 0.1185 | 8.93 | 8.43 | 8.98 | 14 | 0.0120 | 15.33 | 19.88 | 20.35 |
Clang 18, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.64 | 4.17 | 3.47 |
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 | 8.70 | 8.22 | 14.66 | 4 | 3.3525 | 3.16 | 3.71 | 3.71 | 5 | 2.4274 | 2.87 | 3.37 | 3.37 |
| 12 | 9 | 0.3151 | 12.43 | 12.48 | 15.83 | 5 | 1.0369 | 3.65 | 4.32 | 4.48 | 8 | 0.4244 | 2.51 | 3.16 | 3.15 |
| 16 | 11 | 0.0455 | 16.37 | 15.04 | 14.79 | 6 | 0.4138 | 4.13 | 4.85 | 5.03 | 11 | 0.0782 | 5.18 | 5.69 | 5.85 |
| 20 | 14 | 0.0084 | 20.76 | 19.12 | 15.44 | 7 | 0.1936 | 4.75 | 5.66 | 5.68 | 14 | 0.0163 | 5.44 | 6.55 | 6.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.7402 | 2.43 | 2.33 | 2.33 | 5 | 3.0203 | 3.72 | 4.32 | 4.33 | 5 | 2.3232 | 2.95 | 3.23 | 3.30 |
| 12 | 8 | 0.5360 | 1.98 | 2.10 | 2.11 | 6 | 0.8293 | 4.28 | 5.26 | 5.05 | 8 | 0.3758 | 3.43 | 3.53 | 3.46 |
| 16 | 11 | 0.1169 | 3.92 | 4.09 | 2.96 | 7 | 0.2824 | 4.84 | 5.94 | 6.03 | 11 | 0.0581 | 5.39 | 5.68 | 5.56 |
| 20 | 14 | 0.0304 | 3.86 | 4.13 | 2.93 | 8 | 0.1197 | 2.64 | 3.04 | 3.03 | 14 | 0.0131 | 5.90 | 6.57 | 6.52 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 32.46 | 16.85 | 6.99 |
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.26 | 10.94 | 16.65 | 4 | 3.3462 | 4.06 | 4.74 | 4.69 | 5 | 2.4515 | 3.78 | 4.44 | 4.46 |
| 12 | 9 | 0.3146 | 15.81 | 16.57 | 17.72 | 5 | 1.0310 | 5.06 | 5.79 | 5.94 | 8 | 0.4244 | 3.35 | 4.05 | 4.06 |
| 16 | 11 | 0.0456 | 23.78 | 25.43 | 17.30 | 6 | 0.4035 | 6.75 | 7.39 | 7.45 | 11 | 0.0776 | 7.30 | 8.64 | 8.37 |
| 20 | 14 | 0.0066 | 43.65 | 47.55 | 20.26 | 7 | 0.1879 | 10.61 | 11.41 | 11.30 | 14 | 0.0153 | 10.51 | 12.85 | 13.42 |
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.13 | 3.12 | 3.21 | 5 | 3.0448 | 4.68 | 5.51 | 5.46 | 5 | 2.3208 | 3.83 | 4.37 | 4.41 |
| 12 | 8 | 0.5407 | 2.87 | 3.36 | 3.03 | 6 | 0.8244 | 6.10 | 7.13 | 6.76 | 8 | 0.3758 | 4.81 | 5.30 | 5.48 |
| 16 | 11 | 0.1174 | 6.85 | 7.43 | 5.51 | 7 | 0.2885 | 8.36 | 9.24 | 8.81 | 11 | 0.0641 | 8.15 | 9.52 | 9.44 |
| 20 | 14 | 0.0276 | 8.80 | 9.64 | 6.97 | 8 | 0.1185 | 6.68 | 7.85 | 7.26 | 14 | 0.0120 | 10.97 | 13.98 | 13.33 |
Clang 15, ARM64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 22.30 | 4.41 | 3.27 |
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.34 | 5.01 | 12.47 | 4 | 3.3525 | 1.38 | 1.30 | 1.30 | 5 | 2.4274 | 3.38 | 1.85 | 1.81 |
| 12 | 9 | 0.3151 | 11.67 | 7.59 | 13.20 | 5 | 1.0369 | 1.55 | 1.44 | 1.40 | 8 | 0.4244 | 2.23 | 2.06 | 2.22 |
| 16 | 11 | 0.0455 | 14.93 | 9.44 | 11.77 | 6 | 0.4138 | 1.86 | 1.68 | 1.66 | 11 | 0.0782 | 4.53 | 3.20 | 3.18 |
| 20 | 14 | 0.0084 | 16.29 | 10.68 | 11.27 | 7 | 0.1936 | 2.05 | 2.11 | 1.90 | 14 | 0.0163 | 4.50 | 3.76 | 3.66 |
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.89 | 1.76 | 5 | 3.0203 | 1.61 | 1.28 | 1.28 | 5 | 2.3232 | 2.66 | 1.98 | 1.78 |
| 12 | 8 | 0.5360 | 1.50 | 1.36 | 1.49 | 6 | 0.8293 | 1.81 | 1.57 | 1.56 | 8 | 0.3758 | 3.09 | 2.37 | 2.53 |
| 16 | 11 | 0.1169 | 3.46 | 2.67 | 1.92 | 7 | 0.2824 | 1.84 | 1.83 | 1.76 | 11 | 0.0581 | 4.04 | 2.96 | 3.37 |
| 20 | 14 | 0.0304 | 3.20 | 3.18 | 1.95 | 8 | 0.1197 | 1.81 | 1.75 | 1.68 | 14 | 0.0131 | 5.22 | 4.26 | 4.26 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 28.20 | 13.26 | 6.18 |
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 | 9.66 | 9.63 | 18.97 | 4 | 3.3462 | 2.04 | 4.86 | 3.83 | 5 | 2.4515 | 3.69 | 2.78 | 3.40 |
| 12 | 9 | 0.3146 | 26.96 | 21.68 | 22.29 | 5 | 1.0310 | 6.42 | 6.24 | 6.39 | 8 | 0.4244 | 7.09 | 8.63 | 8.90 |
| 16 | 11 | 0.0456 | 47.85 | 35.03 | 22.25 | 6 | 0.4035 | 8.17 | 7.46 | 5.99 | 11 | 0.0776 | 15.34 | 13.74 | 13.47 |
| 20 | 14 | 0.0066 | 67.48 | 53.71 | 25.57 | 7 | 0.1879 | 11.02 | 10.04 | 10.74 | 14 | 0.0153 | 19.84 | 18.69 | 17.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 | 3.09 | 3.88 | 3.13 | 5 | 3.0448 | 2.99 | 3.19 | 3.20 | 5 | 2.3208 | 3.62 | 4.37 | 4.01 |
| 12 | 8 | 0.5407 | 5.66 | 6.79 | 6.80 | 6 | 0.8244 | 6.33 | 5.66 | 5.59 | 8 | 0.3758 | 7.69 | 8.18 | 9.05 |
| 16 | 11 | 0.1174 | 12.08 | 12.05 | 6.42 | 7 | 0.2885 | 9.79 | 8.00 | 7.66 | 11 | 0.0641 | 17.63 | 11.97 | 15.36 |
| 20 | 14 | 0.0276 | 11.94 | 14.37 | 8.98 | 8 | 0.1185 | 7.60 | 7.48 | 8.24 | 14 | 0.0120 | 19.76 | 18.47 | 17.53 |
VS 2022, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 36.14 | 7.16 | 4.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.1635 | 12.25 | 12.62 | 17.00 | 4 | 3.3525 | 5.87 | 4.32 | 4.25 | 5 | 2.4274 | 7.91 | 5.69 | 5.65 |
| 12 | 9 | 0.3151 | 18.53 | 17.85 | 17.79 | 5 | 1.0369 | 6.99 | 4.80 | 5.05 | 8 | 0.4244 | 11.69 | 8.54 | 8.57 |
| 16 | 11 | 0.0455 | 23.76 | 21.55 | 16.90 | 6 | 0.4138 | 8.68 | 5.35 | 5.35 | 11 | 0.0782 | 15.42 | 11.32 | 11.29 |
| 20 | 14 | 0.0084 | 31.20 | 27.46 | 17.65 | 7 | 0.1936 | 10.00 | 5.98 | 6.00 | 14 | 0.0163 | 18.40 | 14.52 | 14.48 |
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.41 | 4.00 | 3.95 | 5 | 3.0203 | 7.02 | 5.32 | 5.33 | 5 | 2.3232 | 11.93 | 5.65 | 5.83 |
| 12 | 8 | 0.5360 | 2.93 | 4.92 | 4.13 | 6 | 0.8293 | 8.36 | 6.06 | 5.94 | 8 | 0.3758 | 15.37 | 8.78 | 8.03 |
| 16 | 11 | 0.1169 | 5.07 | 7.20 | 5.47 | 7 | 0.2824 | 9.38 | 6.75 | 6.86 | 11 | 0.0581 | 16.34 | 10.73 | 10.55 |
| 20 | 14 | 0.0304 | 5.04 | 7.14 | 5.42 | 8 | 0.1197 | 10.50 | 7.47 | 7.51 | 14 | 0.0131 | 19.06 | 12.73 | 13.68 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 51.79 | 22.49 | 9.81 |
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.96 | 13.91 | 18.19 | 4 | 3.3462 | 7.49 | 5.36 | 5.09 | 5 | 2.4515 | 11.24 | 7.32 | 7.70 |
| 12 | 9 | 0.3146 | 45.12 | 34.40 | 27.01 | 5 | 1.0310 | 12.72 | 8.20 | 9.03 | 8 | 0.4244 | 20.13 | 17.29 | 20.72 |
| 16 | 11 | 0.0456 | 72.44 | 83.23 | 26.51 | 6 | 0.4035 | 24.11 | 19.28 | 19.53 | 11 | 0.0776 | 39.87 | 30.57 | 27.05 |
| 20 | 14 | 0.0066 | 89.68 | 106.12 | 29.41 | 7 | 0.1879 | 24.10 | 21.35 | 24.43 | 14 | 0.0153 | 49.54 | 38.53 | 36.30 |
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 | 4.05 | 4.65 | 4.91 | 5 | 3.0448 | 8.79 | 5.97 | 6.10 | 5 | 2.3208 | 10.16 | 6.65 | 7.72 |
| 12 | 8 | 0.5407 | 5.41 | 9.91 | 6.53 | 6 | 0.8244 | 12.27 | 9.00 | 14.89 | 8 | 0.3758 | 26.72 | 16.94 | 16.06 |
| 16 | 11 | 0.1174 | 12.09 | 20.86 | 15.21 | 7 | 0.2885 | 23.24 | 20.18 | 23.72 | 11 | 0.0641 | 41.66 | 30.60 | 31.29 |
| 20 | 14 | 0.0276 | 17.38 | 25.20 | 18.79 | 8 | 0.1185 | 28.31 | 23.77 | 25.53 | 14 | 0.0120 | 44.97 | 31.52 | 28.04 |
GCC 14, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 61.58 | 30.63 | 15.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.1546 | 27.30 | 41.62 | 36.21 | 4 | 3.3200 | 12.45 | 15.91 | 15.92 | 5 | 2.4144 | 16.12 | 20.47 | 20.46 |
| 12 | 9 | 0.3118 | 36.88 | 63.07 | 38.71 | 5 | 1.0423 | 17.23 | 19.35 | 19.36 | 8 | 0.4200 | 21.17 | 26.59 | 26.66 |
| 16 | 11 | 0.0453 | 44.78 | 77.65 | 38.10 | 6 | 0.3972 | 17.32 | 18.43 | 18.40 | 11 | 0.0783 | 28.81 | 33.13 | 33.17 |
| 20 | 14 | 0.0062 | 56.42 | 96.32 | 36.91 | 7 | 0.1886 | 18.18 | 18.84 | 18.78 | 14 | 0.0149 | 35.09 | 37.52 | 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.56 | 13.60 | 13.53 | 5 | 3.0523 | 16.13 | 19.68 | 19.70 | 5 | 2.3168 | 30.46 | 22.08 | 22.14 |
| 12 | 8 | 0.5186 | 12.80 | 15.93 | 15.91 | 6 | 0.8142 | 16.06 | 18.63 | 18.59 | 8 | 0.3742 | 39.33 | 28.85 | 28.92 |
| 16 | 11 | 0.1230 | 14.47 | 19.35 | 19.35 | 7 | 0.2784 | 18.07 | 18.26 | 18.27 | 11 | 0.0667 | 63.48 | 45.63 | 45.49 |
| 20 | 14 | 0.0297 | 23.26 | 25.43 | 25.50 | 8 | 0.1259 | 18.94 | 19.98 | 19.96 | 14 | 0.0106 | 77.27 | 55.27 | 55.26 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 79.09 | 105.94 | 21.04 |
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.84 | 42.94 | 39.54 | 4 | 3.3441 | 13.40 | 16.86 | 16.24 | 5 | 2.4525 | 17.49 | 21.50 | 22.91 |
| 12 | 9 | 0.3184 | 39.88 | 70.96 | 45.80 | 5 | 1.0317 | 25.65 | 23.34 | 23.72 | 8 | 0.4209 | 24.66 | 40.84 | 43.40 |
| 16 | 11 | 0.0455 | 63.44 | 131.60 | 53.36 | 6 | 0.4015 | 26.91 | 28.06 | 30.83 | 11 | 0.0783 | 55.55 | 63.93 | 61.93 |
| 20 | 14 | 0.0068 | 150.15 | 191.11 | 57.80 | 7 | 0.1883 | 36.06 | 33.24 | 35.04 | 14 | 0.0158 | 59.27 | 76.02 | 80.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.7396 | 10.76 | 13.85 | 13.78 | 5 | 3.0511 | 16.59 | 19.98 | 20.10 | 5 | 2.3280 | 33.71 | 23.09 | 23.76 |
| 12 | 8 | 0.5422 | 13.36 | 16.91 | 17.06 | 6 | 0.8206 | 16.96 | 21.83 | 21.48 | 8 | 0.3751 | 52.23 | 42.85 | 33.58 |
| 16 | 11 | 0.1202 | 24.09 | 30.75 | 27.74 | 7 | 0.2865 | 25.27 | 22.67 | 24.24 | 11 | 0.0645 | 82.06 | 62.65 | 62.25 |
| 20 | 14 | 0.0284 | 44.61 | 54.50 | 57.20 | 8 | 0.1200 | 34.14 | 34.78 | 33.40 | 14 | 0.0117 | 97.87 | 76.49 | 71.64 |
Clang 18, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 63.21 | 10.43 | 7.26 |
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.93 | 22.98 | 26.64 | 4 | 3.3200 | 9.57 | 12.40 | 12.45 | 5 | 2.4144 | 13.00 | 16.04 | 16.06 |
| 12 | 9 | 0.3118 | 19.59 | 35.06 | 29.23 | 5 | 1.0423 | 12.15 | 14.09 | 14.13 | 8 | 0.4200 | 17.35 | 22.49 | 22.46 |
| 16 | 11 | 0.0453 | 24.97 | 47.39 | 30.31 | 6 | 0.3972 | 13.80 | 15.52 | 15.56 | 11 | 0.0783 | 24.01 | 32.16 | 32.18 |
| 20 | 14 | 0.0062 | 31.64 | 60.32 | 31.09 | 7 | 0.1886 | 14.61 | 16.39 | 16.37 | 14 | 0.0149 | 30.84 | 37.02 | 37.10 |
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.05 | 9.40 | 9.41 | 5 | 3.0523 | 11.79 | 13.95 | 13.93 | 5 | 2.3168 | 13.28 | 16.71 | 16.69 |
| 12 | 8 | 0.5186 | 10.92 | 14.16 | 14.01 | 6 | 0.8142 | 13.63 | 15.45 | 15.47 | 8 | 0.3742 | 18.36 | 22.29 | 22.28 |
| 16 | 11 | 0.1230 | 12.81 | 17.58 | 17.66 | 7 | 0.2784 | 14.74 | 16.88 | 16.78 | 11 | 0.0667 | 25.73 | 30.82 | 30.86 |
| 20 | 14 | 0.0297 | 17.19 | 22.05 | 22.05 | 8 | 0.1259 | 16.01 | 17.86 | 17.92 | 14 | 0.0106 | 33.00 | 35.90 | 35.96 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 79.14 | 46.62 | 10.72 |
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.23 | 22.75 | 28.35 | 4 | 3.3441 | 9.67 | 12.59 | 12.56 | 5 | 2.4525 | 13.03 | 16.72 | 16.78 |
| 12 | 9 | 0.3184 | 19.73 | 35.31 | 30.04 | 5 | 1.0317 | 12.54 | 15.34 | 14.12 | 8 | 0.4209 | 17.24 | 22.16 | 22.58 |
| 16 | 11 | 0.0455 | 26.20 | 48.89 | 30.86 | 6 | 0.4015 | 15.73 | 16.43 | 16.46 | 11 | 0.0783 | 28.42 | 38.27 | 38.87 |
| 20 | 14 | 0.0068 | 43.63 | 83.05 | 37.74 | 7 | 0.1883 | 17.82 | 21.53 | 19.63 | 14 | 0.0158 | 33.82 | 44.44 | 51.20 |
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.21 | 9.47 | 9.46 | 5 | 3.0511 | 11.93 | 14.06 | 14.02 | 5 | 2.3280 | 13.38 | 17.64 | 17.71 |
| 12 | 8 | 0.5422 | 11.14 | 14.96 | 14.44 | 6 | 0.8206 | 14.17 | 15.76 | 15.40 | 8 | 0.3751 | 20.77 | 23.91 | 25.80 |
| 16 | 11 | 0.1202 | 12.92 | 18.83 | 17.95 | 7 | 0.2865 | 14.64 | 16.63 | 16.85 | 11 | 0.0645 | 28.52 | 31.68 | 31.69 |
| 20 | 14 | 0.0284 | 19.58 | 32.95 | 38.40 | 8 | 0.1200 | 18.58 | 21.45 | 20.86 | 14 | 0.0117 | 35.91 | 37.98 | 38.21 |
VS 2022, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 46.28 | 9.23 | 8.44 |
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 | 56.58 | 53.79 | 37.04 | 4 | 3.3200 | 18.26 | 17.48 | 20.65 | 5 | 2.4144 | 20.03 | 41.60 | 41.03 |
| 12 | 9 | 0.3118 | 85.19 | 78.21 | 38.37 | 5 | 1.0423 | 20.47 | 18.96 | 20.66 | 8 | 0.4200 | 25.00 | 56.85 | 57.32 |
| 16 | 11 | 0.0453 | 106.16 | 96.69 | 37.45 | 6 | 0.3972 | 21.70 | 19.47 | 20.60 | 11 | 0.0783 | 36.71 | 77.22 | 77.27 |
| 20 | 14 | 0.0062 | 135.44 | 122.24 | 38.27 | 7 | 0.1886 | 23.71 | 20.44 | 21.24 | 14 | 0.0149 | 42.04 | 91.52 | 94.97 |
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.21 | 23.98 | 23.60 | 5 | 3.0523 | 21.73 | 22.44 | 25.03 | 5 | 2.3168 | 23.04 | 41.42 | 40.80 |
| 12 | 8 | 0.5350 | 16.09 | 32.72 | 24.10 | 6 | 0.8142 | 23.84 | 24.17 | 25.71 | 8 | 0.3742 | 29.97 | 56.96 | 56.97 |
| 16 | 11 | 0.1194 | 26.51 | 54.94 | 39.18 | 7 | 0.2784 | 26.65 | 26.66 | 27.09 | 11 | 0.0667 | 42.27 | 76.55 | 79.69 |
| 20 | 14 | 0.0262 | 25.24 | 53.05 | 36.54 | 8 | 0.1259 | 27.25 | 28.78 | 29.32 | 14 | 0.0106 | 47.41 | 94.16 | 93.90 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 68.61 | 37.55 | 12.57 |
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.83 | 57.96 | 41.12 | 4 | 3.3441 | 20.75 | 18.88 | 25.81 | 5 | 2.4525 | 23.18 | 46.02 | 45.69 |
| 12 | 9 | 0.3184 | 103.51 | 92.33 | 43.74 | 5 | 1.0317 | 35.88 | 27.33 | 29.12 | 8 | 0.4209 | 36.48 | 75.27 | 74.20 |
| 16 | 11 | 0.0455 | 209.61 | 137.32 | 45.85 | 6 | 0.4015 | 29.59 | 24.12 | 24.94 | 11 | 0.0783 | 43.15 | 83.62 | 82.52 |
| 20 | 14 | 0.0068 | 212.62 | 200.48 | 49.05 | 7 | 0.1883 | 40.27 | 29.16 | 29.50 | 14 | 0.0158 | 50.49 | 103.51 | 104.35 |
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.86 | 28.89 | 28.77 | 5 | 3.0511 | 24.17 | 24.47 | 27.75 | 5 | 2.3280 | 25.39 | 41.95 | 42.19 |
| 12 | 8 | 0.5375 | 16.75 | 44.32 | 32.17 | 6 | 0.8206 | 27.61 | 28.51 | 31.56 | 8 | 0.3751 | 34.72 | 62.41 | 65.94 |
| 16 | 11 | 0.1187 | 31.78 | 74.66 | 52.81 | 7 | 0.2865 | 36.58 | 40.05 | 35.15 | 11 | 0.0645 | 48.55 | 80.08 | 83.87 |
| 20 | 14 | 0.0287 | 39.24 | 88.09 | 58.06 | 8 | 0.1200 | 39.17 | 47.42 | 42.52 | 14 | 0.0117 | 60.89 | 110.61 | 108.30 |