GEMM/GEMV kernels with Q5_K quantized weights. More...
#include <stdint.h>#include <stddef.h>#include <string.h>#include <stdlib.h>#include "ckernel_quant.h"Go to the source code of this file.
Macros | |
| #define | CK_Q5K_STACK_Q8_BLOCKS 128 |
| #define | QK_K 256 |
Functions | |
| void | ck_q5_k_prepare_weight (const void *src, void *dst, int N, int K) |
| size_t | ck_q5_k_prepared_block_size (void) |
| static int | ck_q5k_debug_fp32_fallback (void) |
| static int | ck_q5k_debug_generic_dot (void) |
| static float | dot_q5_k_q8_k_row (const block_q5_K *w, const block_q8_K *x, int nb) |
| void | gemm_nt_q5_k (const float *A, const void *B, const float *bias, float *C, int M, int N, int K) |
| void | gemm_nt_q5_k_prepared (const float *A, const void *B_prepared, const float *bias, float *C, int M, int N, int K) |
| void | gemm_nt_q5_k_prepared_m4 (const float *A, const void *B_prepared, const float *bias, float *C, int M, int N, int K) |
| void | gemm_nt_q5_k_prepared_q8_m4_nrange (const void *A_q8, const void *B_prepared, const float *bias, float *C, int M, int N, int K, int n_begin, int n_end) |
| void | gemm_nt_q5_k_q8_k (const void *A_q8, const void *B, const float *bias, float *C, int M, int N, int K) |
| void | gemm_nt_q5_k_q8_k_ref (const void *A_q8, const void *B, const float *bias, float *C, int M, int N, int K) |
| void | gemm_nt_q5_k_ref (const float *A, const void *B, const float *bias, float *C, int M, int N, int K) |
| static void | gemm_nt_q5_k_ref_fp32 (const float *A, const void *B, const float *bias, float *C, int M, int N, int K) |
| void | gemm_q5_k_q8_k_compact_rows4 (float *output, int output_stride, const void *weights, const void *const input_rows[4], int rows, int output_dim, int input_dim) |
| void | gemv_q5_k (float *y, const void *W, const float *x, int M, int K) |
| void | gemv_q5_k_q8_k (float *y, const void *W, const void *x_q8, int M, int K) |
| void | gemv_q5_k_q8_k_ref (float *y, const void *W, const void *x_q8, int M, int K) |
| void | gemv_q5_k_ref (float *y, const void *W, const float *x, int M, int K) |
| static void | gemv_q5_k_ref_fp32 (float *y, const void *W, const float *x, int M, int K) |
| static uint8_t | q5_k_quant_value (const block_q5_K *block, int subblock, int i) |
| void | quantize_row_q8_k (const float *x, void *vy, int k) |
| static void | unpack_q5_k_scales (const uint8_t *scales, uint8_t *sc, uint8_t *m) |
GEMM/GEMV kernels with Q5_K quantized weights.
After changes: make test && make llamacpp-parity-full
Implements matrix multiplication where:
Q5_K Format (256 weights per super-block):
Total: 2 + 2 + 12 + 32 + 128 = 176 bytes per 256 weights = 5.5 bits/weight
Dequantization formula (matches llama.cpp): w = d * scale * q - dmin * mins where q = qs_val | (qh_bit << 4) = 5-bit value [0, 31]
Definition in file gemm_kernels_q5_k.c.
| #define CK_Q5K_STACK_Q8_BLOCKS 128 |
Definition at line 46 of file gemm_kernels_q5_k.c.
| #define QK_K 256 |
Definition at line 45 of file gemm_kernels_q5_k.c.
| void ck_q5_k_prepare_weight | ( | const void * | src, |
| void * | dst, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 131 of file gemm_kernels_q5_k.c.
References q5_k_quant_value(), QK_K, and unpack_q5_k_scales().
| size_t ck_q5_k_prepared_block_size | ( | void | ) |
Definition at line 126 of file gemm_kernels_q5_k.c.
|
static |
Definition at line 48 of file gemm_kernels_q5_k.c.
Referenced by gemm_nt_q5_k_ref(), and gemv_q5_k_ref().
|
static |
Definition at line 58 of file gemm_kernels_q5_k.c.
Referenced by dot_q5_k_q8_k_row().
|
static |
Definition at line 478 of file gemm_kernels_q5_k.c.
References block_q8_K::bsums, CK_FP16_TO_FP32, ck_q5k_debug_generic_dot(), block_q8_K::d, QK_K, and block_q8_K::qs.
Referenced by gemm_nt_q5_k_q8_k_ref(), and gemv_q5_k_q8_k_ref().
| void gemm_nt_q5_k | ( | const float * | A, |
| const void * | B, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 1001 of file gemm_kernels_q5_k.c.
References C, and gemm_nt_q5_k_ref().
| void gemm_nt_q5_k_prepared | ( | const float * | A, |
| const void * | B_prepared, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 705 of file gemm_kernels_q5_k.c.
References C, CK_Q5K_STACK_Q8_BLOCKS, QK_K, and quantize_row_q8_k().
| void gemm_nt_q5_k_prepared_m4 | ( | const float * | A, |
| const void * | B_prepared, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 732 of file gemm_kernels_q5_k.c.
References C, CK_Q5K_STACK_Q8_BLOCKS, QK_K, and quantize_row_q8_k().
| void gemm_nt_q5_k_prepared_q8_m4_nrange | ( | const void * | A_q8, |
| const void * | B_prepared, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K, | ||
| int | n_begin, | ||
| int | n_end | ||
| ) |
Definition at line 769 of file gemm_kernels_q5_k.c.
References C, CK_Q5K_STACK_Q8_BLOCKS, and QK_K.
| void gemm_nt_q5_k_q8_k | ( | const void * | A_q8, |
| const void * | B, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 914 of file gemm_kernels_q5_k.c.
References C, and gemm_nt_q5_k_q8_k_ref().
| void gemm_nt_q5_k_q8_k_ref | ( | const void * | A_q8, |
| const void * | B, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 678 of file gemm_kernels_q5_k.c.
References C, dot_q5_k_q8_k_row(), and QK_K.
Referenced by gemm_nt_q5_k_q8_k(), and gemm_nt_q5_k_ref().
| void gemm_nt_q5_k_ref | ( | const float * | A, |
| const void * | B, | ||
| const float * | bias, | ||
| float * | C, | ||
| int | M, | ||
| int | N, | ||
| int | K | ||
| ) |
Definition at line 855 of file gemm_kernels_q5_k.c.
References C, ck_q5k_debug_fp32_fallback(), CK_Q5K_STACK_Q8_BLOCKS, gemm_nt_q5_k_q8_k_ref(), gemm_nt_q5_k_ref_fp32(), QK_K, and quantize_row_q8_k().
Referenced by gemm_nt_q5_k().
|
static |
Definition at line 603 of file gemm_kernels_q5_k.c.
References C, CK_FP16_TO_FP32, q5_k_quant_value(), QK_K, and unpack_q5_k_scales().
Referenced by gemm_nt_q5_k_ref().
| void gemm_q5_k_q8_k_compact_rows4 | ( | float * | output, |
| int | output_stride, | ||
| const void * | weights, | ||
| const void *const | input_rows[4], | ||
| int | rows, | ||
| int | output_dim, | ||
| int | input_dim | ||
| ) |
Definition at line 937 of file gemm_kernels_q5_k.c.
References gemv_q5_k_q8_k(), and QK_K.
Referenced by ck_moe_q4k_q5k_bucket_work().
| void gemv_q5_k | ( | float * | y, |
| const void * | W, | ||
| const float * | x, | ||
| int | M, | ||
| int | K | ||
| ) |
Definition at line 982 of file gemm_kernels_q5_k.c.
References gemv_q5_k_ref().
| void gemv_q5_k_q8_k | ( | float * | y, |
| const void * | W, | ||
| const void * | x_q8, | ||
| int | M, | ||
| int | K | ||
| ) |
Definition at line 892 of file gemm_kernels_q5_k.c.
References gemv_q5_k_q8_k_ref().
Referenced by ck_moe_q4k_q5k_route_work(), gemm_q5_k_q8_k_compact_rows4(), and moe_swiglu_expert_forward_q4k_q5k_workspace().
| void gemv_q5_k_q8_k_ref | ( | float * | y, |
| const void * | W, | ||
| const void * | x_q8, | ||
| int | M, | ||
| int | K | ||
| ) |
Definition at line 656 of file gemm_kernels_q5_k.c.
References dot_q5_k_q8_k_row(), and QK_K.
Referenced by gemv_q5_k_q8_k(), and gemv_q5_k_ref().
| void gemv_q5_k_ref | ( | float * | y, |
| const void * | W, | ||
| const float * | x, | ||
| int | M, | ||
| int | K | ||
| ) |
Definition at line 819 of file gemm_kernels_q5_k.c.
References ck_q5k_debug_fp32_fallback(), CK_Q5K_STACK_Q8_BLOCKS, gemv_q5_k_q8_k_ref(), gemv_q5_k_ref_fp32(), QK_K, and quantize_row_q8_k().
Referenced by gemv_q5_k().
|
static |
Definition at line 572 of file gemm_kernels_q5_k.c.
References CK_FP16_TO_FP32, q5_k_quant_value(), QK_K, and unpack_q5_k_scales().
Referenced by gemv_q5_k_ref().
|
inlinestatic |
Definition at line 119 of file gemm_kernels_q5_k.c.
Referenced by ck_q5_k_prepare_weight(), gemm_nt_q5_k_ref_fp32(), and gemv_q5_k_ref_fp32().
| void quantize_row_q8_k | ( | const float * | x, |
| void * | vy, | ||
| int | k | ||
| ) |
Definition at line 121 of file gemm_kernels_q4k_q8k.c.
Referenced by gemm_nt_q5_k_prepared(), gemm_nt_q5_k_prepared_m4(), gemm_nt_q5_k_ref(), and gemv_q5_k_ref().
|
inlinestatic |
Definition at line 95 of file gemm_kernels_q5_k.c.
Referenced by ck_q5_k_prepare_weight(), gemm_nt_q5_k_ref_fp32(), and gemv_q5_k_ref_fp32().