ggml-webgpu: FlashAttention refactor + standardize quantization support (#23834)
* Start work on flash_attn refactor * Refactor * Split k/v quantization * Refactor and abstract quantization logic for flash_attn and mul_mat * Add quantization support to tile path * formatting * Move to functions, add a check
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
#ifdef U32_DEQUANT_HELPERS
|
||||
fn dequant_q4_0_packed_to_shmem(q_packed: u32, d: f16, dst_idx: u32) {
|
||||
let scale = QUANT_OUT_TYPE(d);
|
||||
for (var k = 0u; k < 4u; k++) {
|
||||
let q_byte = get_byte(q_packed, k);
|
||||
let q_hi = (QUANT_OUT_TYPE((q_byte >> 4) & 0xFu) - QUANT_OUT_TYPE(8.0)) * scale;
|
||||
let q_lo = (QUANT_OUT_TYPE(q_byte & 0xFu) - QUANT_OUT_TYPE(8.0)) * scale;
|
||||
QUANT_SHMEM[dst_idx + k] = q_lo;
|
||||
QUANT_SHMEM[dst_idx + k + 16u] = q_hi;
|
||||
}
|
||||
}
|
||||
|
||||
fn dequant_q8_0_packed_to_shmem(q_packed: u32, d: f16, dst_idx: u32) {
|
||||
let scale = QUANT_OUT_TYPE(d);
|
||||
for (var k = 0u; k < 4u; k++) {
|
||||
let q_byte = get_byte_i32(q_packed, k);
|
||||
let q_val = QUANT_OUT_TYPE(q_byte) * scale;
|
||||
QUANT_SHMEM[dst_idx + k] = q_val;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user