diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl index d902ff3a67..adcc0cbb52 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs.glsl @@ -244,7 +244,7 @@ vec2 dequantize(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq2xxs_grid[qs][(iqs % 8) / 4] >> (8 * (iqs % 4))); + const u8vec4 grid = unpack8(iq2_grid[qs][(iqs % 8) / 4] >> (8 * (iqs % 4))); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; return db * vec2( @@ -264,7 +264,7 @@ vec4 dequantize4(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq2xxs_grid[qs][(iqs % 8) / 4] >> (8 * (iqs % 4))); + const u8vec4 grid = unpack8(iq2_grid[qs][(iqs % 8) / 4] >> (8 * (iqs % 4))); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; bool sign2 = (sign & 4) != 0; @@ -287,7 +287,7 @@ vec2 dequantize(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq2xs_grid[qs & 511][(iqs % 8) / 4] >> (8 * (iqs % 4))); + const u8vec4 grid = unpack8(iq2_grid[qs & 511][(iqs % 8) / 4] >> (8 * (iqs % 4))); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; return db * vec2( @@ -303,7 +303,7 @@ vec4 dequantize4(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq2xs_grid[qs & 511][(iqs % 8) / 4] >> (8 * (iqs % 4))); + const u8vec4 grid = unpack8(iq2_grid[qs & 511][(iqs % 8) / 4] >> (8 * (iqs % 4))); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; bool sign2 = (sign & 4) != 0; @@ -329,7 +329,7 @@ vec2 dequantize(uint ib, uint iqs, uint a_offset) { const uint sign = data_a[a_offset + ib].qs[QUANT_K / 8 + ib8] >> (iqs % 8); const float db = 0.25 * (0.5 + scale); - const u8vec4 grid = unpack8(iq2s_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(iqs % 8) / 4]); + const u8vec4 grid = unpack8(iq2_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(iqs % 8) / 4]); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; return db * vec2( @@ -348,7 +348,7 @@ vec4 dequantize4(uint ib, uint iqs, uint a_offset) { const uint sign = data_a[a_offset + ib].qs[QUANT_K / 8 + ib8] >> (iqs % 8); const float db = 0.25 * (0.5 + scale); - const u8vec4 grid = unpack8(iq2s_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(iqs % 8) / 4]); + const u8vec4 grid = unpack8(iq2_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(iqs % 8) / 4]); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; bool sign2 = (sign & 4) != 0; @@ -376,7 +376,7 @@ vec2 dequantize(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq3xxs_grid[qs] >> (8 * (iqs % 4))); + const u8vec4 grid = unpack8(iq3_grid[qs] >> (8 * (iqs % 4))); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; return db * vec2( @@ -396,7 +396,7 @@ vec4 dequantize4(uint ib, uint iqs, uint a_offset) { // Add parity bit const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint sign = sign8 >> (iqs % 8); - const u8vec4 grid = unpack8(iq3xxs_grid[qs]); + const u8vec4 grid = unpack8(iq3_grid[qs]); bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; bool sign2 = (sign & 4) != 0; @@ -419,7 +419,7 @@ vec2 dequantize(uint ib, uint iqs, uint a_offset) { bool sign0 = (sign & 1) != 0; bool sign1 = (sign & 2) != 0; const float db = 1 + 2 * ((scale >> (4 * ((iqs / 32) & 1))) & 0xf); - const uint32_t grid = iq3s_grid[qs | ((qh << (8 - ((iqs / 4) % 8))) & 256)] >> (8 * (iqs % 4)); + const uint32_t grid = iq3_grid[qs | ((qh << (8 - ((iqs / 4) % 8))) & 256)] >> (8 * (iqs % 4)); return db * vec2( int(grid & 0xFF) * (sign0 ? -1.0 : 1.0), int((grid >> 8) & 0xFF) * (sign1 ? -1.0 : 1.0) @@ -437,7 +437,7 @@ vec4 dequantize4(uint ib, uint iqs, uint a_offset) { bool sign2 = (sign & 4) != 0; bool sign3 = (sign & 8) != 0; const float db = 1 + 2 * ((scale >> (4 * (ib32 & 1))) & 0xf); - const uint32_t grid = iq3s_grid[qs | ((qh << (8 - ib4 % 8)) & 256)] >> (8 * (iqs % 4)); + const uint32_t grid = iq3_grid[qs | ((qh << (8 - ib4 % 8)) & 256)] >> (8 * (iqs % 4)); return db * vec4( int(grid & 0xFF) * (sign0 ? -1.0 : 1.0), int((grid >> 8) & 0xFF) * (sign1 ? -1.0 : 1.0), diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl index 1c45c6a78c..140c1a1c75 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_funcs_cm2.glsl @@ -898,7 +898,7 @@ float16_t dequantFuncIQ2_XXS(const in decodeBufIQ2_XXS bl, const in uint blockCo uint sign = bitfieldExtract(signscale, 7 * int(ib8), 7); sign |= bitCount(sign) << 7; - uint g2 = iq2xxs_grid[qs][(idx & 4) >> 2]; + uint g2 = iq2_grid[qs][(idx & 4) >> 2]; g2 >>= (idx & 2) * 8; const vec2 g = vec2(unpack8(g2)); @@ -923,7 +923,7 @@ f16vec4 dequantFuncIQ2_XXS_v(const in decodeBufIQ2_XXS bl, const in uint blockCo sign |= bitCount(sign) << 7; const uint sb = sign >> (idx & 7u); - const uint g2 = iq2xxs_grid[qs][(idx & 4) >> 2]; + const uint g2 = iq2_grid[qs][(idx & 4) >> 2]; const u8vec4 g = unpack8(g2); return f16vec4( @@ -953,7 +953,7 @@ float16_t dequantFuncIQ2_XS(const in decodeBufIQ2_XS bl, const in uint blockCoor uint sign = uint(qs >> 9); sign |= bitCount(sign) << 7; - uint g2 = iq2xs_grid[qs & 0x1FF][(idx & 4) >> 2]; + uint g2 = iq2_grid[qs & 0x1FF][(idx & 4) >> 2]; g2 >>= (idx & 2) * 8; const vec2 g = vec2(unpack8(g2)); @@ -976,7 +976,7 @@ f16vec4 dequantFuncIQ2_XS_v(const in decodeBufIQ2_XS bl, const in uint blockCoor sign |= bitCount(sign) << 7; const uint sb = sign >> (idx & 7u); - const uint g2 = iq2xs_grid[qs & 0x1FF][(idx & 4) >> 2]; + const uint g2 = iq2_grid[qs & 0x1FF][(idx & 4) >> 2]; const u8vec4 g = unpack8(g2); return f16vec4( @@ -1008,7 +1008,7 @@ float16_t dequantFuncIQ2_S(const in decodeBufIQ2_S bl, const in uint blockCoords const float d = float(bl.block.d); const float db = d * 0.25 * (0.5 + scale); const ivec2 sign01 = 1 - (2 & ivec2(sign << 1, sign)); - uint g2 = iq2s_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(idx & 4) >> 2]; + uint g2 = iq2_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(idx & 4) >> 2]; g2 >>= (idx & 2) * 8; const vec2 v = db * vec2(sign01) * vec2(unpack8(g2)); return float16_t(v[idx & 1]); @@ -1030,7 +1030,7 @@ f16vec4 dequantFuncIQ2_S_v(const in decodeBufIQ2_S bl, const in uint blockCoords const float d = float(bl.block.d); const float db = d * 0.25 * (0.5 + scale); - const uint g2 = iq2s_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(idx & 4) >> 2]; + const uint g2 = iq2_grid[qs | ((qh << (8 - qhshift)) & 0x300)][(idx & 4) >> 2]; const u8vec4 g = unpack8(g2); return f16vec4( @@ -1068,7 +1068,7 @@ float16_t dequantFuncIQ3_XXS(const in decodeBufIQ3_XXS bl, const in uint blockCo const uint32_t sign7 = bitfieldExtract(signs, 7 * (int(iqs / 2) % 4), 7); const uint sign = (sign7 | (bitCount(sign7) << 7)) >> (idx & 0x6); const ivec2 sign01 = ivec2(1 - (2 & ivec2(sign << 1, sign))); - const uint grid = iq3xxs_grid[qs] >> (16 * ((idx & 2) >> 1)); + const uint grid = iq3_grid[qs] >> (16 * ((idx & 2) >> 1)); const vec2 v = db * vec2(sign01) * vec2(unpack8(grid).xy); return float16_t(v[idx & 1]); } @@ -1089,7 +1089,7 @@ f16vec4 dequantFuncIQ3_XXS_v(const in decodeBufIQ3_XXS bl, const in uint blockCo const uint sign7 = bitfieldExtract(signs, 7 * (int(iqs / 2) % 4), 7); const uint sb = (sign7 | (bitCount(sign7) << 7)) >> (idx & 0x6u); - const uint grid = iq3xxs_grid[qs]; + const uint grid = iq3_grid[qs]; const u8vec4 g = unpack8(grid); return f16vec4( @@ -1119,7 +1119,7 @@ float16_t dequantFuncIQ3_S(const in decodeBufIQ3_S bl, const in uint blockCoords const uint scale = bl.block.scales[iqs / 16]; const ivec2 sign01 = ivec2(1 - (2 & ivec2(sign << 1, sign))); const float db = d * (1 + 2 * ((scale >> (4 * (iqh & 1))) & 0xf)); - const uint32_t grid = iq3s_grid[qs | ((qh << (8 - (iqs % 8))) & 256)] >> ((idx & 2) << 3); + const uint32_t grid = iq3_grid[qs | ((qh << (8 - (iqs % 8))) & 256)] >> ((idx & 2) << 3); const vec2 v = db * vec2(sign01) * vec2(unpack8(grid).xy); return float16_t(v[idx & 1]); @@ -1139,7 +1139,7 @@ f16vec4 dequantFuncIQ3_S_v(const in decodeBufIQ3_S bl, const in uint blockCoords const uint scale = bl.block.scales[iqs / 16]; const float db = d * (1 + 2 * ((scale >> (4 * (iqh & 1))) & 0xf)); - const uint grid = iq3s_grid[qs | ((qh << (8 - (iqs % 8))) & 256)]; + const uint grid = iq3_grid[qs | ((qh << (8 - (iqs % 8))) & 256)]; const u8vec4 g = unpack8(grid); return f16vec4( diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp index 78490162cd..f834b78562 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_s.comp @@ -29,7 +29,7 @@ void main() { uint qs = data_a[ib].qs[4 * ib32 + l]; const uint8_t sign = data_a[ib].qs[QUANT_K / 8 + 4 * ib32 + l]; qs |= (qh << (8 - 2 * l)) & 0x300; - const uvec2 grid = iq2s_grid[qs]; + const uvec2 grid = iq2_grid[qs]; const u8vec4 grid0 = unpack8(grid.x); const u8vec4 grid1 = unpack8(grid.y); data_b[b_idx + 8 * l + 0] = D_TYPE(db[l/2] * grid0.x * ((sign & 1) != 0 ? -1.0 : 1.0)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp index 9b8ce0a7f8..f5bba538f3 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xs.comp @@ -28,7 +28,7 @@ void main() { uint16_t qs = data_a[ib].qs[4 * ib32 + l]; const uint sign7 = qs >> 9; const uint sign8 = sign7 | (bitCount(sign7) << 7); // parity bit - const uvec2 grid = iq2xs_grid[qs & 511]; + const uvec2 grid = iq2_grid[qs & 511]; const u8vec4 grid0 = unpack8(grid.x); const u8vec4 grid1 = unpack8(grid.y); data_b[b_idx + 8 * l + 0] = D_TYPE(db[l/2] * grid0.x * ((sign8 & 1) != 0 ? -1.0 : 1.0)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp index aacf07d0f8..dca5b84c6a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq2_xxs.comp @@ -34,7 +34,7 @@ void main() { const uint sign7 = bitfieldExtract(signscale, 7 * int(l), 7); const uint sign8 = sign7 | (bitCount(sign7) << 7); // parity bit const uint qs = data_a[ib].qs[8 * is + l]; - const uvec2 grid = iq2xxs_grid[qs]; + const uvec2 grid = iq2_grid[qs]; const u8vec4 grid0 = unpack8(grid.x); const u8vec4 grid1 = unpack8(grid.y); data_b[b_idx + 8 * l + 0] = D_TYPE(db * grid0.x * ((sign8 & 1) != 0 ? -1.0 : 1.0)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp index f2c20b1d2c..b18a9d0cd1 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_s.comp @@ -31,7 +31,7 @@ void main() { const uint qs = data_a[ib].qs[iqs]; const uint gidx = qs | ((qh << (8 - l)) & 256); const uint8_t signs = data_a[ib].signs[iqs / 2] >> (4 * (l & 1)); - const u8vec4 grid = unpack8(iq3s_grid[gidx]); + const u8vec4 grid = unpack8(iq3_grid[gidx]); data_b[b_idx + 4 * l + 0] = D_TYPE(db * grid.x * ((signs & 1) != 0 ? -1.0 : 1.0)); data_b[b_idx + 4 * l + 1] = D_TYPE(db * grid.y * ((signs & 2) != 0 ? -1.0 : 1.0)); data_b[b_idx + 4 * l + 2] = D_TYPE(db * grid.z * ((signs & 4) != 0 ? -1.0 : 1.0)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp index 671c1f4a0d..60c5318e3b 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/dequant_iq3_xxs.comp @@ -37,8 +37,8 @@ void main() { const uint sign8 = sign7 | (bitCount(sign7) << 7); const uint qs0 = data_a[ib].qs[8 * is + 2 * l]; const uint qs1 = data_a[ib].qs[8 * is + 2 * l + 1]; - const u8vec4 grid0 = unpack8(iq3xxs_grid[qs0]); - const u8vec4 grid1 = unpack8(iq3xxs_grid[qs1]); + const u8vec4 grid0 = unpack8(iq3_grid[qs0]); + const u8vec4 grid1 = unpack8(iq3_grid[qs1]); data_b[b_idx + 8 * l + 0] = D_TYPE(db * grid0.x * ((sign8 & 1) != 0 ? -1.0 : 1.0)); data_b[b_idx + 8 * l + 1] = D_TYPE(db * grid0.y * ((sign8 & 2) != 0 ? -1.0 : 1.0)); data_b[b_idx + 8 * l + 2] = D_TYPE(db * grid0.z * ((sign8 & 4) != 0 ? -1.0 : 1.0)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/iq_shmem_init.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/iq_shmem_init.glsl index 4c6aaedbda..5fb2ba9ab8 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/iq_shmem_init.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/iq_shmem_init.glsl @@ -10,37 +10,37 @@ void init_iq_shmem(uvec3 wgsize) { } barrier(); } else if (MmTypeA == GGML_TYPE_IQ2_XXS) { - [[unroll]] for (uint i = 0; i < iq2xxs_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { if (iq2xxs_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2xxs_grid_const.length()) { - iq2xxs_grid[i + gl_LocalInvocationIndex.x] = iq2xxs_grid_const[i + gl_LocalInvocationIndex.x]; + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2xxs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); } else if (MmTypeA == GGML_TYPE_IQ2_XS) { - [[unroll]] for (uint i = 0; i < iq2xs_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { if (iq2xs_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2xs_grid_const.length()) { - iq2xs_grid[i + gl_LocalInvocationIndex.x] = iq2xs_grid_const[i + gl_LocalInvocationIndex.x]; + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2xs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); } else if (MmTypeA == GGML_TYPE_IQ2_S) { - [[unroll]] for (uint i = 0; i < iq2s_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { if (iq2s_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2s_grid_const.length()) { - iq2s_grid[i + gl_LocalInvocationIndex.x] = iq2s_grid_const[i + gl_LocalInvocationIndex.x]; + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2s_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); } else if (MmTypeA == GGML_TYPE_IQ3_XXS) { - [[unroll]] for (uint i = 0; i < iq3xxs_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq3_grid.length(); i += wgsize.x) { if (iq3xxs_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3xxs_grid_const.length()) { - iq3xxs_grid[i + gl_LocalInvocationIndex.x] = iq3xxs_grid_const[i + gl_LocalInvocationIndex.x]; + iq3_grid[i + gl_LocalInvocationIndex.x] = iq3xxs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); } else if (MmTypeA == GGML_TYPE_IQ3_S) { - [[unroll]] for (uint i = 0; i < iq3s_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq3_grid.length(); i += wgsize.x) { if (iq3s_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3s_grid_const.length()) { - iq3s_grid[i + gl_LocalInvocationIndex.x] = iq3s_grid_const[i + gl_LocalInvocationIndex.x]; + iq3_grid[i + gl_LocalInvocationIndex.x] = iq3s_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp index b4f6d1d6b6..27c461d60d 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_s.comp @@ -24,7 +24,7 @@ void calc_superblock(const uint a_offset, const uint b_offset, const uint itid, [[unroll]] for (uint l = 0; l < 2; ++l) { const uint8_t sign = sign16[l]; const uint qs = qs16[l] | ((qh << (8 - nibble_shift - 2 * l)) & 0x300); - const uvec2 grid = iq2s_grid[qs]; + const uvec2 grid = iq2_grid[qs]; const vec4 grid0 = vec4(unpack8(grid.x)); const vec4 grid1 = vec4(unpack8(grid.y)); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp index d8dafe5f70..1a202e1297 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xs.comp @@ -31,7 +31,7 @@ void calc_superblock(const uint a_offset, const uint b_offset, const uint itid, const uint qs = data_a[ibi].qs[2 * itid + l]; sign_vals[l] = qs >> 9; sign7_vals[l] = bitCount(sign_vals[l]); - const uvec2 grid_data = iq2xs_grid[qs & 511]; + const uvec2 grid_data = iq2_grid[qs & 511]; grid0_vals[l] = vec4(unpack8(grid_data.x)); grid1_vals[l] = vec4(unpack8(grid_data.y)); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp index f75dcf8331..f55ee10e8a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq2_xxs.comp @@ -22,8 +22,8 @@ void calc_superblock(const uint a_offset, const uint b_offset, const uint itid, const uint qs = data_a[ibi].qs[8 * ib32 + 2 * (itid & 1) + l]; const uint sign = bitfieldExtract(signscale, 7 * int(2 * (itid & 1) + l), 7); const uint sign7 = bitCount(sign); - const vec4 grid0 = vec4(unpack8(iq2xxs_grid[qs].x)); - const vec4 grid1 = vec4(unpack8(iq2xxs_grid[qs].y)); + const vec4 grid0 = vec4(unpack8(iq2_grid[qs].x)); + const vec4 grid1 = vec4(unpack8(iq2_grid[qs].y)); [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { const vec4 b0 = vec4(data_b_v4[(j*p.batch_stride_b + b_offset + y_idx) / 4 + 2*l + 0]); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp index 5cdf2a89d0..840c1174bd 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_s.comp @@ -23,8 +23,8 @@ void calc_superblock(const uint a_offset, const uint b_offset, const uint ib32, [[unroll]] for (uint l = 0; l < 4; ++l) { const u8vec2 qs = unpack8(uint32_t(data_a_packed16[ibi].qs[4 * ib32 + l])).xy; // vec4 used due to #12147 const uint sign = data_a[ibi].signs[4 * ib32 + l]; - const vec4 grid0 = vec4(unpack8(iq3s_grid[qs.x | ((qh << (8 - 2*l)) & 0x100)])); - const vec4 grid1 = vec4(unpack8(iq3s_grid[qs.y | ((qh << (7 - 2*l)) & 0x100)])); + const vec4 grid0 = vec4(unpack8(iq3_grid[qs.x | ((qh << (8 - 2*l)) & 0x100)])); + const vec4 grid1 = vec4(unpack8(iq3_grid[qs.y | ((qh << (7 - 2*l)) & 0x100)])); [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { const vec4 b0 = vec4(data_b_v4[(j*p.batch_stride_b + b_offset + y_idx) / 4 + 2*l + 0]); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp index a88898109a..5f7a89bc1c 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_iq3_xxs.comp @@ -23,8 +23,8 @@ void calc_superblock(const uint a_offset, const uint b_offset, const uint itid, const uint qs1 = data_a[ibi].qs[8 * ib32 + 4 * (itid & 1) + 2 * l + 1]; const uint sign = bitfieldExtract(signscale, 7 * int(2 * (itid & 1) + l), 7); const uint sign7 = bitCount(sign); - const vec4 grid0 = vec4(unpack8(iq3xxs_grid[qs0])); - const vec4 grid1 = vec4(unpack8(iq3xxs_grid[qs1])); + const vec4 grid0 = vec4(unpack8(iq3_grid[qs0])); + const vec4 grid1 = vec4(unpack8(iq3_grid[qs1])); [[unroll]] for (uint j = 0; j < NUM_COLS; ++j) { const vec4 b0 = vec4(data_b_v4[(j*p.batch_stride_b + b_offset + y_idx) / 4 + 2*l + 0]); diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index 1fbdb757c0..fa4929a15f 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -31,6 +31,11 @@ #extension GL_EXT_shader_explicit_arithmetic_types_int16 : require #endif +#ifdef MULMAT_QUANT +#include "ggml_type_ids.glsl" +layout (constant_id = 12) const uint MmTypeA = 0; +#endif + #include "types.glsl" #include "dot_product_funcs.glsl" @@ -46,8 +51,6 @@ layout (constant_id = 11) const uint ALIGNED = 0; #ifdef MULMAT_QUANT -#include "ggml_type_ids.glsl" -layout (constant_id = 12) const uint MmTypeA = 0; uint mm_load_vec_a() { switch (MmTypeA) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp index d10006c95f..07905b3d21 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_cm2.comp @@ -21,9 +21,14 @@ #extension GL_EXT_bfloat16 : enable #endif +#include "ggml_type_ids.glsl" + +#ifdef MULMAT_QUANT +layout (constant_id = 7) const uint MmTypeA = 0; +#endif + #include "types.glsl" #include "utils.glsl" -#include "ggml_type_ids.glsl" layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; @@ -41,7 +46,6 @@ layout (constant_id = 5) const uint ALIGNED = 0; layout (constant_id = 6) const uint subgroup_size = 32; #ifdef MULMAT_QUANT -layout (constant_id = 7) const uint MmTypeA = 0; uint mm_quant_k() { switch (MmTypeA) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl index 320cc58a4e..c50348983f 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl @@ -364,7 +364,7 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const FLOAT_TYPE db = FLOAT_TYPE(d * 0.25 * (0.5 + (signs >> 28))); const uint32_t sign7 = bitfieldExtract(signs, 7 * int(ib8), 7); const uint sign = sign7 | (bitCount(sign7) << 7); - const uvec2 grid = iq2xxs_grid[qs]; + const uvec2 grid = iq2_grid[qs]; const vec4 grid0 = vec4(unpack8(grid.x)); const vec4 grid1 = vec4(unpack8(grid.y)); @@ -390,7 +390,7 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const uint qs = a_iq2_xs.data[ib].qs[4 * ib32 + ib8]; const uint sign7 = qs >> 9; const uint sign = sign7 | (bitCount(sign7) << 7); - const uvec2 grid = iq2xs_grid[qs & 511]; + const uvec2 grid = iq2_grid[qs & 511]; const vec4 grid0 = vec4(unpack8(grid.x)); const vec4 grid1 = vec4(unpack8(grid.y)); @@ -418,7 +418,7 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const float d = float(a_iq2_s.data[ib].d); const FLOAT_TYPE db = FLOAT_TYPE(d * 0.25 * (0.5 + scale)); - const uvec2 grid = iq2s_grid[qs | ((qh << (8 - qhshift)) & 0x300)]; + const uvec2 grid = iq2_grid[qs | ((qh << (8 - qhshift)) & 0x300)]; const vec4 grid0 = vec4(unpack8(grid.x)); const vec4 grid1 = vec4(unpack8(grid.y)); @@ -447,7 +447,7 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const float db = d * 0.5 * (0.5 + (signs >> 28)); const uint32_t sign7 = bitfieldExtract(signs, 7 * (int(iqs / 2) % 4), 7); const uint sign = (sign7 | (bitCount(sign7) << 7)) >> (4 * (idx % 2)); - const uint grid = iq3xxs_grid[qs]; + const uint grid = iq3_grid[qs]; const vec4 v = db * vec4(unpack8(grid)); buf_a[buf_idx ] = FLOAT_TYPEV2((sign & 1) != 0 ? -v.x : v.x, @@ -469,7 +469,7 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const uint scale = a_iq3_s.data[ib].scales[iqs / 16]; const i8vec2 sign01 = i8vec2(1 - (2 & i8vec2(sign << 1, sign))); const float db = d * (1 + 2 * ((scale >> (4 * (iqh & 1))) & 0xf)); - const uint32_t grid = iq3s_grid[qs | ((qh << (8 - (iqs % 8))) & 256)]; + const uint32_t grid = iq3_grid[qs | ((qh << (8 - (iqs % 8))) & 256)]; const vec4 v = db * vec4(unpack8(grid)); buf_a[buf_idx ] = FLOAT_TYPEV2((sign & 1) != 0 ? -v.x : v.x, diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl index 6d66ac59d1..2b025a736a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/types.glsl @@ -891,10 +891,17 @@ const uint32_t[2048] iq1s_grid_gpu_const = { }; #endif +#ifdef MULMAT_QUANT +shared uint16_t iq1s_grid[(MmTypeA == GGML_TYPE_IQ1_S || MmTypeA == GGML_TYPE_IQ1_M) ? 2048 : 1]; +#if defined(NEEDS_IQ1S_GRID_GPU) +shared uint32_t iq1s_grid_gpu[(MmTypeA == GGML_TYPE_IQ1_S || MmTypeA == GGML_TYPE_IQ1_M) ? 2048 : 1]; +#endif +#else shared uint16_t iq1s_grid[2048]; #if defined(NEEDS_IQ1S_GRID_GPU) shared uint32_t iq1s_grid_gpu[2048]; #endif +#endif #if defined(DATA_A_IQ1_S) || defined(DATA_A_IQ1_M) #define NEEDS_INIT_IQ_SHMEM @@ -922,6 +929,18 @@ void init_iq_shmem(uvec3 wgsize) #endif #endif +#if defined(DATA_A_IQ2_XXS) || defined(DATA_A_IQ2_XS) || defined(DATA_A_IQ2_S) || defined(MULMAT_QUANT) +#ifdef MULMAT_QUANT +shared uvec2 iq2_grid[MmTypeA == GGML_TYPE_IQ2_S ? 1024 : MmTypeA == GGML_TYPE_IQ2_XS ? 512 : MmTypeA == GGML_TYPE_IQ2_XXS ? 256 : 1]; +#elif defined(DATA_A_IQ2_S) +shared uvec2 iq2_grid[1024]; +#elif defined(DATA_A_IQ2_XS) +shared uvec2 iq2_grid[512]; +#else +shared uvec2 iq2_grid[256]; +#endif +#endif + #define QUANT_K_IQ2_XXS 256 #define QUANT_R_IQ2_XXS 1 @@ -1006,16 +1025,14 @@ const uvec2[256] iq2xxs_grid_const = { uvec2(0x08080808, 0x2b2b082b), uvec2(0x08192b08, 0x2b2b1908), uvec2(0x19190808, 0x2b2b2b08), uvec2(0x08081908, 0x2b2b2b19) }; -shared uvec2 iq2xxs_grid[256]; - #if defined(DATA_A_IQ2_XXS) #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) { // copy the table into shared memory and sync - [[unroll]] for (uint i = 0; i < iq2xxs_grid.length(); i += wgsize.x) { + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { if (iq2xxs_grid_const.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2xxs_grid_const.length()) { - iq2xxs_grid[i + gl_LocalInvocationIndex.x] = iq2xxs_grid_const[i + gl_LocalInvocationIndex.x]; + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2xxs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); @@ -1180,16 +1197,14 @@ const uvec2 iq2xs_grid_const[512] = { uvec2(0x082b2b08, 0x2b2b2b2b), uvec2(0x082b2b2b, 0x2b2b2b2b), uvec2(0x2b190819, 0x2b2b2b2b), uvec2(0x2b2b2b2b, 0x2b2b2b2b), }; -shared uvec2 iq2xs_grid[512]; - #if defined(DATA_A_IQ2_XS) #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) { // copy the table into shared memory and sync - [[unroll]] for (uint i = 0; i < iq2xs_grid.length(); i += wgsize.x) { - if (iq2xs_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2xs_grid_const.length()) { - iq2xs_grid[i + gl_LocalInvocationIndex.x] = iq2xs_grid_const[i + gl_LocalInvocationIndex.x]; + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { + if (iq2_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2xs_grid_const.length()) { + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2xs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); @@ -1484,16 +1499,14 @@ const uvec2 iq2s_grid_const[1024] = { uvec2(0x082b082b, 0x2b2b2b2b), uvec2(0x082b2b08, 0x2b2b2b2b), uvec2(0x2b082b08, 0x2b2b2b2b), uvec2(0x2b2b2b2b, 0x2b2b2b2b) }; -shared uvec2 iq2s_grid[1024]; - #if defined(DATA_A_IQ2_S) #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) { // copy the table into shared memory and sync - [[unroll]] for (uint i = 0; i < iq2s_grid.length(); i += wgsize.x) { - if (iq2s_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2s_grid_const.length()) { - iq2s_grid[i + gl_LocalInvocationIndex.x] = iq2s_grid_const[i + gl_LocalInvocationIndex.x]; + [[unroll]] for (uint i = 0; i < iq2_grid.length(); i += wgsize.x) { + if (iq2_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq2s_grid_const.length()) { + iq2_grid[i + gl_LocalInvocationIndex.x] = iq2s_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); @@ -1508,6 +1521,16 @@ void init_iq_shmem(uvec3 wgsize) #endif #endif +#if defined(DATA_A_IQ3_XXS) || defined(DATA_A_IQ3_S) || defined(MULMAT_QUANT) +#ifdef MULMAT_QUANT +shared uint32_t iq3_grid[MmTypeA == GGML_TYPE_IQ3_S ? 512 : MmTypeA == GGML_TYPE_IQ3_XXS ? 256 : 1]; +#elif defined(DATA_A_IQ3_S) +shared uint32_t iq3_grid[512]; +#else +shared uint32_t iq3_grid[256]; +#endif +#endif + #define QUANT_K_IQ3_XXS 256 #define QUANT_R_IQ3_XXS 1 @@ -1560,16 +1583,14 @@ const uint32_t iq3xxs_grid_const[256] = { 0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04, }; -shared uint32_t iq3xxs_grid[256]; - #if defined(DATA_A_IQ3_XXS) #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) { // copy the table into shared memory and sync - [[unroll]] for (uint i = 0; i < iq3xxs_grid.length(); i += wgsize.x) { - if (iq3xxs_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3xxs_grid.length()) { - iq3xxs_grid[i + gl_LocalInvocationIndex.x] = iq3xxs_grid_const[i + gl_LocalInvocationIndex.x]; + [[unroll]] for (uint i = 0; i < iq3_grid.length(); i += wgsize.x) { + if (iq3_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3_grid.length()) { + iq3_grid[i + gl_LocalInvocationIndex.x] = iq3xxs_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); @@ -1674,16 +1695,14 @@ const uint32_t iq3s_grid_const[512] = { 0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101, }; -shared uint32_t iq3s_grid[512]; - #if defined(DATA_A_IQ3_S) #define NEEDS_INIT_IQ_SHMEM void init_iq_shmem(uvec3 wgsize) { // copy the table into shared memory and sync - [[unroll]] for (uint i = 0; i < iq3s_grid.length(); i += wgsize.x) { - if (iq3s_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3s_grid.length()) { - iq3s_grid[i + gl_LocalInvocationIndex.x] = iq3s_grid_const[i + gl_LocalInvocationIndex.x]; + [[unroll]] for (uint i = 0; i < iq3_grid.length(); i += wgsize.x) { + if (iq3_grid.length() % wgsize.x == 0 || i + gl_LocalInvocationIndex.x < iq3_grid.length()) { + iq3_grid[i + gl_LocalInvocationIndex.x] = iq3s_grid_const[i + gl_LocalInvocationIndex.x]; } } barrier(); @@ -1808,7 +1827,11 @@ const int8_t kvalues_iq4nl_const[16] = { int8_t(1), int8_t(13), int8_t(25), int8_t(38), int8_t(53), int8_t(69), int8_t(89), int8_t(113) }; +#ifdef MULMAT_QUANT +shared FLOAT_TYPE kvalues_iq4nl[(MmTypeA == GGML_TYPE_IQ4_NL || MmTypeA == GGML_TYPE_IQ4_XS) ? 16 : 1]; +#else shared FLOAT_TYPE kvalues_iq4nl[16]; +#endif #if defined(DATA_A_IQ4_NL) || defined(DATA_A_IQ4_XS) #define NEEDS_INIT_IQ_SHMEM @@ -1830,12 +1853,19 @@ const int8_t kvalues_mxfp4_const[16] = { int8_t(0), int8_t(-1), int8_t(-2), int8_t(-3), int8_t(-4), int8_t(-6), int8_t(-8), int8_t(-12), }; +#ifdef MULMAT_QUANT +shared int8_t kvalues_mxfp4[(MmTypeA == GGML_TYPE_MXFP4 || MmTypeA == GGML_TYPE_NVFP4) ? 16 : 1]; +#else shared int8_t kvalues_mxfp4[16]; #endif +#endif #if (defined(DATA_A_NVFP4) || defined(MULMAT_QUANT)) && !defined(USE_OCP_FP4) -// UE4M3 scale in NVFP4 blocks use only 7 bits; sign (bit 7) is always zero. +#ifdef MULMAT_QUANT +shared float ue4m3_fp32_lut[MmTypeA == GGML_TYPE_NVFP4 ? 128 : 1]; +#else shared float ue4m3_fp32_lut[128]; +#endif float ue4m3_to_fp32_build(uint u) { if (u == 0u || u == 127u) {