From 39da130fcd1b6ca47d3c0522a40eccff41ea3dfb Mon Sep 17 00:00:00 2001 From: Tarek Dakhran Date: Tue, 20 Oct 2026 17:47:44 +0200 Subject: [PATCH] ggml-cuda : support ssm_conv kernel size 7 (#30873) --- ggml/src/ggml-cuda/ssm-conv.cu | 3 ++- tests/test-backend-ops.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-cuda/ssm-conv.cu b/ggml/src/ggml-cuda/ssm-conv.cu index 1463169cf..f41438b31 100644 --- a/ggml/src/ggml-cuda/ssm-conv.cu +++ b/ggml/src/ggml-cuda/ssm-conv.cu @@ -151,9 +151,10 @@ static void ssm_conv_f32_cuda(const float * src0, const float * src1, const floa case 3: launch_kernel(std::integral_constant{}); break; case 4: launch_kernel(std::integral_constant{}); break; case 5: launch_kernel(std::integral_constant{}); break; + case 7: launch_kernel(std::integral_constant{}); break; case 9: launch_kernel(std::integral_constant{}); break; case 15: launch_kernel(std::integral_constant{}); break; - default: GGML_ABORT("Only support kernel sizes 3, 4, 5, 9, 15 right now."); + default: GGML_ABORT("Only support kernel sizes 3, 4, 5, 7, 9, 15 right now."); } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 485629cf6..d3194bf47 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -10659,7 +10659,7 @@ static std::vector> make_test_cases_eval() { // ne[2] > 65535 exceeds the CUDA gridDim.y limit (#27901) test_cases.emplace_back(new test_rms_norm_mul_rope({4, 1, 65536, 1}, 1e-6f, false, false, false, GGML_ROPE_TYPE_NORMAL)); test_cases.emplace_back(new test_rms_norm_mul_rope({4, 1, 65536, 1}, 1e-6f, false, true, false, GGML_ROPE_TYPE_NEOX)); - for (int64_t d_conv : {3, 4, 9}) { + for (int64_t d_conv : {3, 4, 7, 9}) { for (int64_t d_inner: {1024, 1536, 2048}) { test_cases.emplace_back(new test_ssm_conv(GGML_TYPE_F32, {d_conv, d_inner, 1, 1}, {d_conv, d_inner, 1, 1})); test_cases.emplace_back(new test_ssm_conv(GGML_TYPE_F32, {2 * d_conv, d_inner, 1, 1}, {d_conv, d_inner, 1, 1})); @@ -10672,7 +10672,7 @@ static std::vector> make_test_cases_eval() { // fused ssm_conv + (optional) bias_add + silu. The bias-only graph (no silu) is intentionally // not tested since there's no fusion for that pattern in ggml_cuda_can_fuse. - for (int64_t d_conv : {3, 4, 9}) { + for (int64_t d_conv : {3, 4, 7, 9}) { for (int64_t d_inner : {1024, 1536, 2048}) { for (bool fuse_bias : {false, true}) { // short token path (n_t <= 32)