From 3ad1ec298141e6b17962da86dea7f32ce373ec7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Pietil=C3=A4?= <> Date: Thu, 10 Jul 2025 14:11:55 +0000 Subject: [PATCH] Add unit tests for split-K autodeduction. --- .../profile_grouped_conv_bwd_weight_impl.hpp | 2 +- .../test_grouped_convnd_bwd_weight.cpp | 2 +- ...rouped_convnd_bwd_weight_interface_xdl.cpp | 44 +++++++++++-------- ...ped_convnd_bwd_weight_v3_interface_xdl.cpp | 12 +++-- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/profiler/include/profiler/profile_grouped_conv_bwd_weight_impl.hpp b/profiler/include/profiler/profile_grouped_conv_bwd_weight_impl.hpp index 01478a2b0b..3f7852e5dc 100644 --- a/profiler/include/profiler/profile_grouped_conv_bwd_weight_impl.hpp +++ b/profiler/include/profiler/profile_grouped_conv_bwd_weight_impl.hpp @@ -262,7 +262,7 @@ bool profile_grouped_conv_bwd_weight_impl(int do_verification, using AccDataType = std::conditional_t, int32_t, float>; const index_t num_accums = output.GetElementSize() / conv_param.K_; - const index_t num_accums_split_k = split_k_list[split_k_id]; + const index_t num_accums_split_k = split_k_value; // Calculate thresholds auto rtol = ck::utils::get_relative_threshold( diff --git a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight.cpp b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight.cpp index ed4680c632..8343629f3a 100644 --- a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight.cpp +++ b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight.cpp @@ -30,7 +30,7 @@ class TestGroupedConvndBwdWeight : public ::testing::Test using NDimSpatial = std::tuple_element_t<6, Tuple>; std::vector conv_params; - std::vector split_ks{1, 2}; + std::vector split_ks{-1, 1, 2}; bool skip_case(const ck::index_t split_k) { diff --git a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_interface_xdl.cpp b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_interface_xdl.cpp index cfbf13f00e..9e822c5765 100644 --- a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_interface_xdl.cpp +++ b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_interface_xdl.cpp @@ -52,7 +52,7 @@ class TestGroupedConvndBwdWeight : public ::testing::Test // clang-format on ck::utils::conv::ConvParam conv_param; - ck::index_t split_k{2}; + std::vector split_ks{-1, 2}; template bool Run() @@ -96,24 +96,30 @@ class TestGroupedConvndBwdWeight : public ::testing::Test auto conv = GroupedConvBwdWeightDeviceInstance{}; - auto argument = conv.MakeArgument(nullptr, - nullptr, - nullptr, - input_lengths, - input_strides, - filter_lengths, - weights_strides, - output_lengths, - output_strides, - conv_filter_strides, - conv_filter_dilations, - input_left_pads, - input_right_pads, - PassThrough{}, - PassThrough{}, - PassThrough{}, - split_k); - return conv.IsSupportedArgument(argument); + bool is_supported = true; + + for (const auto split_k : split_ks) + { + auto argument = conv.MakeArgument(nullptr, + nullptr, + nullptr, + input_lengths, + input_strides, + filter_lengths, + weights_strides, + output_lengths, + output_strides, + conv_filter_strides, + conv_filter_dilations, + input_left_pads, + input_right_pads, + PassThrough{}, + PassThrough{}, + PassThrough{}, + split_k); + is_supported &=conv.IsSupportedArgument(argument); + } + return is_supported; } }; diff --git a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp index 1556f15898..4e668c6d7c 100644 --- a/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp +++ b/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp @@ -52,7 +52,7 @@ class TestGroupedConvndBwdWeight : public ::testing::Test // clang-format on ck::utils::conv::ConvParam conv_param; - ck::index_t split_k{2}; + std::vector split_ks{-1, 2}; template bool Run() @@ -96,7 +96,11 @@ class TestGroupedConvndBwdWeight : public ::testing::Test auto conv = GroupedConvBwdWeightDeviceInstance{}; - auto argument = conv.MakeArgument(nullptr, + bool is_supported = true; + + for (const auto split_k : split_ks) + { + auto argument = conv.MakeArgument(nullptr, nullptr, nullptr, input_lengths, @@ -113,7 +117,9 @@ class TestGroupedConvndBwdWeight : public ::testing::Test PassThrough{}, PassThrough{}, split_k); - return conv.IsSupportedArgument(argument); + is_supported &=conv.IsSupportedArgument(argument); + } + return is_supported; } };