Commit da3416d80 for llama.cpp

commit da3416d8077c55d68e45ce15babd999ac7ba1c49
Author: Alex-JP-93 <Jianpeng.Li@amd.com>
Date:   Thu Nov 5 20:11:07 2026 +0800

    vulkan: RDNA3/4 Large-Tile Split-K Optimization (#30280)

    * RDNA3/4 Vulkan Large-Tile Split-K Optimization

    * Add single-operator performance test cases

    * Update the policy to use driver-reported LDS usage

    * Add comments

    * Use the simpler split_k rule from review

    Assisted-by: GitHub Copilot

    * tests : drop the split_k test cases

    * vulkan : simplify the RDNA3/4 split_k condition

diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp
index 175b14a3a..fc0ff83dd 100644
--- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp
+++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp
@@ -5976,6 +5976,11 @@ static uint32_t ggml_vk_guess_split_k(ggml_backend_vk_context * ctx, uint32_t m,
                 split_k = ctx->device->shader_core_count / (m_tiles * n_tiles);
             } else if (m_tiles * n_tiles <= ctx->device->shader_core_count * 2 / 3) {
                 split_k = 3;
+            } else if ((ctx->device->architecture == AMD_RDNA3 || ctx->device->architecture == AMD_RDNA4) &&
+                       m_tiles * n_tiles > ctx->device->shader_core_count &&
+                       m_tiles * n_tiles <= ctx->device->shader_core_count * 4 / 3) {
+                // two waves, the second one at most 1/3 full
+                split_k = 3;
             }
             // Cap the split at 8x. Unless k is huge this is a lot of overhead.
             split_k = std::min(split_k, 8u);