From 7fabc25c5e0c9047a7a25b23bba5cad017de23ec Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Mon, 24 Aug 2026 12:41:33 +0200 Subject: [PATCH] increase large tile size --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 5db74d2307..6e3458e04f 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -4190,6 +4190,7 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { std::array l_wg_denoms, m_wg_denoms, s_wg_denoms, l_mmq_wg_denoms, m_mmq_wg_denoms, s_mmq_wg_denoms, l_mmq_wg_denoms_k, m_mmq_wg_denoms_k, s_mmq_wg_denoms_k, + l_mmq_cm1_wg_denoms, m_mmq_cm1_wg_denoms, s_mmq_cm1_wg_denoms, l_mmqid_wg_denoms, m_mmqid_wg_denoms, s_mmqid_wg_denoms; uint32_t l_align, m_align, s_align; @@ -4278,8 +4279,8 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { // Coopmat int8 cm1 shader uses larger workgroups for better occupancy // Force wave32 for VOPD on RDNA3+ - l_warptile_mmq_cm1_int = { 512, 128, 128, 32, 32, 32, 2, itm_l, itn_l, itk_l, 32 }; - m_warptile_mmq_cm1_int = { 128, 64, 64, 32, 32, 32, 2, itm_m, itn_m, itk_m, 32 }; + l_warptile_mmq_cm1_int = { 640, 128, 160, 32, 32, 32, 2, itm_l, itn_l, itk_l, 32 }; + m_warptile_mmq_cm1_int = { 256, 128, 64, 32, 32, 32, 2, itm_m, itn_m, itk_m, 32 }; s_warptile_mmq_cm1_int = { 32, 32, 32, 32, 32, 32, 2, itm_s, itn_s, itk_s, 32 }; // K-quants use even more registers, mitigate by setting WMITER to 1 @@ -4321,6 +4322,9 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { l_mmq_wg_denoms = l_wg_denoms = {128, 128, 1 }; m_mmq_wg_denoms = m_wg_denoms = { 64, 64, 1 }; s_mmq_wg_denoms = s_wg_denoms = { 32, 32, 1 }; + l_mmq_cm1_wg_denoms = {128, 160, 1 }; + m_mmq_cm1_wg_denoms = {128, 64, 1 }; + s_mmq_cm1_wg_denoms = { 32, 32, 1 }; l_align = 128; m_align = 64; s_align = 32; @@ -4808,8 +4812,8 @@ static void ggml_vk_load_shaders(vk_device& device, vk_pipeline requested) { } if (device->coopmat_int_support) { - CREATE_MMQ2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_q8_1[GGML_TYPE_Q4_0], matmul_q4_0_q8_1, mmq_wg_denoms, warptile_mmq_cm1_int, vk_mat_mat_push_constants, 3, ); - CREATE_MMQ2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_q8_1[GGML_TYPE_Q8_0], matmul_q8_0_q8_1, mmq_wg_denoms, warptile_mmq_cm1_int, vk_mat_mat_push_constants, 3, ); + CREATE_MMQ2(GGML_TYPE_Q4_0, pipeline_dequant_mul_mat_mat_q8_1[GGML_TYPE_Q4_0], matmul_q4_0_q8_1, mmq_cm1_wg_denoms, warptile_mmq_cm1_int, vk_mat_mat_push_constants, 3, ); + CREATE_MMQ2(GGML_TYPE_Q8_0, pipeline_dequant_mul_mat_mat_q8_1[GGML_TYPE_Q8_0], matmul_q8_0_q8_1, mmq_cm1_wg_denoms, warptile_mmq_cm1_int, vk_mat_mat_push_constants, 3, ); } GGML_ASSERT(device->subgroup_ballot);