19#ifndef MEGA_FUSED_ATTENTION_H
20#define MEGA_FUSED_ATTENTION_H
32#ifndef MEGA_FUSE_Q_TILE
33#define MEGA_FUSE_Q_TILE 64
36#ifndef MEGA_FUSE_KV_TILE
37#define MEGA_FUSE_KV_TILE 64
83 const float *residual,
84 const float *ln1_gamma,
85 const float *wq,
const float *bq,
86 const float *wk,
const float *bk,
87 const float *wv,
const float *bv,
88 const float *wo,
const float *bo,
91 const float *rope_cos,
92 const float *rope_sin,
95 int aligned_embed_dim,
112 const float *residual,
113 const float *ln1_gamma,
114 const float *wq,
const float *bq,
115 const float *wk,
const float *bk,
116 const float *wv,
const float *bv,
117 const float *wo,
const float *bo,
120 const float *rope_cos,
121 const float *rope_sin,
124 int aligned_embed_dim,
128 int aligned_head_dim,
131 float *q_output_workspace,
132 size_t q_output_workspace_bytes,
134 size_t kv_workspace_bytes
170 const float *residual,
171 const float *ln1_gamma,
172 const void *wq,
const float *bq,
CKDataType wq_dt,
173 const void *wk,
const float *bk,
CKDataType wk_dt,
174 const void *wv,
const float *bv,
CKDataType wv_dt,
175 const void *wo,
const float *bo,
CKDataType wo_dt,
178 const float *rope_cos,
179 const float *rope_sin,
184 int aligned_embed_dim,
188 int aligned_head_dim,
201 const float *residual,
202 const float *ln1_gamma,
203 const void *wq,
const float *bq,
CKDataType wq_dt,
204 const void *wk,
const float *bk,
CKDataType wk_dt,
205 const void *wv,
const float *bv,
CKDataType wv_dt,
206 const void *wo,
const float *bo,
CKDataType wo_dt,
209 const float *rope_cos,
210 const float *rope_sin,
215 int aligned_embed_dim,
219 int aligned_head_dim,
226 int aligned_embed_dim,
228 int aligned_head_dim);
232 int aligned_embed_dim,
234 int aligned_head_dim);
243 const float *attn_out,
244 const float *residual,
245 const float *ln2_gamma,
246 const void *wo,
const float *bo,
CKDataType wo_dt,
247 const void *w1,
const float *b1,
CKDataType w1_dt,
248 const void *w2,
const float *b2,
CKDataType w2_dt,
251 int aligned_embed_dim,
253 int aligned_head_dim,
254 int intermediate_dim,
255 int aligned_intermediate_dim,
262 int aligned_embed_dim,
264 int aligned_head_dim,
265 int aligned_intermediate_dim);
301 const float *rope_cos,
302 const float *rope_sin,
CKDataType
Supported data types in C-Kernel-Engine.
size_t mega_fused_attention_prefill_q8_0_scratch_size(int tokens, int aligned_embed_dim, int num_heads, int aligned_head_dim)
Get scratch buffer size for mega_fused_attention_prefill_q8_0.
size_t mega_fused_attention_prefill_scratch_size(int tokens, int aligned_embed_dim, int num_heads, int aligned_head_dim)
Get scratch buffer size for mega_fused_attention_prefill.
void mega_fused_attention_prefill(float *output, const float *input, const float *residual, const float *ln1_gamma, const void *wq, const float *bq, CKDataType wq_dt, const void *wk, const float *bk, CKDataType wk_dt, const void *wv, const float *bv, CKDataType wv_dt, const void *wo, const float *bo, CKDataType wo_dt, float *kv_cache_k, float *kv_cache_v, const float *rope_cos, const float *rope_sin, int start_pos, int tokens, int cache_capacity, int embed_dim, int aligned_embed_dim, int num_heads, int num_kv_heads, int head_dim, int aligned_head_dim, float eps, void *scratch)
Mega-fused attention for prefill mode (multiple tokens)
void mega_fuse_report_stats(int hidden, int num_layers, int seq_len)
Report memory savings from mega-fusion.
void mega_fuse_rmsnorm_qkv_rope(float *q_out, float *k_out, float *v_out, const float *input, const float *gamma, const float *W_qkv, const float *b_qkv, const float *rope_cos, const float *rope_sin, int pos, int hidden, int num_heads, int num_kv_heads, int head_dim, int max_seq, float eps)
Phase 2: Fused RMSNorm + QKV + RoPE.
void mega_fuse_get_optimal_tiles(int *q_tile, int *kv_tile, int head_dim)
Get optimal tile sizes for current CPU.
void mega_fused_attention_decode(float *output, const float *input, const float *residual, const float *ln1_gamma, const float *wq, const float *bq, const float *wk, const float *bk, const float *wv, const float *bv, const float *wo, const float *bo, float *kv_cache_k, float *kv_cache_v, const float *rope_cos, const float *rope_sin, int pos, int embed_dim, int aligned_embed_dim, int num_heads, int num_kv_heads, int head_dim, int aligned_head_dim, int cache_capacity, float eps)
Mega-fused attention for decode mode (single token)
void mega_fused_outproj_mlp_prefill(float *output, const float *attn_out, const float *residual, const float *ln2_gamma, const void *wo, const float *bo, CKDataType wo_dt, const void *w1, const float *b1, CKDataType w1_dt, const void *w2, const float *b2, CKDataType w2_dt, int tokens, int embed_dim, int aligned_embed_dim, int num_heads, int aligned_head_dim, int intermediate_dim, int aligned_intermediate_dim, float eps, void *scratch)
Mega-fused post-attention block (out-proj + RMSNorm2 + MLP) for prefill.
void mega_fused_attention_decode_workspace(float *output, const float *input, const float *residual, const float *ln1_gamma, const float *wq, const float *bq, const float *wk, const float *bk, const float *wv, const float *bv, const float *wo, const float *bo, float *kv_cache_k, float *kv_cache_v, const float *rope_cos, const float *rope_sin, int pos, int embed_dim, int aligned_embed_dim, int num_heads, int num_kv_heads, int head_dim, int aligned_head_dim, int cache_capacity, float eps, float *q_output_workspace, size_t q_output_workspace_bytes, float *kv_workspace, size_t kv_workspace_bytes)
Full mega-fused attention for decode.
size_t mega_fused_outproj_mlp_prefill_scratch_size(int tokens, int aligned_embed_dim, int num_heads, int aligned_head_dim, int aligned_intermediate_dim)
Get scratch buffer size for mega_fused_outproj_mlp_prefill.
void mega_fused_attention_prefill_q8_0(float *output, const float *input, const float *residual, const float *ln1_gamma, const void *wq, const float *bq, CKDataType wq_dt, const void *wk, const float *bk, CKDataType wk_dt, const void *wv, const float *bv, CKDataType wv_dt, const void *wo, const float *bo, CKDataType wo_dt, float *kv_cache_k, float *kv_cache_v, const float *rope_cos, const float *rope_sin, int start_pos, int tokens, int cache_capacity, int embed_dim, int aligned_embed_dim, int num_heads, int num_kv_heads, int head_dim, int aligned_head_dim, float eps, void *scratch)
Mega-fused prefill attention kernel (Q8_0 out-proj)
void mega_fuse_rmsnorm_qkv(float *q_out, float *k_out, float *v_out, const float *input, const float *gamma, const float *W_qkv, const float *b_qkv, int hidden, int num_heads, int num_kv_heads, int head_dim, float eps)
Phase 1: Fused RMSNorm + QKV (intermediates in registers)