From 07948332e927601294f55fe3fff5cb43263e89c5 Mon Sep 17 00:00:00 2001 From: Zoltan Lakatos Date: Mon, 30 Jun 2025 15:49:00 +0000 Subject: [PATCH] test generalization to handle FP16 shuffle better --- test/gemm_add/CMakeLists.txt | 72 +++++++++---------- test/gemm_add/test_gemm_add_fastgelu_wmma.cpp | 2 +- test/gemm_add/test_gemm_add_multiply_wmma.cpp | 3 +- test/gemm_add/test_gemm_bilinear_wmma.cpp | 7 +- test/gemm_add/test_gemm_common.hpp | 20 +++--- test/gemm_add/test_gemm_multiply_add_wmma.cpp | 3 +- 6 files changed, 51 insertions(+), 56 deletions(-) diff --git a/test/gemm_add/CMakeLists.txt b/test/gemm_add/CMakeLists.txt index 6a190a24f4..623ef7a617 100644 --- a/test/gemm_add/CMakeLists.txt +++ b/test/gemm_add/CMakeLists.txt @@ -1,51 +1,51 @@ # Implements test instances for MultipleD with xdl and wmma support. -# add_gtest_executable(test_gemm_add_xdl test_gemm_add_xdl.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_xdl PRIVATE utility device_gemm_add_instance) -# endif() +add_gtest_executable(test_gemm_add_xdl test_gemm_add_xdl.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_xdl PRIVATE utility device_gemm_add_instance) +endif() -# add_gtest_executable(test_gemm_add_relu_xdl test_gemm_add_relu_xdl.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_relu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_relu_instance) -# endif() +add_gtest_executable(test_gemm_add_relu_xdl test_gemm_add_relu_xdl.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_relu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_relu_instance) +endif() -# add_gtest_executable(test_gemm_add_silu_xdl test_gemm_add_silu_xdl.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_silu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_silu_instance) -# endif() +add_gtest_executable(test_gemm_add_silu_xdl test_gemm_add_silu_xdl.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_silu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_silu_instance) +endif() -# add_gtest_executable(test_gemm_add_fastgelu_xdl test_gemm_add_fastgelu_xdl.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_fastgelu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_fastgelu_instance) -# endif() +add_gtest_executable(test_gemm_add_fastgelu_xdl test_gemm_add_fastgelu_xdl.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_fastgelu_xdl PRIVATE utility device_gemm_add_instance device_gemm_add_fastgelu_instance) +endif() -# add_gtest_executable(test_gemm_fastgelu_wmma test_gemm_fastgelu_wmma.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_fastgelu_wmma PRIVATE utility device_gemm_fastgelu_instance) -# endif() +add_gtest_executable(test_gemm_fastgelu_wmma test_gemm_fastgelu_wmma.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_fastgelu_wmma PRIVATE utility device_gemm_fastgelu_instance) +endif() -# add_gtest_executable(test_gemm_add_fastgelu_wmma test_gemm_add_fastgelu_wmma.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_fastgelu_wmma PRIVATE utility device_gemm_add_fastgelu_instance) -# endif() +add_gtest_executable(test_gemm_add_fastgelu_wmma test_gemm_add_fastgelu_wmma.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_fastgelu_wmma PRIVATE utility device_gemm_add_fastgelu_instance) +endif() -# add_gtest_executable(test_gemm_add_add_fastgelu_wmma test_gemm_add_add_fastgelu_wmma.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_add_fastgelu_wmma PRIVATE utility device_gemm_add_add_fastgelu_instance) -# endif() +add_gtest_executable(test_gemm_add_add_fastgelu_wmma test_gemm_add_add_fastgelu_wmma.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_add_fastgelu_wmma PRIVATE utility device_gemm_add_add_fastgelu_instance) +endif() -# add_gtest_executable(test_gemm_add_multiply_wmma test_gemm_add_multiply_wmma.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_add_multiply_wmma PRIVATE utility device_gemm_add_multiply_instance) -# endif() +add_gtest_executable(test_gemm_add_multiply_wmma test_gemm_add_multiply_wmma.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_add_multiply_wmma PRIVATE utility device_gemm_add_multiply_instance) +endif() add_gtest_executable(test_gemm_multiply_add_wmma test_gemm_multiply_add_wmma.cpp) if(result EQUAL 0) target_link_libraries(test_gemm_multiply_add_wmma PRIVATE utility device_gemm_multiply_add_instance) endif() -# add_gtest_executable(test_gemm_bilinear_wmma test_gemm_bilinear_wmma.cpp) -# if(result EQUAL 0) -# target_link_libraries(test_gemm_bilinear_wmma PRIVATE utility device_gemm_bilinear_instance) -# endif() +add_gtest_executable(test_gemm_bilinear_wmma test_gemm_bilinear_wmma.cpp) +if(result EQUAL 0) + target_link_libraries(test_gemm_bilinear_wmma PRIVATE utility device_gemm_bilinear_instance) +endif() diff --git a/test/gemm_add/test_gemm_add_fastgelu_wmma.cpp b/test/gemm_add/test_gemm_add_fastgelu_wmma.cpp index 278922412f..df70a0cc99 100644 --- a/test/gemm_add/test_gemm_add_fastgelu_wmma.cpp +++ b/test/gemm_add/test_gemm_add_fastgelu_wmma.cpp @@ -32,4 +32,4 @@ using KernelTypes = ::testing::Types>; TYPED_TEST_SUITE(TestGemmAddFastgelu, KernelTypes); -TYPED_TEST(TestGemmAddFastgelu, Test_BF16FP16) { this->Run(); } +TYPED_TEST(TestGemmAddFastgelu, Test_FP16FP16) { this->Run(); } diff --git a/test/gemm_add/test_gemm_add_multiply_wmma.cpp b/test/gemm_add/test_gemm_add_multiply_wmma.cpp index 28f7ff698b..be4a99d69f 100644 --- a/test/gemm_add/test_gemm_add_multiply_wmma.cpp +++ b/test/gemm_add/test_gemm_add_multiply_wmma.cpp @@ -35,4 +35,5 @@ using KernelTypes = std::tuple>; TYPED_TEST_SUITE(TestGemmAddMultiply, KernelTypes); -TYPED_TEST(TestGemmAddMultiply, Test_BF16FP16) { this->Run(); } +// Due to F16 shuffle data type tests has to run with limited K size. Change instances to FP32? +TYPED_TEST(TestGemmAddMultiply, Test) { this->Run({{16, 32, 64}, {2048, 1024, 256}}); } diff --git a/test/gemm_add/test_gemm_bilinear_wmma.cpp b/test/gemm_add/test_gemm_bilinear_wmma.cpp index 6dac7ec332..70a2b194c1 100644 --- a/test/gemm_add/test_gemm_bilinear_wmma.cpp +++ b/test/gemm_add/test_gemm_bilinear_wmma.cpp @@ -32,11 +32,8 @@ class TestGemmBilinear : public ::testing::Test ELayout>; public: - void Run() + void Run(TestMatrixSizes const& lengths) { - std::vector> lengths = { - {16, 32, 64}, {512, 2048, 4096}, {2048, 1024, 16}}; - bool all_success = true; for(auto length : lengths) @@ -69,4 +66,4 @@ using KernelTypes = ::testing::Types>; TYPED_TEST_SUITE(TestGemmBilinear, KernelTypes); -TYPED_TEST(TestGemmBilinear, Test) { this->Run(); } +TYPED_TEST(TestGemmBilinear, Test) { this->Run({{16, 32, 64}, {512, 2048, 4096}, {2048, 1024, 16}}); } diff --git a/test/gemm_add/test_gemm_common.hpp b/test/gemm_add/test_gemm_common.hpp index a1764cbdd8..303ec5c7ad 100644 --- a/test/gemm_add/test_gemm_common.hpp +++ b/test/gemm_add/test_gemm_common.hpp @@ -16,6 +16,11 @@ using F16 = ck::half_t; using F32 = float; using F8 = ck::f8_t; +// M, N, K +using TestMatrixSizes = std::vector>; + +static const TestMatrixSizes DefaultTestMatrixSizes = {{16, 32, 64}, {512, 2048, 4096}, {2048, 1024, 16}}; + template class TestGemmCommon : public ::testing::Test { @@ -32,11 +37,8 @@ class TestGemmCommon : public ::testing::Test virtual ProfileCall GetImpl() = 0; - void Run() + void Run(const TestMatrixSizes& lengths = DefaultTestMatrixSizes) { - std::vector> lengths = { - {16, 32, 64}, {2048, 4096, 8192}, {2048, 1024, 16}}; - bool all_success = true; for(auto length : lengths) @@ -75,11 +77,8 @@ class TestGemmD0Common : public ::testing::Test virtual ProfileCall GetImpl() = 0; - void Run() + void Run(const TestMatrixSizes& lengths = DefaultTestMatrixSizes) { - std::vector> lengths = { - {16, 32, 64}, {512, 2048, 4096}, {2048, 1024, 16}}; - bool all_success = true; for(auto length : lengths) @@ -121,11 +120,8 @@ class TestGemmD0D1Common : public ::testing::Test virtual ProfileCall GetImpl() = 0; - void Run() + void Run(const TestMatrixSizes& lengths = DefaultTestMatrixSizes) { - std::vector> lengths = { - {16, 32, 64}, {512, 2048, 4096}, {2048, 1024, 16}}; - bool all_success = true; for(auto length : lengths) diff --git a/test/gemm_add/test_gemm_multiply_add_wmma.cpp b/test/gemm_add/test_gemm_multiply_add_wmma.cpp index 7cdb756de8..2531464f72 100644 --- a/test/gemm_add/test_gemm_multiply_add_wmma.cpp +++ b/test/gemm_add/test_gemm_multiply_add_wmma.cpp @@ -36,4 +36,5 @@ using KernelTypes = ::testing::Types< std::tuple>; TYPED_TEST_SUITE(TestGemmMultiplyAdd, KernelTypes); -TYPED_TEST(TestGemmMultiplyAdd, Test) { this->Run(); } +// Due to F16 shuffle data type tests has to run with limited K size. Change instances to FP32? +TYPED_TEST(TestGemmMultiplyAdd, Test) { this->Run({{16, 32, 64}, {2048, 1024, 256}}); }