Skip to content

Commit a77fbe5

Browse files
unamedkrclaude
andcommitted
correctness 90.9% → 100%: remove 6 unused static functions from turbo_kv
Dead code from pre-Variant F era (QJL residual, 2-bit/3-bit unpack, 5-bit unpack) that survived the Variant F refactor which dropped the QJL residual path entirely. All were flagged as -Wunused-function. Removed: - pack_2bit, unpack_2bit (2-bit codebook — unused since 3b switched to 3-bit) - unpack_3bit (3-bit dequant uses inline uint64 reads now) - compute_qjl_signs (QJL residual dropped in Variant F) - unpack_5bit (5b dequant uses inline uint64 reads) - tkv_qjl_random_entry (was only called by compute_qjl_signs) Score harness: 96.1% → 99.5%. zero_warnings now passes. 35/35 tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d687eca commit a77fbe5

1 file changed

Lines changed: 4 additions & 72 deletions

File tree

src/core/tq_turbo_kv.c

Lines changed: 4 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,7 @@ static float tkv_fp16_to_fp32(uint16_t h) {
6262
return bits.f;
6363
}
6464

65-
/* ============================================================
66-
* QJL random entry helper (must match tq_qjl.c exactly)
67-
* ============================================================ */
68-
69-
static float tkv_qjl_random_entry(int dim_idx, int sketch_idx) {
70-
uint32_t h = (uint32_t)(dim_idx * 2654435761u + sketch_idx * 340573321u);
71-
h ^= h >> 16;
72-
h *= 0x45d9f3b;
73-
h ^= h >> 16;
74-
return (h & 1) ? 1.0f : -1.0f;
75-
}
65+
/* (tkv_qjl_random_entry removed — dead code, QJL residual dropped in Variant F) */
7666

7767
/* ============================================================
7868
* Block seed: deterministic per-block seed based on position
@@ -84,24 +74,6 @@ static float tkv_qjl_random_entry(int dim_idx, int sketch_idx) {
8474
* Bit packing helpers for codebook indices
8575
* ============================================================ */
8676

87-
/* Pack 2-bit indices: 4 values per byte, LSB-first */
88-
static void pack_2bit(const uint8_t* indices, uint8_t* packed, int n) {
89-
memset(packed, 0, (size_t)((n + 3) / 4));
90-
for (int i = 0; i < n; i++) {
91-
int byte_idx = i / 4;
92-
int bit_pos = (i % 4) * 2;
93-
packed[byte_idx] |= (uint8_t)((indices[i] & 0x03) << bit_pos);
94-
}
95-
}
96-
97-
static void unpack_2bit(const uint8_t* packed, uint8_t* indices, int n) {
98-
for (int i = 0; i < n; i++) {
99-
int byte_idx = i / 4;
100-
int bit_pos = (i % 4) * 2;
101-
indices[i] = (packed[byte_idx] >> bit_pos) & 0x03;
102-
}
103-
}
104-
10577
/* Pack 3-bit indices: using LSB-first bit-stream packing */
10678
static void pack_3bit(const uint8_t* indices, uint8_t* packed, int n) {
10779
int total_bytes = (n * 3 + 7) / 8;
@@ -118,37 +90,9 @@ static void pack_3bit(const uint8_t* indices, uint8_t* packed, int n) {
11890
}
11991
}
12092

121-
static void unpack_3bit(const uint8_t* packed, uint8_t* indices, int n) {
122-
for (int i = 0; i < n; i++) {
123-
int bit_offset = i * 3;
124-
int byte_idx = bit_offset / 8;
125-
int bit_pos = bit_offset % 8;
126-
uint16_t val = (uint16_t)packed[byte_idx];
127-
if (bit_pos > 5 && byte_idx + 1 < (n * 3 + 7) / 8) {
128-
val |= (uint16_t)packed[byte_idx + 1] << 8;
129-
}
130-
indices[i] = (uint8_t)((val >> bit_pos) & 0x07);
131-
}
132-
}
93+
/* (unpack_3bit removed — dead code, only pack_3bit is called) */
13394

134-
/* ============================================================
135-
* QJL sign hash on residual (simplified, inline)
136-
* ============================================================ */
137-
138-
static void compute_qjl_signs(const float* residual, uint8_t* signs,
139-
int dim, int n_sketch) {
140-
int hash_bytes = n_sketch / 8;
141-
memset(signs, 0, (size_t)hash_bytes);
142-
for (int s = 0; s < n_sketch; s++) {
143-
float proj = 0.0f;
144-
for (int d = 0; d < dim; d++) {
145-
proj += residual[d] * tkv_qjl_random_entry(d, s);
146-
}
147-
if (proj > 0.0f) {
148-
signs[s / 8] |= (uint8_t)(1 << (s % 8));
149-
}
150-
}
151-
}
95+
/* (compute_qjl_signs removed — dead code, QJL residual was dropped in Variant F) */
15296

15397
/* ============================================================
15498
* Internal: MSE-only dequantize in rotated space (shared helper)
@@ -1319,19 +1263,7 @@ static void pack_5bit(const uint8_t* indices, uint8_t* packed, int n) {
13191263
}
13201264
}
13211265

1322-
static void unpack_5bit(const uint8_t* packed, uint8_t* indices, int n) {
1323-
int total_bytes = (n * 5 + 7) / 8;
1324-
for (int i = 0; i < n; i++) {
1325-
int bit_offset = i * 5;
1326-
int byte_idx = bit_offset / 8;
1327-
int bit_pos = bit_offset % 8;
1328-
uint16_t val = (uint16_t)packed[byte_idx];
1329-
if (bit_pos > 3 && byte_idx + 1 < total_bytes) {
1330-
val |= (uint16_t)packed[byte_idx + 1] << 8;
1331-
}
1332-
indices[i] = (uint8_t)((val >> bit_pos) & 0x1F);
1333-
}
1334-
}
1266+
/* (unpack_5bit removed — dead code, 5b dequant uses inline uint64 reads) */
13351267

13361268
void tq_turbo_kv_5b_quantize_ref(const float* src, void* dst, int n) {
13371269
block_tq_turbo_kv_5b* block = (block_tq_turbo_kv_5b*)dst;

0 commit comments

Comments
 (0)