diff --git a/projects/composablekernel/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_xdl_cshuffle_v3.hpp b/projects/composablekernel/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_xdl_cshuffle_v3.hpp index 4345c34a2985..8742453fed87 100644 --- a/projects/composablekernel/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_xdl_cshuffle_v3.hpp +++ b/projects/composablekernel/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_xdl_cshuffle_v3.hpp @@ -1577,7 +1577,7 @@ struct DeviceGroupedConvBwdWeight_Xdl_CShuffleV3 const auto num_k_loop = gemm_arg.AK0 / (K0PerBlock / K1); if constexpr(BlkGemmPipelineVer != BlockGemmPipelineVersion::v1) { - if(num_k_loop <= GridwiseGemm64::BlockwiseGemmPipe::PrefetchStages) + if(num_k_loop <= GridwiseGemm32::BlockwiseGemmPipe::PrefetchStages) { return false; } diff --git a/projects/composablekernel/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp b/projects/composablekernel/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp index b2fa8e26b1ef..ec37e3239a0b 100644 --- a/projects/composablekernel/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp +++ b/projects/composablekernel/test/grouped_convnd_bwd_weight/test_grouped_convnd_bwd_weight_v3_interface_xdl.cpp @@ -54,8 +54,8 @@ class TestGroupedConvndBwdWeight : public ::testing::Test ck::utils::conv::ConvParam conv_param; std::vector split_ks{-1, 2}; - template - bool Run() + template + bool RunInstance() { const auto in_g_n_c_wis_desc = @@ -94,7 +94,7 @@ class TestGroupedConvndBwdWeight : public ::testing::Test range_copy(conv_param.input_left_pads_, begin(input_left_pads)); range_copy(conv_param.input_right_pads_, begin(input_right_pads)); - auto conv = GroupedConvBwdWeightDeviceInstance{}; + auto conv = DeviceInstance{}; bool is_supported = true; @@ -121,6 +121,37 @@ class TestGroupedConvndBwdWeight : public ::testing::Test } return is_supported; } + + template + bool Run() + { + return RunInstance(); + } +}; + +template +class TestGroupedConvndBwdWeightInstanceV2 : public TestGroupedConvndBwdWeight +{ + using Base = TestGroupedConvndBwdWeight; + // clang-format off + using GroupedConvBwdWeightDeviceInstance = + ck::tensor_operation::device::DeviceGroupedConvBwdWeight_Xdl_CShuffleV3 + , S<2, 0, 1>, S<1, 0, 2>, 1, 2, 2, false, + S<4, 16, 1>, S<2, 0, 1>, S<1, 0, 2>, 1, 2, 2, false, + 1, 1, S<1, 8, 1, 8>, 2, + ck::BlockGemmPipelineScheduler::Intrawave, + ck::BlockGemmPipelineVersion::v2>; + // clang-format on + + protected: + template + bool Run() + { + return this->template RunInstance(); + } }; using GNHWC = ck::tensor_layout::convolution::GNHWC; @@ -135,21 +166,28 @@ using KernelTypes = ::testing::Types, std::tuple>; template -class TestGroupedConvndBwdWeightV3Default +class TestGroupedConvndBwdWeightV3DefaultPipeV1 : public TestGroupedConvndBwdWeight { }; template -class TestGroupedConvndBwdWeightV3Filter1x1 +class TestGroupedConvndBwdWeightV3Filter1x1PipeV1 : public TestGroupedConvndBwdWeight { }; -TYPED_TEST_SUITE(TestGroupedConvndBwdWeightV3Default, KernelTypes); -TYPED_TEST_SUITE(TestGroupedConvndBwdWeightV3Filter1x1, KernelTypes); +template +class TestGroupedConvndBwdWeightV3DefaultPipeV2 + : public TestGroupedConvndBwdWeightInstanceV2 +{ +}; + +TYPED_TEST_SUITE(TestGroupedConvndBwdWeightV3DefaultPipeV1, KernelTypes); +TYPED_TEST_SUITE(TestGroupedConvndBwdWeightV3DefaultPipeV2, KernelTypes); +TYPED_TEST_SUITE(TestGroupedConvndBwdWeightV3Filter1x1PipeV1, KernelTypes); -TYPED_TEST(TestGroupedConvndBwdWeightV3Filter1x1, SpecializationCheck) +TYPED_TEST(TestGroupedConvndBwdWeightV3Filter1x1PipeV1, SpecializationCheck) { // Check filter 3,3 instead of 1,1 this->conv_param = {2, 2, 4, 192, 192, {3, 3}, {28, 28}, {1, 1}, {1, 1}, {0, 0}, {0, 0}}; @@ -172,7 +210,7 @@ TYPED_TEST(TestGroupedConvndBwdWeightV3Filter1x1, SpecializationCheck) EXPECT_FALSE(is_supported); } -TYPED_TEST(TestGroupedConvndBwdWeightV3Default, VectorLoadCheck) +TYPED_TEST(TestGroupedConvndBwdWeightV3DefaultPipeV1, VectorLoadCheck) { // vector load for A this->conv_param = {2, 2, 128, 129, 256, {1, 1}, {7, 7}, {2, 2}, {1, 1}, {0, 0}, {0, 0}}; @@ -183,3 +221,19 @@ TYPED_TEST(TestGroupedConvndBwdWeightV3Default, VectorLoadCheck) is_supported = this->template Run<2>(); EXPECT_FALSE(is_supported); } + +TYPED_TEST(TestGroupedConvndBwdWeightV3DefaultPipeV2, PrefetchStagesCheck) +{ + this->conv_param = {2, 1, 8, 120, 120, {3, 3}, {24, 24}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; + this->split_ks = {64}; + + bool is_supported = this->template Run<2>(); + if(ck::is_gfx11_supported() || ck::is_gfx12_supported()) + { + EXPECT_FALSE(is_supported); + } + else + { + EXPECT_TRUE(is_supported); + } +}