Making alorithm a non-type parameter

This simplifies the design by continuing to reduce the number of types and avoidng extra use of constexpr.
This commit is contained in:
John Shumway
2025-09-02 17:22:29 +00:00
parent a79616f323
commit a2e661cd57
4 changed files with 50 additions and 60 deletions

View File

@@ -15,68 +15,49 @@ struct FwdConvSignature
};
static_assert(ckb::ConvSignature<FwdConvSignature>);
struct FwdConvAlgorithm
struct DefaultFwdConvAlgorithm
{
};
static_assert(ckb::ConvAlgorithm<FwdConvAlgorithm>);
static_assert(ckb::ConvAlgorithm<DefaultFwdConvAlgorithm>);
static constexpr char API_VERSION[] = "0.1.0";
TEST(ConvBuilderTest, TestDefaultInstance)
{
using Builder = ckb::ConvBuilder<FwdConvSignature, FwdConvAlgorithm, API_VERSION>;
static constexpr DefaultFwdConvAlgorithm algorithm;
using Builder = ckb::ConvBuilder<FwdConvSignature, algorithm, API_VERSION>;
EXPECT_EQ(
Builder::Instance::TypeString(),
"DeviceGroupedConvFwdMultipleABD_Xdl_CShuffle_V3<256, 256, 256, 32, Default, 32, 32, 4, 4, "
"8, 8, 8, 1, 1, BlkGemmPipelineScheduler: Intrawave, BlkGemmPipelineVersion: v4>");
}
[[maybe_unused]] static constexpr ckb::ThreadBlock THREAD_BLOCK_256_256_256_32{
.block_size = 256,
.sub_matrix = {.m = 256, .n = 256, .k = 32},
};
struct ConvFwdXdlBf16CompInstances2xAlgorithm0
struct FwdConvAlgorithm
{
static constexpr ckb::ThreadBlock THREAD_BLOCK{
.block_size = 256,
.sub_matrix = {.m = 256, .n = 128, .k = 64},
};
static constexpr ckb::ConvTuningParams TUNING_PARAMS{
.ak1 = 16,
.bk1 = 16,
.m_xdl_per_wave = 2,
.n_xdl_per_wave = 2,
};
ckb::ThreadBlock thread_block;
ckb::ConvTuningParams tuning_params;
};
static_assert(ckb::ConvAlgorithm<FwdConvAlgorithm>);
static_assert(ckb::HasThreadBlockInfo<FwdConvAlgorithm>);
static_assert(ckb::HasConvTuningInfo<FwdConvAlgorithm>);
TEST(ConvBuilderTest, TestConvFwdXdlBf16CompInstances2xInstance0)
{
using Builder =
ckb::ConvBuilder<FwdConvSignature, ConvFwdXdlBf16CompInstances2xAlgorithm0, API_VERSION>;
static constexpr FwdConvAlgorithm algorithm{
.thread_block{.block_size = 256, .sub_matrix = {.m = 256, .n = 128, .k = 64}},
.tuning_params{.ak1 = 16, .bk1 = 16, .m_xdl_per_wave = 2, .n_xdl_per_wave = 2}};
using Builder = ckb::ConvBuilder<FwdConvSignature, algorithm, API_VERSION>;
EXPECT_EQ(
Builder::Instance::TypeString(),
"DeviceGroupedConvFwdMultipleABD_Xdl_CShuffle_V3<256, 256, 128, 64, Default, 32, 32, 2, 2, "
"8, 8, 8, 1, 1, BlkGemmPipelineScheduler: Intrawave, BlkGemmPipelineVersion: v4>");
}
struct ConvFwdXdlBf16CompAlgorithm0
{
static constexpr ckb::ThreadBlock THREAD_BLOCK{
.block_size = 256,
.sub_matrix = {.m = 256, .n = 256, .k = 32},
};
static constexpr ckb::ConvTuningParams TUNING_PARAMS{
.ak1 = 8,
.bk1 = 8,
.m_xdl_per_wave = 4,
.n_xdl_per_wave = 4,
};
};
TEST(ConvBuilderTest, GroupedConvFwdXdlBf16CompInstance0)
{
using Builder = ckb::ConvBuilder<FwdConvSignature, ConvFwdXdlBf16CompAlgorithm0, API_VERSION>;
static constexpr FwdConvAlgorithm algorithm{
.thread_block{.block_size = 256, .sub_matrix = {.m = 256, .n = 256, .k = 32}},
.tuning_params{.ak1 = 8, .bk1 = 8, .m_xdl_per_wave = 4, .n_xdl_per_wave = 4}};
using Builder = ckb::ConvBuilder<FwdConvSignature, algorithm, API_VERSION>;
EXPECT_EQ(
Builder::Instance::TypeString(),
"DeviceGroupedConvFwdMultipleABD_Xdl_CShuffle_V3<256, 256, 256, 32, Default, 32, 32, 4, 4, "