Adaptive Cuckoo Filters
mulh
(needs more hash bits)k = #hash_functions = #set_bits_per_key
m = filter_size
gather
instruction, can be overcome using partitioning)gather
B = 512 bit
): compute mask for entire line using SIMD and write it outB != 512 bit
): compute mask for multiple keys in one SIMD register and write them sequentially to disk (does not require scatter
)scatter
but should also be possible by first distributing the mask to an entire SIMD register and then using a standard writek
arbitrary bits in the entire filterB
k
arbitrary bits within this blockB ∈ {32 bit, 64 bit, 128 bit, 256 bit, 512 bit}
B
S
sectors of size B / S
in this blockB ∈ {32 bit, 64 bit, 128 bit, 256 bit, 512 bit}
S ∈ {1, 2, 4, 8, 16, 32, 64}
B / 8
and k
multiple of S
B
z
groupsS / z
sectorsk / z
arbitrary bits in this sectorB ∈ {32 bit, 64 bit, 128 bit, 256 bit, 512 bit}
z ∈ {1, 2, 4, 8}
B / 8
and k
multiple of z
S ∈ {1, 2, 4, 8, 16, 32, 64}
B / 8
multiple of S
fingerprint(x) == a1(h1(x)) xor a2(h2(x)) xor a3(h3(x))
b = #bits_per_tag
m = filter_size
B1 = hash(x) mod m
B2 = (B1 xor hash(x'sig)) mod m
m
power of twol = #tags_per_bucket
b = #bits_per_tag
m = filter_size
gather
B1 = hash(x) mod m
B2 = - (B1 + hash(x'sig)) mod m
B2 = B1(x) xor (hash(x'sig) mod L)
L
L
the probability of a successful build reducesL
's