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 |
| 27.17 | 4.37 | 3.89 |
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.61 | 11.49 | 16.95 | 4 | 3.3525 | 4.13 | 4.24 | 4.34 | 5 | 2.4274 | 6.03 | 5.79 | 5.79 |
| 12 | 9 | 0.3151 | 18.36 | 15.54 | 17.49 | 5 | 1.0369 | 4.94 | 4.94 | 4.92 | 8 | 0.4244 | 7.05 | 8.87 | 8.87 |
| 16 | 11 | 0.0455 | 21.78 | 18.59 | 16.56 | 6 | 0.4138 | 5.47 | 5.38 | 5.51 | 11 | 0.0782 | 10.27 | 14.02 | 13.91 |
| 20 | 14 | 0.0084 | 27.37 | 23.93 | 16.90 | 7 | 0.1936 | 6.23 | 6.14 | 6.00 | 14 | 0.0163 | 12.45 | 15.85 | 15.76 |
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.7421 | 4.31 | 5.37 | 5.37 | 5 | 3.0203 | 4.90 | 5.08 | 5.06 | 5 | 2.3232 | 6.19 | 5.79 | 5.78 |
| 12 | 8 | 0.5384 | 3.79 | 4.84 | 4.84 | 6 | 0.8293 | 5.52 | 5.55 | 5.55 | 8 | 0.3758 | 11.13 | 9.06 | 9.12 |
| 16 | 11 | 0.1163 | 7.38 | 7.29 | 6.20 | 7 | 0.2824 | 6.38 | 6.33 | 6.35 | 11 | 0.0581 | 11.26 | 11.80 | 11.77 |
| 20 | 14 | 0.0286 | 7.79 | 8.40 | 6.23 | 8 | 0.1197 | 6.68 | 6.75 | 6.73 | 14 | 0.0131 | 13.51 | 14.99 | 14.89 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 35.11 | 19.80 | 11.68 |
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.90 | 13.24 | 18.27 | 4 | 3.3462 | 5.02 | 5.20 | 5.16 | 5 | 2.4515 | 7.54 | 7.03 | 7.20 |
| 12 | 9 | 0.3146 | 34.67 | 31.90 | 21.68 | 5 | 1.0310 | 11.76 | 11.31 | 10.43 | 8 | 0.4244 | 22.87 | 20.04 | 13.34 |
| 16 | 11 | 0.0456 | 68.01 | 71.94 | 27.74 | 6 | 0.4035 | 18.71 | 18.50 | 18.13 | 11 | 0.0776 | 30.93 | 27.94 | 29.36 |
| 20 | 14 | 0.0066 | 100.59 | 98.15 | 29.37 | 7 | 0.1879 | 24.40 | 23.09 | 23.18 | 14 | 0.0153 | 46.88 | 43.02 | 41.05 |
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.7269 | 5.55 | 7.06 | 7.22 | 5 | 3.0448 | 6.08 | 6.39 | 6.75 | 5 | 2.3208 | 8.60 | 6.88 | 7.74 |
| 12 | 8 | 0.5394 | 9.93 | 10.26 | 10.54 | 6 | 0.8244 | 11.79 | 12.20 | 9.95 | 8 | 0.3758 | 28.02 | 25.74 | 20.13 |
| 16 | 11 | 0.1161 | 28.53 | 25.08 | 20.52 | 7 | 0.2885 | 19.92 | 22.27 | 17.65 | 11 | 0.0641 | 25.87 | 31.92 | 35.96 |
| 20 | 14 | 0.0287 | 31.97 | 31.96 | 18.84 | 8 | 0.1185 | 26.31 | 23.97 | 22.99 | 14 | 0.0120 | 42.45 | 40.92 | 40.61 |
Clang 18, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.79 | 4.64 | 3.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 | 9.29 | 8.97 | 15.47 | 4 | 3.3525 | 3.31 | 3.94 | 3.94 | 5 | 2.4274 | 5.81 | 6.02 | 6.24 |
| 12 | 9 | 0.3151 | 13.12 | 14.19 | 16.90 | 5 | 1.0369 | 3.85 | 4.57 | 4.59 | 8 | 0.4244 | 8.88 | 9.24 | 9.24 |
| 16 | 11 | 0.0455 | 17.56 | 16.65 | 15.45 | 6 | 0.4138 | 4.37 | 5.08 | 5.08 | 11 | 0.0782 | 10.84 | 13.45 | 13.40 |
| 20 | 14 | 0.0084 | 20.38 | 21.10 | 16.09 | 7 | 0.1936 | 4.82 | 5.68 | 5.87 | 14 | 0.0163 | 14.29 | 13.82 | 13.87 |
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.7421 | 3.58 | 3.98 | 3.98 | 5 | 3.0203 | 3.87 | 4.59 | 4.56 | 5 | 2.3232 | 5.07 | 6.20 | 5.87 |
| 12 | 8 | 0.5384 | 2.93 | 3.71 | 3.71 | 6 | 0.8293 | 4.50 | 5.34 | 5.33 | 8 | 0.3758 | 7.58 | 9.12 | 9.10 |
| 16 | 11 | 0.1163 | 5.45 | 5.95 | 4.45 | 7 | 0.2824 | 4.93 | 6.00 | 6.00 | 11 | 0.0581 | 10.04 | 14.01 | 13.97 |
| 20 | 14 | 0.0286 | 6.27 | 6.93 | 4.47 | 8 | 0.1197 | 5.41 | 6.58 | 6.45 | 14 | 0.0131 | 14.69 | 15.31 | 15.34 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 33.92 | 17.39 | 6.49 |
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.59 | 9.90 | 15.97 | 4 | 3.3462 | 3.60 | 4.28 | 4.28 | 5 | 2.4515 | 6.60 | 6.75 | 7.11 |
| 12 | 9 | 0.3146 | 14.61 | 14.85 | 17.14 | 5 | 1.0310 | 4.79 | 4.78 | 4.77 | 8 | 0.4244 | 9.56 | 9.67 | 9.67 |
| 16 | 11 | 0.0456 | 19.09 | 20.72 | 16.39 | 6 | 0.4035 | 6.04 | 5.87 | 6.24 | 11 | 0.0776 | 12.34 | 15.48 | 16.50 |
| 20 | 14 | 0.0066 | 49.41 | 51.57 | 20.11 | 7 | 0.1879 | 13.21 | 14.63 | 14.74 | 14 | 0.0153 | 25.35 | 30.02 | 30.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.7269 | 3.99 | 4.37 | 4.38 | 5 | 3.0448 | 4.31 | 4.99 | 4.94 | 5 | 2.3208 | 5.62 | 6.64 | 6.62 |
| 12 | 8 | 0.5394 | 3.25 | 4.16 | 4.07 | 6 | 0.8244 | 5.30 | 7.02 | 6.78 | 8 | 0.3758 | 8.71 | 10.60 | 9.97 |
| 16 | 11 | 0.1161 | 11.91 | 17.86 | 12.29 | 7 | 0.2885 | 7.36 | 8.32 | 8.53 | 11 | 0.0641 | 12.54 | 17.96 | 16.65 |
| 20 | 14 | 0.0287 | 10.35 | 17.68 | 11.12 | 8 | 0.1185 | 12.24 | 15.56 | 14.43 | 14 | 0.0120 | 27.41 | 24.82 | 26.40 |
Clang 15, ARM64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 23.55 | 4.33 | 4.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.1635 | 7.45 | 5.02 | 12.48 | 4 | 3.3525 | 1.54 | 1.30 | 1.30 | 5 | 2.4274 | 2.45 | 1.87 | 1.84 |
| 12 | 9 | 0.3151 | 10.73 | 7.16 | 13.05 | 5 | 1.0369 | 1.56 | 1.51 | 1.50 | 8 | 0.4244 | 2.45 | 4.81 | 2.22 |
| 16 | 11 | 0.0455 | 14.76 | 9.33 | 11.08 | 6 | 0.4138 | 1.93 | 1.60 | 1.95 | 11 | 0.0782 | 4.37 | 2.96 | 3.14 |
| 20 | 14 | 0.0084 | 20.89 | 12.56 | 12.94 | 7 | 0.1936 | 2.05 | 2.11 | 2.05 | 14 | 0.0163 | 5.20 | 4.20 | 3.68 |
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.20 | 1.87 | 1.85 | 5 | 3.0203 | 1.66 | 1.39 | 1.40 | 5 | 2.3232 | 2.43 | 1.91 | 1.90 |
| 12 | 8 | 0.5360 | 1.66 | 1.52 | 1.69 | 6 | 0.8293 | 2.24 | 1.52 | 1.56 | 8 | 0.3758 | 3.61 | 2.56 | 2.45 |
| 16 | 11 | 0.1169 | 3.42 | 2.74 | 2.27 | 7 | 0.2824 | 2.94 | 2.14 | 1.88 | 11 | 0.0581 | 4.70 | 3.45 | 3.74 |
| 20 | 14 | 0.0304 | 4.25 | 3.75 | 2.31 | 8 | 0.1197 | 2.56 | 1.93 | 2.07 | 14 | 0.0131 | 5.53 | 5.11 | 5.65 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 32.41 | 20.04 | 13.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 | 17.26 | 16.89 | 25.83 | 4 | 3.3462 | 4.49 | 4.32 | 4.75 | 5 | 2.4515 | 3.94 | 4.07 | 5.40 |
| 12 | 9 | 0.3146 | 28.06 | 26.67 | 22.93 | 5 | 1.0310 | 6.14 | 4.72 | 6.88 | 8 | 0.4244 | 7.26 | 8.38 | 4.84 |
| 16 | 11 | 0.0456 | 51.01 | 43.58 | 23.10 | 6 | 0.4035 | 10.19 | 8.52 | 8.40 | 11 | 0.0776 | 16.21 | 13.49 | 14.83 |
| 20 | 14 | 0.0066 | 69.78 | 50.41 | 24.74 | 7 | 0.1879 | 11.73 | 9.99 | 9.73 | 14 | 0.0153 | 20.60 | 18.50 | 17.99 |
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.51 | 4.07 | 3.00 | 5 | 3.0448 | 2.48 | 3.06 | 3.32 | 5 | 2.3208 | 4.37 | 4.95 | 4.52 |
| 12 | 8 | 0.5407 | 7.47 | 6.65 | 6.18 | 6 | 0.8244 | 5.93 | 5.93 | 6.03 | 8 | 0.3758 | 7.95 | 9.25 | 8.35 |
| 16 | 11 | 0.1174 | 9.19 | 9.93 | 7.27 | 7 | 0.2885 | 9.83 | 9.49 | 8.30 | 11 | 0.0641 | 15.85 | 13.42 | 12.18 |
| 20 | 14 | 0.0276 | 11.69 | 13.76 | 8.35 | 8 | 0.1185 | 9.88 | 7.41 | 8.19 | 14 | 0.0120 | 20.44 | 17.85 | 19.87 |
VS 2022, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 36.83 | 6.14 | 3.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.1635 | 12.18 | 12.67 | 17.16 | 4 | 3.3525 | 5.83 | 4.21 | 4.18 | 5 | 2.4274 | 7.88 | 5.63 | 5.58 |
| 12 | 9 | 0.3151 | 18.45 | 17.76 | 17.50 | 5 | 1.0369 | 6.89 | 4.87 | 4.75 | 8 | 0.4244 | 11.57 | 8.53 | 8.44 |
| 16 | 11 | 0.0455 | 23.75 | 21.59 | 16.89 | 6 | 0.4138 | 8.56 | 5.32 | 5.43 | 11 | 0.0782 | 15.18 | 11.12 | 10.98 |
| 20 | 14 | 0.0084 | 31.12 | 27.12 | 17.54 | 7 | 0.1936 | 9.91 | 5.94 | 5.92 | 14 | 0.0163 | 18.09 | 14.39 | 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.39 | 3.96 | 3.92 | 5 | 3.0203 | 7.03 | 5.27 | 5.37 | 5 | 2.3232 | 9.11 | 5.70 | 5.67 |
| 12 | 8 | 0.5360 | 2.89 | 4.86 | 4.07 | 6 | 0.8293 | 8.03 | 6.11 | 5.92 | 8 | 0.3758 | 16.54 | 8.80 | 8.00 |
| 16 | 11 | 0.1169 | 5.02 | 7.14 | 5.48 | 7 | 0.2824 | 9.34 | 6.95 | 6.74 | 11 | 0.0581 | 16.89 | 10.57 | 10.50 |
| 20 | 14 | 0.0304 | 5.13 | 7.14 | 5.37 | 8 | 0.1197 | 10.56 | 7.45 | 7.47 | 14 | 0.0131 | 19.41 | 12.95 | 13.73 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 47.58 | 22.88 | 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.1566 | 14.62 | 13.25 | 17.74 | 4 | 3.3462 | 7.06 | 4.50 | 4.60 | 5 | 2.4515 | 9.41 | 6.37 | 6.30 |
| 12 | 9 | 0.3146 | 22.95 | 19.53 | 18.70 | 5 | 1.0310 | 9.29 | 5.35 | 5.64 | 8 | 0.4244 | 15.57 | 10.85 | 10.56 |
| 16 | 11 | 0.0456 | 35.13 | 37.66 | 20.01 | 6 | 0.4035 | 14.99 | 9.29 | 9.89 | 11 | 0.0776 | 33.62 | 24.67 | 26.31 |
| 20 | 14 | 0.0066 | 89.93 | 85.97 | 25.04 | 7 | 0.1879 | 21.93 | 19.97 | 20.49 | 14 | 0.0153 | 42.51 | 23.73 | 22.98 |
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.70 | 4.25 | 4.29 | 5 | 3.0448 | 7.90 | 5.63 | 5.70 | 5 | 2.3208 | 9.54 | 6.35 | 6.39 |
| 12 | 8 | 0.5407 | 3.61 | 5.52 | 4.82 | 6 | 0.8244 | 10.32 | 6.74 | 6.75 | 8 | 0.3758 | 20.02 | 10.32 | 9.80 |
| 16 | 11 | 0.1174 | 8.08 | 13.60 | 9.04 | 7 | 0.2885 | 14.75 | 10.96 | 11.30 | 11 | 0.0641 | 24.88 | 15.30 | 15.25 |
| 20 | 14 | 0.0276 | 14.01 | 19.53 | 15.17 | 8 | 0.1185 | 23.09 | 20.97 | 21.71 | 14 | 0.0120 | 37.75 | 23.15 | 25.74 |
GCC 14, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 64.61 | 51.30 | 15.94 |
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.14 | 41.38 | 35.67 | 4 | 3.3200 | 12.56 | 15.96 | 15.99 | 5 | 2.4144 | 16.26 | 20.59 | 20.54 |
| 12 | 9 | 0.3118 | 37.20 | 64.10 | 39.24 | 5 | 1.0423 | 17.36 | 19.50 | 19.30 | 8 | 0.4200 | 21.46 | 26.90 | 26.79 |
| 16 | 11 | 0.0453 | 45.09 | 78.27 | 38.32 | 6 | 0.3972 | 17.40 | 18.65 | 18.53 | 11 | 0.0783 | 29.09 | 33.23 | 33.23 |
| 20 | 14 | 0.0062 | 57.19 | 97.45 | 37.60 | 7 | 0.1886 | 18.26 | 18.88 | 18.86 | 14 | 0.0149 | 35.42 | 37.94 | 37.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 | 10.64 | 13.91 | 13.67 | 5 | 3.0523 | 16.18 | 19.78 | 19.75 | 5 | 2.3168 | 30.70 | 22.28 | 22.28 |
| 12 | 8 | 0.5186 | 12.89 | 16.66 | 16.08 | 6 | 0.8142 | 16.16 | 18.66 | 18.69 | 8 | 0.3742 | 39.93 | 29.09 | 29.03 |
| 16 | 11 | 0.1230 | 14.56 | 19.58 | 19.52 | 7 | 0.2784 | 18.20 | 18.70 | 18.36 | 11 | 0.0667 | 64.24 | 46.07 | 46.04 |
| 20 | 14 | 0.0297 | 24.20 | 25.76 | 25.71 | 8 | 0.1259 | 19.04 | 20.05 | 20.14 | 14 | 0.0106 | 78.09 | 55.67 | 55.73 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 96.54 | 119.74 | 30.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 | 29.05 | 49.22 | 45.62 | 4 | 3.3441 | 15.74 | 23.04 | 23.92 | 5 | 2.4525 | 27.99 | 33.48 | 33.36 |
| 12 | 9 | 0.3184 | 68.20 | 127.36 | 71.26 | 5 | 1.0317 | 42.24 | 43.20 | 45.22 | 8 | 0.4209 | 50.24 | 55.00 | 53.34 |
| 16 | 11 | 0.0455 | 135.68 | 256.20 | 95.43 | 6 | 0.4015 | 50.56 | 56.06 | 53.00 | 11 | 0.0783 | 87.09 | 102.33 | 103.66 |
| 20 | 14 | 0.0068 | 227.04 | 388.26 | 113.93 | 7 | 0.1883 | 53.83 | 54.38 | 54.11 | 14 | 0.0158 | 98.18 | 109.46 | 111.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.7396 | 12.49 | 19.09 | 21.02 | 5 | 3.0511 | 23.81 | 28.59 | 28.67 | 5 | 2.3280 | 60.73 | 35.99 | 35.92 |
| 12 | 8 | 0.5422 | 28.53 | 36.43 | 35.21 | 6 | 0.8206 | 41.50 | 41.60 | 42.68 | 8 | 0.3751 | 110.43 | 64.57 | 64.08 |
| 16 | 11 | 0.1202 | 49.01 | 55.78 | 55.03 | 7 | 0.2865 | 52.72 | 52.60 | 53.38 | 11 | 0.0645 | 116.13 | 109.66 | 109.43 |
| 20 | 14 | 0.0284 | 65.95 | 95.28 | 94.12 | 8 | 0.1200 | 56.88 | 56.89 | 57.53 | 14 | 0.0117 | 149.86 | 126.96 | 126.37 |
Clang 18, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 63.08 | 10.30 | 7.45 |
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.80 | 22.74 | 26.69 | 4 | 3.3200 | 9.54 | 12.44 | 12.44 | 5 | 2.4144 | 12.79 | 16.02 | 16.07 |
| 12 | 9 | 0.3118 | 19.70 | 35.17 | 29.18 | 5 | 1.0423 | 12.22 | 14.15 | 14.16 | 8 | 0.4200 | 17.34 | 22.44 | 22.59 |
| 16 | 11 | 0.0453 | 25.17 | 47.33 | 29.93 | 6 | 0.3972 | 13.73 | 15.39 | 15.50 | 11 | 0.0783 | 24.02 | 32.27 | 32.23 |
| 20 | 14 | 0.0062 | 32.70 | 60.48 | 30.41 | 7 | 0.1886 | 14.55 | 16.37 | 16.36 | 14 | 0.0149 | 30.34 | 37.00 | 36.99 |
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.02 | 9.50 | 9.39 | 5 | 3.0523 | 11.78 | 13.91 | 13.89 | 5 | 2.3168 | 13.30 | 16.74 | 16.77 |
| 12 | 8 | 0.5186 | 11.27 | 14.01 | 13.97 | 6 | 0.8142 | 13.51 | 15.42 | 15.39 | 8 | 0.3742 | 17.85 | 22.37 | 22.34 |
| 16 | 11 | 0.1230 | 13.65 | 17.54 | 17.53 | 7 | 0.2784 | 14.66 | 16.83 | 16.79 | 11 | 0.0667 | 25.64 | 30.93 | 30.94 |
| 20 | 14 | 0.0297 | 17.10 | 21.94 | 22.07 | 8 | 0.1259 | 16.00 | 17.92 | 17.89 | 14 | 0.0106 | 33.14 | 35.89 | 35.77 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 97.82 | 54.97 | 20.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.1489 | 14.42 | 23.27 | 28.65 | 4 | 3.3441 | 9.95 | 13.88 | 13.23 | 5 | 2.4525 | 13.55 | 18.61 | 18.44 |
| 12 | 9 | 0.3184 | 23.07 | 48.49 | 35.49 | 5 | 1.0317 | 14.75 | 24.05 | 17.47 | 8 | 0.4209 | 22.37 | 28.84 | 29.83 |
| 16 | 11 | 0.0455 | 32.35 | 61.33 | 33.24 | 6 | 0.4015 | 20.76 | 26.86 | 20.57 | 11 | 0.0783 | 34.27 | 48.97 | 49.48 |
| 20 | 14 | 0.0068 | 113.24 | 135.61 | 48.84 | 7 | 0.1883 | 34.59 | 29.36 | 30.89 | 14 | 0.0158 | 71.08 | 69.21 | 67.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.7396 | 7.47 | 9.79 | 9.62 | 5 | 3.0511 | 12.15 | 14.39 | 14.45 | 5 | 2.3280 | 13.95 | 18.78 | 20.13 |
| 12 | 8 | 0.5422 | 12.70 | 17.41 | 18.40 | 6 | 0.8206 | 24.41 | 21.57 | 22.42 | 8 | 0.3751 | 32.17 | 41.93 | 37.30 |
| 16 | 11 | 0.1202 | 32.96 | 41.41 | 36.36 | 7 | 0.2865 | 34.70 | 40.75 | 43.95 | 11 | 0.0645 | 71.59 | 75.01 | 74.48 |
| 20 | 14 | 0.0284 | 57.32 | 63.57 | 62.13 | 8 | 0.1200 | 51.11 | 51.77 | 45.25 | 14 | 0.0117 | 85.41 | 68.63 | 69.16 |
VS 2022, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 43.09 | 8.95 | 6.68 |
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 | 55.37 | 52.20 | 36.14 | 4 | 3.3200 | 18.07 | 17.29 | 20.49 | 5 | 2.4144 | 20.24 | 39.72 | 39.83 |
| 12 | 9 | 0.3118 | 85.07 | 79.78 | 40.00 | 5 | 1.0423 | 20.36 | 18.90 | 21.13 | 8 | 0.4200 | 24.82 | 58.69 | 56.56 |
| 16 | 11 | 0.0453 | 105.92 | 96.88 | 38.37 | 6 | 0.3972 | 21.43 | 19.11 | 20.48 | 11 | 0.0783 | 36.43 | 77.55 | 77.79 |
| 20 | 14 | 0.0062 | 134.93 | 121.88 | 39.71 | 7 | 0.1886 | 23.77 | 20.54 | 21.27 | 14 | 0.0149 | 41.93 | 92.64 | 92.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.7253 | 16.24 | 23.65 | 23.61 | 5 | 3.0523 | 21.72 | 22.23 | 24.98 | 5 | 2.3168 | 23.31 | 40.37 | 40.82 |
| 12 | 8 | 0.5350 | 16.14 | 32.67 | 24.03 | 6 | 0.8142 | 23.76 | 23.81 | 25.21 | 8 | 0.3742 | 29.08 | 56.98 | 57.64 |
| 16 | 11 | 0.1194 | 26.52 | 54.62 | 38.82 | 7 | 0.2784 | 25.90 | 26.21 | 27.25 | 11 | 0.0667 | 41.71 | 76.66 | 80.26 |
| 20 | 14 | 0.0262 | 24.98 | 52.72 | 36.45 | 8 | 0.1259 | 27.60 | 28.92 | 29.39 | 14 | 0.0106 | 47.35 | 91.76 | 93.06 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 68.09 | 37.76 | 13.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.1489 | 63.64 | 57.04 | 40.68 | 4 | 3.3441 | 23.65 | 18.06 | 22.43 | 5 | 2.4525 | 25.17 | 40.94 | 45.98 |
| 12 | 9 | 0.3184 | 97.70 | 89.83 | 45.65 | 5 | 1.0317 | 38.02 | 22.66 | 24.97 | 8 | 0.4209 | 47.64 | 64.61 | 77.31 |
| 16 | 11 | 0.0455 | 176.14 | 137.71 | 51.59 | 6 | 0.4015 | 47.24 | 27.32 | 30.91 | 11 | 0.0783 | 47.44 | 99.43 | 98.86 |
| 20 | 14 | 0.0068 | 400.11 | 350.03 | 90.18 | 7 | 0.1883 | 65.71 | 40.52 | 40.27 | 14 | 0.0158 | 64.10 | 114.28 | 115.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.7254 | 19.92 | 32.36 | 35.79 | 5 | 3.0511 | 25.89 | 25.99 | 28.78 | 5 | 2.3280 | 30.86 | 45.79 | 50.76 |
| 12 | 8 | 0.5375 | 20.13 | 49.62 | 39.14 | 6 | 0.8206 | 37.51 | 35.58 | 35.14 | 8 | 0.3751 | 40.69 | 71.16 | 70.12 |
| 16 | 11 | 0.1187 | 42.57 | 90.03 | 72.46 | 7 | 0.2865 | 42.73 | 47.58 | 33.01 | 11 | 0.0645 | 46.99 | 80.48 | 83.60 |
| 20 | 14 | 0.0287 | 38.57 | 89.90 | 84.55 | 8 | 0.1200 | 65.80 | 72.10 | 90.58 | 14 | 0.0117 | 73.05 | 124.20 | 137.58 |