10template <
typename Config>
32 uint64_t HashCount_ = 4,
33 uint64_t CudaBlockSize_ = 256,
34 Alphabet Alphabet_ = DnaAlphabet>
39 static constexpr uint16_t
k = K_;
41 static constexpr uint16_t
m = M_;
43 static constexpr uint16_t
s = S_;
49 static constexpr uint64_t
symbolWidth = Alphabet::symbolWidth;
74 static_assert(
k > 0,
"k must be positive");
75 static_assert(
symbolWidth > 0,
"alphabet symbolWidth must be positive");
76 static_assert(
m > 0 &&
m <=
k,
"m must satisfy 0 < m <= k");
77 static_assert(
s > 0 &&
s <=
k,
"s must satisfy 0 < s <= k");
78 static_assert(
k *
symbolBits <= 64,
"k-mer must fit in one packed uint64_t");
79 static_assert(
m *
symbolBits <= 64,
"m-mer must fit in one packed uint64_t");
80 static_assert(
s *
symbolBits <= 64,
"s-mer must fit in one packed uint64_t");
81 static_assert(
hashCount > 0,
"At least one Bloom hash is required");
82 static_assert(
hashCount <= 16,
"This implementation provides 16 multiplicative salts");
86 "Filter block size must be a power of two"
89 static_assert(
blockWordCount <= 32,
"At most one warp may cooperate on a filter block");
92 "blockWordCount must be a power of two"
94 static_assert(
insertGroupSize <= 32,
"insertGroupSize must fit in one warp");
95 static_assert(
queryGroupSize <= 32,
"queryGroupSize must fit in one warp");
98 "insertGroupSize must be a power of two"
102 "queryGroupSize must be a power of two"
106 "Sectorized layout requires hashCount >= blockWordCount"
110 "Hash count must distribute evenly across shard words"
112 static_assert(
cudaBlockSize % 32 == 0,
"CUDA block size must be a multiple of one warp");
115 "cudaBlockSize must divide insertGroupSize"
Concept for alphabet-like types used to encode bytes as symbol indices.
Compile-time configuration for a cusbf::filter.
static constexpr uint64_t symbolWidth
Input bytes per symbol.
static constexpr uint64_t blockWordCount
64-bit words per 256-bit shard.
static constexpr uint64_t alphabetSize
Number of symbols in the alphabet.
static constexpr uint16_t s
S-mer width (Bloom hash seed) in symbols.
static constexpr uint64_t hashCount
Independent Bloom hash functions.
static constexpr uint16_t m
Minimizer width in symbols.
static constexpr uint64_t symbolMask
Low symbolBits mask for one encoded symbol.
static constexpr uint64_t minimizerSpan
M-mers evaluated per k-mer window.
static constexpr uint64_t cudaBlockSize
CUDA threads per kernel block.
static constexpr uint64_t findereSpan
S-mers hashed per k-mer (findere).
static constexpr uint64_t maxRunKmers
Max consecutive k-mers per warp run.
static constexpr uint64_t wordBits
Bits per shard word.
static constexpr uint16_t k
K-mer length in symbols.
static constexpr uint64_t insertGroupSize
Threads cooperating on insert.
static constexpr uint64_t filterBlockBits
Bits per shard (filter block).
static constexpr uint64_t symbolBits
Bits per packed symbol in a uint64_t k-mer.
static constexpr uint64_t queryGroupSize
Threads cooperating on query (fused path).