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 |
| 28.59 | 6.00 | 5.21 |
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.26 | 10.90 | 16.73 | 4 | 3.3525 | 4.13 | 4.46 | 4.44 | 5 | 2.4274 | 5.18 | 5.80 | 5.78 |
| 12 | 9 | 0.3151 | 17.05 | 15.60 | 17.53 | 5 | 1.0369 | 4.90 | 5.02 | 5.00 | 8 | 0.4244 | 7.02 | 8.85 | 8.90 |
| 16 | 11 | 0.0455 | 20.18 | 18.85 | 16.50 | 6 | 0.4138 | 5.48 | 5.40 | 5.54 | 11 | 0.0782 | 9.43 | 13.89 | 13.90 |
| 20 | 14 | 0.0084 | 27.89 | 23.18 | 16.90 | 7 | 0.1936 | 6.58 | 5.98 | 5.95 | 14 | 0.0163 | 11.68 | 15.81 | 15.74 |
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.97 | 3.28 | 3.37 | 5 | 3.0203 | 4.89 | 5.09 | 5.09 | 5 | 2.3232 | 5.57 | 6.72 | 6.88 |
| 12 | 8 | 0.5360 | 2.51 | 3.18 | 3.15 | 6 | 0.8293 | 5.43 | 5.50 | 5.55 | 8 | 0.3758 | 8.17 | 10.06 | 10.09 |
| 16 | 11 | 0.1169 | 5.74 | 5.84 | 3.95 | 7 | 0.2824 | 6.26 | 6.36 | 6.32 | 11 | 0.0581 | 16.69 | 14.14 | 14.16 |
| 20 | 14 | 0.0304 | 5.70 | 5.75 | 3.93 | 8 | 0.1197 | 6.72 | 6.59 | 6.59 | 14 | 0.0131 | 11.99 | 17.48 | 17.43 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 32.44 | 19.73 | 6.97 |
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.27 | 12.52 | 17.43 | 4 | 3.3462 | 4.83 | 5.13 | 5.16 | 5 | 2.4515 | 6.23 | 6.76 | 6.77 |
| 12 | 9 | 0.3146 | 19.13 | 17.95 | 17.82 | 5 | 1.0310 | 5.26 | 5.41 | 5.41 | 8 | 0.4244 | 8.92 | 12.08 | 10.86 |
| 16 | 11 | 0.0456 | 28.88 | 27.02 | 18.22 | 6 | 0.4035 | 7.63 | 7.43 | 8.00 | 11 | 0.0776 | 11.70 | 15.92 | 15.95 |
| 20 | 14 | 0.0066 | 68.82 | 56.40 | 20.36 | 7 | 0.1879 | 13.57 | 12.67 | 13.48 | 14 | 0.0153 | 19.09 | 22.27 | 23.50 |
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.51 | 3.97 | 4.00 | 5 | 3.0448 | 5.66 | 5.86 | 5.84 | 5 | 2.3208 | 6.40 | 7.79 | 8.02 |
| 12 | 8 | 0.5407 | 3.14 | 4.22 | 3.73 | 6 | 0.8244 | 5.97 | 6.59 | 6.70 | 8 | 0.3758 | 13.05 | 16.09 | 14.44 |
| 16 | 11 | 0.1174 | 12.12 | 10.02 | 6.13 | 7 | 0.2885 | 9.22 | 9.06 | 9.87 | 11 | 0.0641 | 21.83 | 17.47 | 20.76 |
| 20 | 14 | 0.0276 | 19.50 | 21.11 | 12.89 | 8 | 0.1185 | 21.14 | 17.08 | 15.69 | 14 | 0.0120 | 21.77 | 33.49 | 31.51 |
Clang 18, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.90 | 4.25 | 3.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.1635 | 9.43 | 9.05 | 15.45 | 4 | 3.3525 | 3.32 | 4.04 | 3.95 | 5 | 2.4274 | 3.11 | 3.60 | 3.63 |
| 12 | 9 | 0.3151 | 14.01 | 13.66 | 16.54 | 5 | 1.0369 | 3.90 | 4.56 | 4.73 | 8 | 0.4244 | 2.70 | 3.36 | 3.35 |
| 16 | 11 | 0.0455 | 17.42 | 16.57 | 15.81 | 6 | 0.4138 | 4.36 | 5.07 | 5.09 | 11 | 0.0782 | 5.64 | 6.45 | 6.22 |
| 20 | 14 | 0.0084 | 20.29 | 21.05 | 16.02 | 7 | 0.1936 | 4.86 | 5.88 | 5.86 | 14 | 0.0163 | 5.89 | 6.91 | 6.89 |
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.59 | 2.53 | 2.53 | 5 | 3.0203 | 3.88 | 4.69 | 4.57 | 5 | 2.3232 | 3.17 | 3.52 | 3.51 |
| 12 | 8 | 0.5360 | 2.15 | 2.27 | 2.27 | 6 | 0.8293 | 4.52 | 5.31 | 5.29 | 8 | 0.3758 | 3.77 | 3.79 | 3.75 |
| 16 | 11 | 0.1169 | 4.16 | 4.42 | 3.20 | 7 | 0.2824 | 4.96 | 6.00 | 6.20 | 11 | 0.0581 | 5.87 | 6.13 | 6.09 |
| 20 | 14 | 0.0304 | 4.14 | 4.37 | 3.18 | 8 | 0.1197 | 2.87 | 3.34 | 3.32 | 14 | 0.0131 | 6.33 | 7.08 | 7.27 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 33.16 | 17.06 | 7.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.1566 | 11.14 | 10.79 | 16.41 | 4 | 3.3462 | 3.91 | 4.76 | 4.48 | 5 | 2.4515 | 3.69 | 4.35 | 4.35 |
| 12 | 9 | 0.3146 | 19.37 | 17.35 | 17.32 | 5 | 1.0310 | 5.00 | 5.87 | 5.70 | 8 | 0.4244 | 3.56 | 4.52 | 4.10 |
| 16 | 11 | 0.0456 | 27.96 | 28.43 | 20.45 | 6 | 0.4035 | 9.90 | 9.33 | 11.14 | 11 | 0.0776 | 8.18 | 9.02 | 8.84 |
| 20 | 14 | 0.0066 | 53.09 | 55.83 | 23.28 | 7 | 0.1879 | 12.81 | 15.55 | 12.51 | 14 | 0.0153 | 10.33 | 12.90 | 14.41 |
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.09 | 3.12 | 5 | 3.0448 | 4.62 | 5.37 | 5.26 | 5 | 2.3208 | 3.77 | 4.23 | 4.21 |
| 12 | 8 | 0.5407 | 2.67 | 3.06 | 2.93 | 6 | 0.8244 | 5.81 | 6.21 | 6.36 | 8 | 0.3758 | 4.78 | 4.75 | 4.68 |
| 16 | 11 | 0.1174 | 7.92 | 6.67 | 4.88 | 7 | 0.2885 | 7.52 | 10.47 | 11.39 | 11 | 0.0641 | 8.01 | 9.36 | 10.84 |
| 20 | 14 | 0.0276 | 13.13 | 15.63 | 11.42 | 8 | 0.1185 | 8.12 | 8.06 | 10.07 | 14 | 0.0120 | 11.72 | 14.15 | 14.89 |
Clang 15, ARM64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 26.05 | 6.08 | 3.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.1635 | 10.39 | 8.41 | 13.70 | 4 | 3.3525 | 1.66 | 2.00 | 1.70 | 5 | 2.4274 | 2.67 | 2.81 | 1.87 |
| 12 | 9 | 0.3151 | 14.54 | 9.19 | 15.24 | 5 | 1.0369 | 1.56 | 2.03 | 1.96 | 8 | 0.4244 | 2.97 | 2.34 | 2.87 |
| 16 | 11 | 0.0455 | 18.06 | 11.34 | 16.51 | 6 | 0.4138 | 1.93 | 2.20 | 2.15 | 11 | 0.0782 | 6.31 | 4.75 | 3.59 |
| 20 | 14 | 0.0084 | 25.53 | 13.86 | 14.87 | 7 | 0.1936 | 3.26 | 2.60 | 2.79 | 14 | 0.0163 | 6.97 | 7.66 | 5.59 |
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.15 | 2.54 | 5 | 3.0203 | 3.60 | 2.14 | 2.87 | 5 | 2.3232 | 3.10 | 3.33 | 2.90 |
| 12 | 8 | 0.5360 | 2.69 | 2.93 | 3.08 | 6 | 0.8293 | 3.19 | 5.40 | 3.51 | 8 | 0.3758 | 4.74 | 3.97 | 3.02 |
| 16 | 11 | 0.1169 | 7.76 | 4.71 | 2.62 | 7 | 0.2824 | 2.62 | 2.71 | 2.37 | 11 | 0.0581 | 10.16 | 8.02 | 4.58 |
| 20 | 14 | 0.0304 | 4.13 | 3.89 | 3.15 | 8 | 0.1197 | 5.48 | 2.54 | 2.29 | 14 | 0.0131 | 7.89 | 7.10 | 5.82 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 38.06 | 19.47 | 11.30 |
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.03 | 12.14 | 26.49 | 4 | 3.3462 | 7.13 | 5.44 | 8.80 | 5 | 2.4515 | 7.85 | 7.85 | 7.33 |
| 12 | 9 | 0.3146 | 53.74 | 40.81 | 33.47 | 5 | 1.0310 | 12.92 | 10.09 | 8.82 | 8 | 0.4244 | 13.06 | 15.07 | 14.39 |
| 16 | 11 | 0.0456 | 76.57 | 60.59 | 33.50 | 6 | 0.4035 | 16.14 | 14.53 | 15.14 | 11 | 0.0776 | 26.43 | 21.64 | 20.95 |
| 20 | 14 | 0.0066 | 102.78 | 65.70 | 30.70 | 7 | 0.1879 | 18.65 | 16.30 | 12.28 | 14 | 0.0153 | 32.10 | 23.93 | 23.70 |
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 | 5.72 | 7.42 | 9.38 | 5 | 3.0448 | 4.04 | 4.78 | 7.52 | 5 | 2.3208 | 7.91 | 9.24 | 9.00 |
| 12 | 8 | 0.5407 | 9.76 | 12.15 | 11.27 | 6 | 0.8244 | 11.79 | 10.71 | 12.33 | 8 | 0.3758 | 15.98 | 16.96 | 15.57 |
| 16 | 11 | 0.1174 | 19.46 | 14.62 | 12.26 | 7 | 0.2885 | 11.53 | 10.52 | 9.17 | 11 | 0.0641 | 18.79 | 16.10 | 18.18 |
| 20 | 14 | 0.0276 | 14.54 | 16.33 | 9.13 | 8 | 0.1185 | 11.20 | 8.94 | 9.06 | 14 | 0.0120 | 25.80 | 23.71 | 19.69 |
VS 2022, x64
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 36.71 | 5.87 | 4.23 |
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.16 | 12.68 | 17.26 | 4 | 3.3525 | 5.86 | 4.35 | 4.30 | 5 | 2.4274 | 7.97 | 5.72 | 5.69 |
| 12 | 9 | 0.3151 | 18.73 | 18.06 | 17.76 | 5 | 1.0369 | 7.02 | 5.03 | 4.86 | 8 | 0.4244 | 11.72 | 8.68 | 8.57 |
| 16 | 11 | 0.0455 | 23.99 | 21.78 | 16.87 | 6 | 0.4138 | 8.61 | 5.61 | 5.36 | 11 | 0.0782 | 15.65 | 11.29 | 11.13 |
| 20 | 14 | 0.0084 | 31.45 | 27.59 | 17.71 | 7 | 0.1936 | 10.03 | 6.05 | 6.11 | 14 | 0.0163 | 18.04 | 14.74 | 14.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.7402 | 3.41 | 3.91 | 4.01 | 5 | 3.0203 | 7.00 | 5.27 | 5.29 | 5 | 2.3232 | 11.74 | 5.64 | 5.66 |
| 12 | 8 | 0.5360 | 2.98 | 4.90 | 4.10 | 6 | 0.8293 | 8.01 | 6.06 | 5.93 | 8 | 0.3758 | 15.35 | 8.74 | 7.89 |
| 16 | 11 | 0.1169 | 4.92 | 7.04 | 5.35 | 7 | 0.2824 | 9.33 | 6.55 | 6.56 | 11 | 0.0581 | 15.97 | 10.38 | 10.61 |
| 20 | 14 | 0.0304 | 5.00 | 7.08 | 5.28 | 8 | 0.1197 | 10.43 | 7.42 | 7.56 | 14 | 0.0131 | 18.88 | 12.98 | 13.65 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 45.25 | 23.35 | 9.73 |
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.69 | 14.58 | 17.97 | 4 | 3.3462 | 7.10 | 4.48 | 4.48 | 5 | 2.4515 | 9.35 | 6.49 | 6.71 |
| 12 | 9 | 0.3146 | 27.17 | 26.06 | 19.59 | 5 | 1.0310 | 8.79 | 5.20 | 5.21 | 8 | 0.4244 | 14.76 | 11.24 | 11.49 |
| 16 | 11 | 0.0456 | 34.38 | 32.06 | 19.27 | 6 | 0.4035 | 12.30 | 7.89 | 7.67 | 11 | 0.0776 | 21.19 | 16.19 | 17.35 |
| 20 | 14 | 0.0066 | 70.20 | 48.01 | 22.26 | 7 | 0.1879 | 20.23 | 18.24 | 16.92 | 14 | 0.0153 | 31.78 | 31.05 | 23.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.7234 | 3.69 | 4.22 | 4.27 | 5 | 3.0448 | 7.95 | 5.58 | 5.59 | 5 | 2.3208 | 9.51 | 6.25 | 6.28 |
| 12 | 8 | 0.5407 | 3.30 | 5.35 | 4.45 | 6 | 0.8244 | 9.40 | 6.57 | 6.42 | 8 | 0.3758 | 15.60 | 9.34 | 8.70 |
| 16 | 11 | 0.1174 | 6.39 | 9.17 | 8.65 | 7 | 0.2885 | 14.96 | 18.74 | 11.08 | 11 | 0.0641 | 20.81 | 14.67 | 15.95 |
| 20 | 14 | 0.0276 | 13.69 | 17.54 | 15.28 | 8 | 0.1185 | 20.70 | 24.99 | 23.78 | 14 | 0.0120 | 36.47 | 27.49 | 27.03 |
GCC 14, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 60.14 | 31.64 | 16.88 |
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.11 | 41.20 | 35.91 | 4 | 3.3200 | 12.38 | 15.91 | 15.91 | 5 | 2.4144 | 16.22 | 20.13 | 20.16 |
| 12 | 9 | 0.3118 | 36.81 | 63.19 | 39.03 | 5 | 1.0423 | 17.29 | 19.45 | 19.23 | 8 | 0.4200 | 20.98 | 26.74 | 26.80 |
| 16 | 11 | 0.0453 | 44.44 | 77.32 | 38.14 | 6 | 0.3972 | 17.55 | 18.52 | 18.42 | 11 | 0.0783 | 29.02 | 33.08 | 32.99 |
| 20 | 14 | 0.0062 | 52.25 | 89.41 | 35.33 | 7 | 0.1886 | 17.26 | 18.57 | 18.57 | 14 | 0.0149 | 33.83 | 35.90 | 35.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.7635 | 10.54 | 13.59 | 13.56 | 5 | 3.0523 | 16.08 | 19.75 | 19.69 | 5 | 2.3168 | 30.50 | 22.20 | 22.15 |
| 12 | 8 | 0.5186 | 12.81 | 16.48 | 15.88 | 6 | 0.8142 | 16.09 | 18.69 | 18.58 | 8 | 0.3742 | 39.58 | 28.92 | 28.98 |
| 16 | 11 | 0.1230 | 14.49 | 19.49 | 19.47 | 7 | 0.2784 | 18.06 | 18.57 | 18.29 | 11 | 0.0667 | 64.56 | 45.76 | 45.66 |
| 20 | 14 | 0.0297 | 22.95 | 24.04 | 24.04 | 8 | 0.1259 | 18.17 | 19.59 | 19.59 | 14 | 0.0106 | 75.98 | 53.92 | 53.92 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 68.75 | 103.33 | 20.37 |
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.94 | 43.35 | 39.65 | 4 | 3.3441 | 13.00 | 16.44 | 16.48 | 5 | 2.4525 | 16.94 | 21.15 | 21.17 |
| 12 | 9 | 0.3184 | 36.82 | 63.06 | 40.78 | 5 | 1.0317 | 17.30 | 19.48 | 19.29 | 8 | 0.4209 | 21.15 | 25.76 | 25.74 |
| 16 | 11 | 0.0455 | 43.71 | 75.13 | 38.51 | 6 | 0.4015 | 17.15 | 18.64 | 18.50 | 11 | 0.0783 | 28.73 | 33.24 | 33.42 |
| 20 | 14 | 0.0068 | 55.48 | 95.11 | 37.63 | 7 | 0.1883 | 18.06 | 19.01 | 19.19 | 14 | 0.0158 | 35.57 | 37.65 | 38.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.85 | 13.98 | 13.98 | 5 | 3.0511 | 16.52 | 19.82 | 19.84 | 5 | 2.3280 | 33.96 | 23.20 | 23.20 |
| 12 | 8 | 0.5422 | 12.76 | 16.45 | 15.71 | 6 | 0.8206 | 16.13 | 18.76 | 18.71 | 8 | 0.3751 | 40.43 | 29.36 | 29.41 |
| 16 | 11 | 0.1202 | 14.40 | 18.93 | 19.07 | 7 | 0.2865 | 18.01 | 18.70 | 18.30 | 11 | 0.0645 | 65.60 | 47.05 | 47.08 |
| 20 | 14 | 0.0284 | 24.93 | 25.67 | 25.62 | 8 | 0.1200 | 19.35 | 20.06 | 20.18 | 14 | 0.0117 | 79.83 | 57.33 | 57.59 |
Clang 18, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 61.44 | 10.18 | 7.14 |
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.69 | 22.55 | 26.60 | 4 | 3.3200 | 9.46 | 12.32 | 12.33 | 5 | 2.4144 | 12.64 | 16.00 | 16.00 |
| 12 | 9 | 0.3118 | 19.34 | 34.93 | 29.06 | 5 | 1.0423 | 11.91 | 14.03 | 14.01 | 8 | 0.4200 | 17.25 | 22.42 | 22.51 |
| 16 | 11 | 0.0453 | 24.75 | 47.09 | 29.84 | 6 | 0.3972 | 13.63 | 15.32 | 15.33 | 11 | 0.0783 | 23.88 | 31.94 | 31.97 |
| 20 | 14 | 0.0062 | 32.28 | 59.97 | 30.14 | 7 | 0.1886 | 14.48 | 16.26 | 16.54 | 14 | 0.0149 | 30.00 | 36.96 | 36.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.7635 | 6.95 | 9.22 | 9.25 | 5 | 3.0523 | 11.67 | 13.82 | 13.76 | 5 | 2.3168 | 13.12 | 16.60 | 16.50 |
| 12 | 8 | 0.5186 | 11.56 | 13.90 | 13.92 | 6 | 0.8142 | 13.59 | 15.21 | 15.21 | 8 | 0.3742 | 17.68 | 22.27 | 22.25 |
| 16 | 11 | 0.1230 | 13.61 | 17.52 | 17.52 | 7 | 0.2784 | 14.53 | 16.66 | 16.64 | 11 | 0.0667 | 25.37 | 30.66 | 30.61 |
| 20 | 14 | 0.0297 | 17.09 | 21.86 | 21.88 | 8 | 0.1259 | 15.81 | 17.76 | 17.75 | 14 | 0.0106 | 32.91 | 35.64 | 35.67 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 72.53 | 41.86 | 9.82 |
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.05 | 22.66 | 28.08 | 4 | 3.3441 | 9.60 | 12.47 | 12.51 | 5 | 2.4525 | 12.65 | 16.53 | 16.55 |
| 12 | 9 | 0.3184 | 18.94 | 34.16 | 29.60 | 5 | 1.0317 | 11.82 | 13.72 | 13.75 | 8 | 0.4209 | 16.76 | 21.49 | 21.80 |
| 16 | 11 | 0.0455 | 24.18 | 47.06 | 30.05 | 6 | 0.4015 | 13.38 | 14.84 | 14.82 | 11 | 0.0783 | 23.82 | 32.71 | 32.75 |
| 20 | 14 | 0.0068 | 31.28 | 60.00 | 30.10 | 7 | 0.1883 | 14.27 | 15.68 | 15.75 | 14 | 0.0158 | 29.81 | 36.73 | 36.63 |
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.17 | 9.41 | 9.42 | 5 | 3.0511 | 11.86 | 13.99 | 13.93 | 5 | 2.3280 | 13.24 | 17.56 | 17.53 |
| 12 | 8 | 0.5422 | 11.19 | 13.77 | 13.78 | 6 | 0.8206 | 13.23 | 14.86 | 14.87 | 8 | 0.3751 | 17.80 | 21.67 | 21.62 |
| 16 | 11 | 0.1202 | 13.07 | 16.44 | 16.49 | 7 | 0.2865 | 14.15 | 16.13 | 16.14 | 11 | 0.0645 | 25.48 | 30.94 | 30.97 |
| 20 | 14 | 0.0284 | 16.22 | 21.05 | 21.03 | 8 | 0.1200 | 15.43 | 17.36 | 17.37 | 14 | 0.0117 | 33.01 | 35.15 | 35.18 |
VS 2022, x86
N = 1M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 42.01 | 8.58 | 6.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.1546 | 55.19 | 52.60 | 36.37 | 4 | 3.3200 | 18.16 | 17.38 | 20.50 | 5 | 2.4144 | 20.20 | 39.81 | 39.85 |
| 12 | 9 | 0.3118 | 85.00 | 79.15 | 40.00 | 5 | 1.0423 | 20.34 | 18.80 | 21.14 | 8 | 0.4200 | 24.72 | 58.51 | 56.44 |
| 16 | 11 | 0.0453 | 105.85 | 96.79 | 38.40 | 6 | 0.3972 | 21.66 | 19.12 | 20.50 | 11 | 0.0783 | 36.39 | 77.37 | 77.47 |
| 20 | 14 | 0.0062 | 134.36 | 121.71 | 39.89 | 7 | 0.1886 | 23.71 | 20.54 | 21.23 | 14 | 0.0149 | 41.95 | 92.72 | 92.82 |
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.32 | 23.66 | 23.80 | 5 | 3.0523 | 21.80 | 22.38 | 24.85 | 5 | 2.3168 | 22.93 | 40.30 | 40.69 |
| 12 | 8 | 0.5350 | 16.04 | 32.90 | 23.95 | 6 | 0.8142 | 23.57 | 24.08 | 25.30 | 8 | 0.3742 | 29.37 | 56.95 | 57.46 |
| 16 | 11 | 0.1194 | 26.62 | 54.87 | 39.14 | 7 | 0.2784 | 25.90 | 26.36 | 27.23 | 11 | 0.0667 | 41.89 | 76.53 | 80.21 |
| 20 | 14 | 0.0262 | 25.05 | 55.09 | 36.48 | 8 | 0.1259 | 28.03 | 28.94 | 29.06 | 14 | 0.0106 | 47.47 | 91.57 | 92.98 |
N = 10M elements
boost::unordered_flat_set | ||
|---|---|---|
| insertion | successful lookup |
unsuccessful lookup |
| 62.94 | 36.48 | 12.01 |
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.40 | 56.67 | 40.45 | 4 | 3.3441 | 19.66 | 18.01 | 22.45 | 5 | 2.4525 | 22.34 | 40.61 | 40.65 |
| 12 | 9 | 0.3184 | 98.03 | 90.06 | 44.56 | 5 | 1.0317 | 22.73 | 19.45 | 22.13 | 8 | 0.4209 | 27.34 | 62.13 | 60.88 |
| 16 | 11 | 0.0455 | 139.03 | 144.55 | 46.11 | 6 | 0.4015 | 28.44 | 24.61 | 25.18 | 11 | 0.0783 | 42.69 | 82.54 | 82.78 |
| 20 | 14 | 0.0068 | 244.87 | 207.55 | 55.80 | 7 | 0.1883 | 40.86 | 32.67 | 34.31 | 14 | 0.0158 | 54.87 | 104.95 | 106.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.7254 | 17.02 | 28.91 | 28.94 | 5 | 3.0511 | 24.07 | 24.98 | 28.37 | 5 | 2.3280 | 25.64 | 41.64 | 41.82 |
| 12 | 8 | 0.5375 | 17.88 | 40.55 | 30.98 | 6 | 0.8206 | 27.76 | 27.78 | 30.44 | 8 | 0.3751 | 36.54 | 63.58 | 65.96 |
| 16 | 11 | 0.1187 | 35.95 | 80.13 | 59.83 | 7 | 0.2865 | 35.66 | 37.91 | 36.51 | 11 | 0.0645 | 51.64 | 83.70 | 87.35 |
| 20 | 14 | 0.0287 | 41.58 | 90.14 | 70.26 | 8 | 0.1200 | 44.04 | 48.61 | 48.92 | 14 | 0.0117 | 62.64 | 106.05 | 108.63 |