Cute Dsl FMHA Params#

struct LlmFmhaParams#

Everything the dense LLM descriptors need, gathered once per CuteDslFMHARunner::run() call.

Public Members

void const *qPtr = {}#
void const *kvPtr = {}#
void *oPtr = {}#
int32_t const *cuKVSeqLens = {}#
int32_t batchSize = {}#
int32_t seqLenQ = {}#
int32_t numQHeads = {}#
int32_t numKVHeads = {}#
int32_t headDim = {}#
int32_t kvCacheCapacity = {}#
int32_t windowSizeLeft = {}#
float attentionScale = {}#
float scaleQ = {}#
float scaleK = {}#
float scaleV = {}#
float invScaleO = {}#
float skipSoftmaxThresholdLog2 = {}#

Skip-softmax (BLASST) threshold as log2(lambda); 0.0 = disabled. Only the *_skipsoftmax launchers forward it — the other wrappers have no such argument.

cudaStream_t stream = {}#
struct LlmFmhaPagedParams#

Everything the paged LLM descriptors need, gathered once per CuteDslFMHARunner::runPaged() call.

Public Members

void const *qPtr = {}#
void const *pagedKVPoolPtr = {}#
int32_t const *kvCachePageList = {}#
void *oPtr = {}#
int32_t const *cuQSeqLens = {}#
int32_t const *cuKVSeqLens = {}#
int32_t const *bidirectionalBlockBegin = {}#
int32_t const *bidirectionalBlockEnd = {}#
int32_t batchSize = {}#
int32_t seqLenQ = {}#
int32_t numQHeads = {}#
int32_t numKVHeads = {}#
int32_t headDim = {}#
int32_t numPages = {}#
int32_t maxPagesPerSeq = {}#
int32_t tokensPerPage = {}#
int32_t windowSizeLeft = {}#
float attentionScale = {}#
float scaleQ = {}#
float scaleK = {}#
float scaleV = {}#
float invScaleO = {}#
float skipSoftmaxThresholdLog2 = {}#

Skip-softmax (BLASST) threshold as log2(lambda); 0.0 = disabled. Only the *_skipsoftmax_paged launchers forward it — the other wrappers have no such argument.

cudaStream_t stream = {}#
struct VitFmhaParams#

Everything the ViT descriptors need, gathered once per CuteDslFMHARunner ViT run() call. The ViT AOT variants are plain MHA, hence a single head count.

Public Members

void const *qPtr = {}#
void const *kPtr = {}#
void const *vPtr = {}#
void *oPtr = {}#
int32_t const *cuSeqLens = {}#
int32_t totalSeqLen = {}#
int32_t numHeads = {}#
int32_t headDim = {}#
int32_t maxSeqLen = {}#
int32_t batchSize = {}#
float scaleSoftmaxLog2 = {}#
float attentionScale = {}#
float scaleOutput = {}#
cudaStream_t stream = {}#
struct FmhaV2LlmParams#

Everything the FMHA-v2 dense LLM descriptors need, gathered once per CuteDslFMHAV2Runner::run() call.

Public Members

void const *qPtr = {}#
void const *kPtr = {}#
void const *vPtr = {}#
void *oPtr = {}#
int32_t const *cuKVSeqLens = {}#
int32_t batchSize = {}#
int32_t seqLenQ = {}#
int32_t kvSeqLen = {}#
int32_t numQHeads = {}#
int32_t numKVHeads = {}#
int32_t headDim = {}#
int32_t windowSizeLeft = {}#
float attentionScale = {}#
float scaleQ = {}#
float scaleK = {}#
float scaleV = {}#
float invScaleO = {}#
cudaStream_t stream = {}#
int32_t const *blockBegin = {}#

Per-query-row [begin, end) block intervals, packed [B, S_q]. Both null for the plain causal/sliding variants; both set for the bidirectional variants.

int32_t const *blockEnd = {}#
struct FmhaV2VitParams#

Everything the FMHA-v2 ViT descriptors need, gathered once per CuteDslFMHAV2Runner ViT run() call. Unlike VitFmhaParams these variants are GQA, so Q and KV head counts differ.

Public Members

void const *qPtr = {}#
void const *kPtr = {}#
void const *vPtr = {}#
void *oPtr = {}#
int32_t const *cuSeqLens = {}#
int32_t totalSeqLen = {}#
int32_t numQHeads = {}#
int32_t numKVHeads = {}#
int32_t headDim = {}#
int32_t maxSeqLen = {}#
int32_t batchSize = {}#
float scaleSoftmaxLog2 = {}#
float attentionScale = {}#
float scaleOutput = {}#
cudaStream_t stream = {}#