diff --git a/CMakeLists.txt b/CMakeLists.txt index e6e296af2d..dbe99a077b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -604,7 +604,7 @@ ENDFOREACH() add_custom_target(instances DEPENDS utility;${CK_DEVICE_INSTANCES} SOURCES ${INSTANCE_FILES}) add_subdirectory(library) -# if(NOT GPU_ARCHS AND USER_GPU_TARGETS) +if(NOT GPU_ARCHS AND USER_GPU_TARGETS) # rocm_package_setup_component(tests # LIBRARY_NAME composablekernel # PACKAGE_NAME tests # Prevent -static suffix on package name @@ -616,10 +616,10 @@ add_subdirectory(library) # ) # add_subdirectory(example) # add_subdirectory(tile_engine) -# if(BUILD_TESTING) -# add_subdirectory(test) -# endif() -# endif() + if(BUILD_TESTING) + add_subdirectory(test) + endif() +endif() rocm_package_setup_component(profiler LIBRARY_NAME composablekernel diff --git a/test/gemm_add/CMakeLists.txt b/test/gemm_add/CMakeLists.txt index f7430b8ae1..8f1a14e535 100644 --- a/test/gemm_add/CMakeLists.txt +++ b/test/gemm_add/CMakeLists.txt @@ -22,3 +22,8 @@ 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_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() diff --git a/test/gemm_add/test_gemm_add_multiply_wmma.cpp b/test/gemm_add/test_gemm_add_multiply_wmma.cpp new file mode 100644 index 0000000000..1859a37c00 --- /dev/null +++ b/test/gemm_add/test_gemm_add_multiply_wmma.cpp @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +// Copyright (c) 2025, Advanced Micro Devices, Inc. All rights reserved. + +#include "gtest/gtest.h" +#include "ck/ck.hpp" +#include "profiler/profile_gemm_add_multiply_impl.hpp" + +using Row = ck::tensor_layout::gemm::RowMajor; +using Col = ck::tensor_layout::gemm::ColumnMajor; + +using F16 = ck::half_t; +using F32 = float; + +// TODO: inerit TestGemmAddMultiply from TestGemmD0Common after changes are rebased on top of multipleD feature branch. +// After that clean test... +template +class TestGemmAddMultiply : public ::testing::Test +{ +private: + using ADataType = std::tuple_element_t<0, Tuple>; + using BDataType = std::tuple_element_t<1, Tuple>; + using AccDataType = std::tuple_element_t<2, Tuple>; + using D0DataType = std::tuple_element_t<3, Tuple>; + using D1DataType = std::tuple_element_t<4, Tuple>; + using EDataType = std::tuple_element_t<5, Tuple>; + using ALayout = std::tuple_element_t<6, Tuple>; + using BLayout = std::tuple_element_t<7, Tuple>; + using D0Layout = std::tuple_element_t<8, Tuple>; + using D1Layout = std::tuple_element_t<9, Tuple>; + using ELayout = std::tuple_element_t<10, Tuple>; + + constexpr static auto ProfileGemmAddMultiplyImpl = + ck::profiler::profile_gemm_add_multiply_impl; + + decltype(ProfileGemmAddMultiplyImpl) GetImpl() { return ProfileGemmAddMultiplyImpl; } + +protected: + void Run() + { + std::vector> lengths = { + {16, 32, 64}, {2048, 1024, 16}, {2048, 4096, 1024}}; + + bool all_success = true; + + for(auto length : lengths) + { + int M = length[0]; + int N = length[1]; + int K = length[2]; + int StrideA = ck::is_same_v ? K : M; + int StrideB = ck::is_same_v ? N : K; + int StrideD0 = ck::is_same_v ? N : M; + int StrideD1 = ck::is_same_v ? N : M; + int StrideE = ck::is_same_v ? N : M; + + all_success = + all_success & + GetImpl()(true, 1, false, false, M, N, K, StrideA, StrideB, StrideD0, StrideD1, StrideE); + } + + EXPECT_TRUE(all_success); + } +}; + +using KernelTypes = ::testing::Types>; + +TYPED_TEST_SUITE(TestGemmAddMultiply, KernelTypes); +TYPED_TEST(TestGemmAddMultiply, Test_BF16FP16) { this->Run(); }