From 332049da857e75ef9e6670c6c96bbc7a39558022 Mon Sep 17 00:00:00 2001 From: Iwan Kawrakow Date: Sun, 13 Oct 2024 13:47:46 +0300 Subject: [PATCH] I somehow broke iq2_k on Metal? - fix dequantize --- ggml/src/ggml-metal.metal | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-metal.metal b/ggml/src/ggml-metal.metal index 5ed424d3..c6951194 100644 --- a/ggml/src/ggml-metal.metal +++ b/ggml/src/ggml-metal.metal @@ -7705,10 +7705,10 @@ template void dequantize_iq2_k(device const block_iq2_k * xb, short il, thread type4x4 & reg) { // il is 0...15 for QK_K = 256 device const uint32_t * q32 = (device const uint32_t *)xb->qs + 8*(il/8) + 4*(il&1); - half d = xb->d * (2*((xb->scales[il/2] >> 4*(il&1)) & 0xf) - 15); + half d = xb->d * (((xb->scales[il/2] >> 4*(il&1)) & 0xf) - 8); - constant int8_t * int_values = iq2nl_values + 4*((xb->extra >> il) & 1); - half4 values = { d * int_values[0], d * int_values[1], d * int_values[2], d * int_values[3] }; + constant half4 * half_values = (constant half4 *)kvalues_iq2k_h; + half4 values = half_values[(xb->extra >> il) & 1] * d; const int shift = 2*((il%8)/2); uint32_t aux32;