From 60b099ca4559e29057d1e06b0df90b54803f35ac Mon Sep 17 00:00:00 2001 From: Troncooooo <82120547+Troncooooo@users.noreply.github.com> Date: Sun, 6 Sep 2026 13:22:26 +0200 Subject: [PATCH] ggml-vulkan : tune L-tile warp micro-dimension for RDNA3 iGPUs On RADV PHOENIX (gfx1151, UMA, KHR cooperative matrix) the 64x64 warp micro-tile is LDS/register limited. Halving the M micro-dimension (WM 64 -> 32 on l_warptile and the mmq/mmq_int variants) gives a large prompt-processing speedup with no effect on token generation (the mul_mat_vec path is untouched): llama-bench -p 512 -n 64 -r 3, Mesa/radv: Qwen3.8-9B-Q4_K_M: pp512 250.5 -> 404.4 t/s (+61%); tg64 14.42 -> 14.43 Qwen3.8-27B-UD-Q4_K_M: pp512 72.4 -> 117.5 t/s (+62%); tg64 4.73 -> 4.73 Scope: AMD + coopmat + non-proprietary driver (existing branch), further restricted to RDNA3 + UMA so discrete RDNA3 and other chips are unaffected. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 62f90847b0f6..fca3bab387d1 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4438,6 +4438,18 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { l_warptile = { 256, 128, 128, 16, mm_warp_8, 64, 2, tm_m, tn_m, tk_m, mm_warp_8 }; l_warptile_mmq = l_warptile_mmq_int = { 256, 128, 128, 32, mm_warp_8, 64, 2, tm_m, tn_m, tk_m, mm_warp_8 }; l_warptile_mmq_int_k = { 256, 128, 128, 32, mm_warp_16, 64, 1, 4, 2, 1, mm_warp_16 }; + if (device->architecture == AMD_RDNA3 && device->uma) { + // RDNA3 integrated GPU (e.g. Radeon 780M, shared system memory): the 64x64 warp + // micro-tile is LDS/register limited on the KHR coopmat path; halving the + // M micro-dimension (WM 64 -> 32) substantially speeds up prompt processing, + // while token generation (mul_mat_vec path) is unaffected. Measured on + // RADV PHOENIX (gfx1151) with llama-bench -p 512 -n 64 -r 3: + // Qwen3.8-9B-Q4_K_M: pp512 250.5 -> 404.4 t/s (+61%); tg64 14.42 -> 14.43 + // Qwen3.8-27B-UD-Q4_K_M: pp512 72.4 -> 117.5 t/s (+62%); tg64 4.73 -> 4.73 + // (WN 64 -> 32 is equally good; WMITER 2 -> 4/8 is within noise.) + l_warptile = { 256, 128, 128, 16, 32, 64, 2, tm_m, tn_m, tk_m, mm_warp_8 }; + l_warptile_mmq = l_warptile_mmq_int = { 256, 128, 128, 32, 32, 64, 2, tm_m, tn_m, tk_m, mm_warp_8 }; + } } else if (device->vendor_id == VK_VENDOR_ID_INTEL && device->coopmat_support) { // Xe2/Xe3 with coopmat enabled - warptile performance tuning l_warptile = { 512, 128, 128, 16, mm_warp_8, 32, 2, tm_m, tn_m, tk_m, mm_warp_8 };