cuSBF
Loading...
Searching...
No Matches
Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
cusbf::filter_block< Config > Struct Template Reference

One 256-bit filter block stored as an array of Config::blockWordCount words. More...

Static Public Member Functions

template<uint64_t HashIndex>
constexpr __host__ static __device__ uint64_t sectorizedBitAddress (uint64_t baseHash)
 Bit position within shard word HashIndex % blockWordCount for baseHash.
 
__device__ static __forceinline__ void sectorizedHashToMasks (uint64_t baseHash, uint64_t &mask0, uint64_t &mask1, uint64_t &mask2, uint64_t &mask3)
 Accumulates Bloom bit masks for all hash indices into four shard words.
 

Public Attributes

uint64_t words [wordCount]
 Sector words, hash i maps to word i % blockWordCount.
 

Static Public Attributes

static constexpr uint64_t wordCount = Config::blockWordCount
 
static constexpr uint64_t wordBits = Config::wordBits
 
static constexpr int wordBitsLog2 = cuda::std::bit_width(wordBits) - 1
 
static constexpr uint64_t wordMask = (1ULL << wordBitsLog2) - 1
 
static constexpr int hashShift = 64 - wordBitsLog2
 
static constexpr uint64_t sliceWidth = 64 / Config::hashCount
 
static constexpr bool useBitSlicing = sliceWidth >= wordBitsLog2
 

Detailed Description

template<typename Config>
struct cusbf::filter_block< Config >

One 256-bit filter block stored as an array of Config::blockWordCount words.

Each shard is addressed as a unit: a minimizer hash selects the shard, and the s-mer-derived hashes set/test bits within it.

Definition at line 19 of file filter_impl.cuh.

Member Function Documentation

◆ sectorizedBitAddress()

template<typename Config >
template<uint64_t HashIndex>
constexpr __host__ static __device__ uint64_t cusbf::filter_block< Config >::sectorizedBitAddress ( uint64_t  baseHash)
inlinestaticconstexpr

Bit position within shard word HashIndex % blockWordCount for baseHash.

Uses bit-slicing when sliceWidth >= wordBitsLog2, otherwise a salted multiply-shift.

Definition at line 37 of file filter_impl.cuh.

39 {
40 static_assert(HashIndex < Config::hashCount, "Hash index out of range");
41 if constexpr (useBitSlicing) {
42 return (baseHash >> (sliceWidth * HashIndex)) & wordMask;
43 } else {
44 const uint64_t mixed = baseHash * detail::multiplicativeSaltLiteral<HashIndex>();
45 return mixed >> hashShift;
46 }
47 }
consteval bool separatorPositionAlwaysEncodesInvalid(char *input, uint64_t separatorPosition, uint64_t index)
Recursively tests whether placing the separator byte at any position in an input of valid bytes alway...
Definition Alphabet.cuh:37
static constexpr uint64_t hashCount
Independent Bloom hash functions.
Definition config.cuh:45
static constexpr bool useBitSlicing
static constexpr uint64_t wordMask
static constexpr int hashShift
static constexpr uint64_t sliceWidth
Here is the call graph for this function:

◆ sectorizedHashToMasks()

template<typename Config >
__device__ static __forceinline__ void cusbf::filter_block< Config >::sectorizedHashToMasks ( uint64_t  baseHash,
uint64_t &  mask0,
uint64_t &  mask1,
uint64_t &  mask2,
uint64_t &  mask3 
)
inlinestatic

Accumulates Bloom bit masks for all hash indices into four shard words.

ORs into the output masks in place, used during insert to build per-k-mer updates.

Definition at line 54 of file filter_impl.cuh.

60 {
62 [&]<uint64_t HashIndex>(std::integral_constant<uint64_t, HashIndex>) {
63 constexpr uint64_t s = HashIndex % Config::blockWordCount;
64 const uint64_t bit_pos = sectorizedBitAddress<HashIndex>(baseHash);
65 const uint64_t bit = uint64_t{1} << bit_pos;
66 if constexpr (s == 0) {
67 mask0 |= bit;
68 } else if constexpr (s == 1) {
69 mask1 |= bit;
70 } else if constexpr (s == 2) {
71 mask2 |= bit;
72 } else {
73 mask3 |= bit;
74 }
75 }
76 );
77 }
static constexpr uint64_t blockWordCount
64-bit words per 256-bit shard.
Definition config.cuh:62
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ hashShift

template<typename Config >
constexpr int cusbf::filter_block< Config >::hashShift = 64 - wordBitsLog2
staticconstexpr

Definition at line 24 of file filter_impl.cuh.

◆ sliceWidth

template<typename Config >
constexpr uint64_t cusbf::filter_block< Config >::sliceWidth = 64 / Config::hashCount
staticconstexpr

Definition at line 25 of file filter_impl.cuh.

◆ useBitSlicing

template<typename Config >
constexpr bool cusbf::filter_block< Config >::useBitSlicing = sliceWidth >= wordBitsLog2
staticconstexpr

Definition at line 26 of file filter_impl.cuh.

◆ wordBits

template<typename Config >
constexpr uint64_t cusbf::filter_block< Config >::wordBits = Config::wordBits
staticconstexpr

Definition at line 21 of file filter_impl.cuh.

◆ wordBitsLog2

template<typename Config >
constexpr int cusbf::filter_block< Config >::wordBitsLog2 = cuda::std::bit_width(wordBits) - 1
staticconstexpr

Definition at line 22 of file filter_impl.cuh.

◆ wordCount

template<typename Config >
constexpr uint64_t cusbf::filter_block< Config >::wordCount = Config::blockWordCount
staticconstexpr

Definition at line 20 of file filter_impl.cuh.

◆ wordMask

template<typename Config >
constexpr uint64_t cusbf::filter_block< Config >::wordMask = (1ULL << wordBitsLog2) - 1
staticconstexpr

Definition at line 23 of file filter_impl.cuh.

◆ words

template<typename Config >
uint64_t cusbf::filter_block< Config >::words[wordCount]

Sector words, hash i maps to word i % blockWordCount.

Definition at line 29 of file filter_impl.cuh.


The documentation for this struct was generated from the following file: