// File: mha.h
#pragma once
#include <cstdint>

// Harness contract for the llama.cpp (ggml) mha baseline.
// Called by armbench_entry_mha (binding.cpp); implemented by kernel.cpp.
// Q is row-major bf16 [M, n_heads, head_dim]; K/V are row-major bf16
// [S, kv_heads, head_dim]; out is row-major fp32 [M, n_heads, head_dim].
// Non-causal softmax(Q·K^T / sqrt(head_dim))·V per head.
int armbench_llamacpp_mha(const void* Q, const void* K, const void* V,
                          float* out, int64_t M, int64_t S,
                          int64_t n_heads, int64_t head_dim, int64_t kv_heads);