3#include <cuda/__cmath/ceil_div.h>
4#include <cuda_runtime.h>
6#include <cub/warp/warp_reduce.cuh>
21template <
typename Config>
28template <
typename Config>
40template <
typename Config, u
int32_t k_str
ide>
106template <
typename Config, u
int32_t warps_per_block>
179template <
typename Config>
214template <
typename Config>
247template <
typename Config>
282template <
typename Config>
Non-owning device reference to sectorized filter storage.
__host__ static __device__ uint64_t shard_index(uint64_t minimizer_hash, uint64_t num_blocks) noexcept
Maps a minimizer hash to a shard index via low bits.
static __device__ bool sectorized_contains_packed_kmer(uint64_t packed_kmer, const uint64_t *shard_words)
Tests sectorized membership for a packed k-mer against shard words.
__device__ void apply_word_masks(block_type &block, uint64_t m0, uint64_t m1, uint64_t m2, uint64_t m3) const
Atomically ORs non-zero per-word Bloom masks into block.
__global__ void insert_sequence_kmers_kernel(SequenceKmerInput< Config > input, device_span< filter_block< Config > > shards)
Insert kernel: sectorized Bloom updates grouped by minimizer shard.
__global__ void contains_sequence_kmers_kernel(SequenceKmerInput< Config > input, device_span< const filter_block< Config > > shards, device_span< uint8_t > output)
Query kernel: one byte per k-mer (1 = present, 0 = absent or invalid).
__device__ __forceinline__ void insert_kmers_from_symbol_tile(const uint8_t *sequence_tile, uint64_t block_start_kmer, uint64_t block_kmers, bool block_all_valid, device_span< filter_block< Config > > shards, cub::WarpReduce< uint64_t >::TempStorage reduce_storage[warps_per_block][4])
Shared insert path after a block symbol tile has been prepared.
constexpr uint64_t dense_packed_insert_word_tile_capacity()
Maximum uint64_t words loaded for a dense-packed insert block tile.
constexpr uint32_t kContainsSequenceStride
K-mers processed per query thread per inner loop iteration.
constexpr uint64_t dense_packed_query_word_tile_capacity()
Maximum uint64_t words loaded for a dense-packed query block tile.
__global__ void contains_dense_packed_kmers_kernel(DensePackedKmerInput< Config > input, device_span< const filter_block< Config > > shards, device_span< uint8_t > output)
Query kernel for a dense packed symbol buffer (DensePackedKmerInput).
__device__ __forceinline__ void contains_kmers_from_symbol_tile(const uint8_t *sequence_tile, uint64_t block_start_kmer, uint64_t block_kmers, bool block_all_valid, device_span< const filter_block< Config > > shards, device_span< uint8_t > output)
Shared query path after a block symbol tile has been prepared.
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...
__global__ void insert_dense_packed_kmers_kernel(DensePackedKmerInput< Config > input, device_span< filter_block< Config > > shards)
Insert kernel for a dense packed symbol buffer (DensePackedKmerInput).
Compile-time configuration for a cusbf::filter.
static constexpr uint64_t cudaBlockSize
CUDA threads per kernel block.
static constexpr uint64_t findereSpan
S-mers hashed per k-mer (findere).
static constexpr uint16_t k
K-mer length in symbols.
Device functor for bitwise OR reduction (CUB WarpReduce).
A span that is assumed to point to device-accessible memory.
One 256-bit filter block stored as an array of Config::blockWordCount words.
__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.