From 763c7d782150ba10a1ea31bf1e88ac53848f9654 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Wed, 6 Dec 2023 13:46:37 -0700 Subject: [PATCH 1/7] Add oneMKL GEMM support for SYCL --- blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp | 13 +- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 40 +++++ blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 140 ++++++++++++++++++ blas/tpls/KokkosBlas_tpl_spec.hpp | 23 +++ 4 files changed, 204 insertions(+), 12 deletions(-) diff --git a/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp index 2ace065808..2f7444252d 100644 --- a/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas2_gemv_tpl_spec_decl.hpp @@ -777,17 +777,6 @@ KOKKOSBLAS2_CGEMV_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIPSpace, false) namespace KokkosBlas { namespace Impl { -inline oneapi::mkl::transpose mode_kk_to_onemkl(char mode_kk) { - switch (toupper(mode_kk)) { - case 'N': return oneapi::mkl::transpose::nontrans; - case 'T': return oneapi::mkl::transpose::trans; - case 'C': return oneapi::mkl::transpose::conjtrans; - default:; - } - throw std::invalid_argument( - "Invalid mode for oneMKL (should be one of N, T, C)"); -} - template struct kokkos_to_std_type_map { using type = T; @@ -829,7 +818,7 @@ struct kokkos_to_std_type_map { bool row_major = std::is_same::value; \ const std::int64_t M = A.extent(0); \ const std::int64_t N = A.extent(1); \ - oneapi::mkl::transpose trans = mode_kk_to_onemkl(kk_trans[0]); \ + oneapi::mkl::transpose trans = trans_mode_kk_to_onemkl(kk_trans[0]); \ const std::int64_t LDA = row_major ? A.stride(0) : A.stride(1); \ std::string label = "KokkosBlas::gemv[TPL_ONEMKL," + \ Kokkos::ArithTraits::name() + "]"; \ diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index 8e96898b10..fc866d9b70 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -182,6 +182,46 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, Kokkos::LayoutRight, Kokkos::HIPSpace) #endif + +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) + +#define KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(SCALAR, LAYOUT, MEMSPACE) \ + template <> \ + struct gemm_tpl_spec_avail< \ + Kokkos::Experimental::SYCL, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits > > { \ + enum : bool { value = true }; \ + }; + +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(double, Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(float, Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace) + +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(double, Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(float, Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, + Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace) +KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace) + +#endif + } // namespace Impl } // namespace KokkosBlas diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 66177e28a6..032fd71299 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -501,4 +501,144 @@ KOKKOSBLAS3_CGEMM_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIPSpace, false) } // namespace KokkosBlas #endif // KOKKOSKERNELS_ENABLE_TPL_ROCBLAS +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) +#include +#include + +namespace KokkosBlas::Impl { + +/*! +SCALAR_TYPE is the Kokkos Kernels type +TPL_SCALAR_TYPE is the type MKL accents for SCALAR_TYPE +*/ +#define KOKKOSBLAS3_XGEMM_MKL(SCALAR_TYPE, TPL_SCALAR_TYPE, LAYOUT, MEM_SPACE, \ + ETI_SPEC_AVAIL) \ + template <> \ + struct GEMM< \ + Kokkos::Experimental::SYCL, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + Kokkos::View, \ + Kokkos::MemoryTraits >, \ + true, ETI_SPEC_AVAIL> { \ + typedef SCALAR_TYPE SCALAR; \ + typedef Kokkos::View< \ + const SCALAR**, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > \ + AViewType; \ + typedef Kokkos::View< \ + const SCALAR**, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > \ + BViewType; \ + typedef Kokkos::View< \ + SCALAR**, LAYOUT, \ + Kokkos::Device, \ + Kokkos::MemoryTraits > \ + CViewType; \ + \ + static void gemm(const typename CViewType::execution_space& space, \ + const char transA[], const char transB[], \ + typename AViewType::const_value_type& alpha, \ + const AViewType& A, const BViewType& B, \ + typename CViewType::const_value_type& beta, \ + const CViewType& C) { \ + Kokkos::Profiling::pushRegion("KokkosBlas::gemm[TPL_MKL," #SCALAR_TYPE \ + "]"); \ + \ + const bool A_t = (transA[0] != 'N') && (transA[0] != 'n'); \ + const int64_t M = static_cast(C.extent(0)); \ + const int64_t N = static_cast(C.extent(1)); \ + const int64_t K = static_cast(A.extent(A_t ? 0 : 1)); \ + \ + constexpr bool is_lr = std::is_same::value; \ + \ + const int64_t ast = is_lr ? A.stride(0) : A.stride(1); \ + const int64_t lda = ast == 0 ? 1 : ast; \ + const int64_t bst = is_lr ? B.stride(0) : B.stride(1); \ + const int64_t ldb = bst == 0 ? 1 : bst; \ + const int64_t cst = is_lr ? C.stride(0) : C.stride(1); \ + const int64_t ldc = cst == 0 ? 1 : cst; \ + \ + oneapi::mkl::transpose transa = trans_mode_kk_to_onemkl(transA[0]); \ + oneapi::mkl::transpose transb = trans_mode_kk_to_onemkl(transB[0]); \ + oneapi::mkl::blas::compute_mode mode = \ + oneapi::mkl::blas::compute_mode::standard; \ + \ + if constexpr (!is_lr) { \ + oneapi::mkl::blas::column_major::gemm( \ + space.sycl_queue(), transa, transb, M, N, K, alpha, \ + reinterpret_cast(A.data()), lda, \ + reinterpret_cast(B.data()), ldb, beta, \ + reinterpret_cast(C.data()), ldc, mode); \ + } else { \ + oneapi::mkl::blas::row_major::gemm( \ + space.sycl_queue(), transa, transb, M, N, K, alpha, \ + reinterpret_cast(A.data()), lda, \ + reinterpret_cast(B.data()), ldb, beta, \ + reinterpret_cast(C.data()), ldc, mode); \ + } \ + \ + Kokkos::Profiling::popRegion(); \ + } \ + }; + +#define KOKKOSBLAS3_DGEMM_MKL(LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) \ + KOKKOSBLAS3_XGEMM_MKL(double, double, LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) + +#define KOKKOSBLAS3_SGEMM_MKL(LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) \ + KOKKOSBLAS3_XGEMM_MKL(float, float, LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) + +#define KOKKOSBLAS3_ZGEMM_MKL(LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) \ + KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ + MEM_SPACE, ETI_SPEC_AVAIL) + +#define KOKKOSBLAS3_CGEMM_MKL(LAYOUT, MEM_SPACE, ETI_SPEC_AVAIL) \ + KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ + MEM_SPACE, ETI_SPEC_AVAIL) + +KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) +KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) + +KOKKOSBLAS3_SGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_SGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) +KOKKOSBLAS3_SGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_SGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) + +KOKKOSBLAS3_ZGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_ZGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) +KOKKOSBLAS3_ZGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_ZGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) + +KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutLeft, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) +KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, true) +KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, + Kokkos::Experimental::SYCLDeviceUSMSpace, false) +} // namespace KokkosBlas::Impl +#endif // KOKKOSKERNELS_ENABLE_TPL_MKL && KOKKOS_ENABLE_SYCL + #endif diff --git a/blas/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp index a1eee4b69c..39469f1354 100644 --- a/blas/tpls/KokkosBlas_tpl_spec.hpp +++ b/blas/tpls/KokkosBlas_tpl_spec.hpp @@ -231,4 +231,27 @@ struct MagmaSingleton { } // namespace KokkosBlas #endif // KOKKOSKERNELS_ENABLE_TPL_MAGMA +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) +#include + +namespace KokkosBlas { +namespace Impl { + +/// \brief This function converts KK transpose mode to MKL transpose mode +inline oneapi::mkl::transpose trans_mode_kk_to_onemkl(char mode_kk) { + switch (toupper(mode_kk)) { + case 'N': return oneapi::mkl::transpose::nontrans; + case 'T': return oneapi::mkl::transpose::trans; + case 'C': return oneapi::mkl::transpose::conjtrans; + default:; + } + throw std::invalid_argument( + "Invalid mode for oneMKL (should be one of N, T, C)"); +} + +} // namespace Impl +} // namespace KokkosBlas + +#endif // KOKKOSKERNELS_ENABLE_TPL_MKL + #endif // KOKKOSBLAS_TPL_SPEC_HPP_ From 07e23f5a5692d391a3a605a161df4a20279cbc7c Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Mon, 11 Dec 2023 11:36:33 -0700 Subject: [PATCH 2/7] add a comment --- blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 032fd71299..d6d11897a3 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -603,6 +603,8 @@ TPL_SCALAR_TYPE is the type MKL accents for SCALAR_TYPE KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ MEM_SPACE, ETI_SPEC_AVAIL) +// ETI_SPEC_AVAIL is both false and true here, because we want to use +// MKL regardless of whether ETI is available. KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, Kokkos::Experimental::SYCLDeviceUSMSpace, true) KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, From 5b00607144c82c6c64e8396929bc69946fc72097 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Tue, 12 Dec 2023 09:05:27 -0700 Subject: [PATCH 3/7] add KOKKOSKERNELS_IMPL_MKL_VERSION macro --- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 4 ++++ blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 4 ++++ blas/tpls/KokkosBlas_MKL_tpl.hpp | 13 +++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 blas/tpls/KokkosBlas_MKL_tpl.hpp diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index fc866d9b70..f22eca8df0 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -185,6 +185,8 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) +#include + #define KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(SCALAR, LAYOUT, MEMSPACE) \ template <> \ struct gemm_tpl_spec_avail< \ @@ -201,6 +203,7 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, enum : bool { value = true }; \ }; +#if KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(double, Kokkos::LayoutLeft, Kokkos::Experimental::SYCLDeviceUSMSpace) KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(float, Kokkos::LayoutLeft, @@ -219,6 +222,7 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::Experimental::SYCLDeviceUSMSpace) KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace) +#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 #endif diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index d6d11897a3..8adbb75e59 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -502,6 +502,7 @@ KOKKOSBLAS3_CGEMM_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIPSpace, false) #endif // KOKKOSKERNELS_ENABLE_TPL_ROCBLAS #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) +#include #include #include @@ -603,6 +604,8 @@ TPL_SCALAR_TYPE is the type MKL accents for SCALAR_TYPE KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ MEM_SPACE, ETI_SPEC_AVAIL) + +#if KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 // ETI_SPEC_AVAIL is both false and true here, because we want to use // MKL regardless of whether ETI is available. KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, @@ -640,6 +643,7 @@ KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, true) KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, false) +#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 } // namespace KokkosBlas::Impl #endif // KOKKOSKERNELS_ENABLE_TPL_MKL && KOKKOS_ENABLE_SYCL diff --git a/blas/tpls/KokkosBlas_MKL_tpl.hpp b/blas/tpls/KokkosBlas_MKL_tpl.hpp new file mode 100644 index 0000000000..b4bba076d8 --- /dev/null +++ b/blas/tpls/KokkosBlas_MKL_tpl.hpp @@ -0,0 +1,13 @@ +#ifndef __KOKKOSBLAS_MKL_TPL_HPP__ +#define __KOKKOSBLAS_MKL_TPL_HPP__ + +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) + +#define KOKKOSKERNELS_IMPL_MKL_VERSION = + ((__INTEL_MKL__ * 100) ++ (__INTEL_MKL_MINOR__ * 10) ++ (__INTEL_MKL_UPDATE__ * 1)); + +#endif + +#endif From 550dee8593ca2ace81357bcb3ab387549f4aa4be Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Tue, 12 Dec 2023 09:07:07 -0700 Subject: [PATCH 4/7] formatting --- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 2 +- blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 3 +-- blas/tpls/KokkosBlas_MKL_tpl.hpp | 7 +++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index f22eca8df0..47bc81831c 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -222,7 +222,7 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::Experimental::SYCLDeviceUSMSpace) KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace) -#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 +#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 #endif diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 8adbb75e59..882fb12824 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -604,7 +604,6 @@ TPL_SCALAR_TYPE is the type MKL accents for SCALAR_TYPE KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ MEM_SPACE, ETI_SPEC_AVAIL) - #if KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 // ETI_SPEC_AVAIL is both false and true here, because we want to use // MKL regardless of whether ETI is available. @@ -643,7 +642,7 @@ KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, true) KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, false) -#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 +#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 } // namespace KokkosBlas::Impl #endif // KOKKOSKERNELS_ENABLE_TPL_MKL && KOKKOS_ENABLE_SYCL diff --git a/blas/tpls/KokkosBlas_MKL_tpl.hpp b/blas/tpls/KokkosBlas_MKL_tpl.hpp index b4bba076d8..b8b4d7ee80 100644 --- a/blas/tpls/KokkosBlas_MKL_tpl.hpp +++ b/blas/tpls/KokkosBlas_MKL_tpl.hpp @@ -3,10 +3,9 @@ #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) -#define KOKKOSKERNELS_IMPL_MKL_VERSION = - ((__INTEL_MKL__ * 100) -+ (__INTEL_MKL_MINOR__ * 10) -+ (__INTEL_MKL_UPDATE__ * 1)); +#define KOKKOSKERNELS_IMPL_MKL_VERSION = +((__INTEL_MKL__ * 100) + (__INTEL_MKL_MINOR__ * 10) + + (__INTEL_MKL_UPDATE__ * 1)); #endif From ce9182c4d42ae6aa7a3c3a1fefbaee596bc34d16 Mon Sep 17 00:00:00 2001 From: Carl William Pearson Date: Wed, 13 Dec 2023 11:44:08 -0700 Subject: [PATCH 5/7] remove use of KOKKOSKERNELS_IMPL_MKL_VERSION --- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 2 -- blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 2 -- blas/tpls/KokkosBlas_tpl_spec.hpp | 10 ++++++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index 47bc81831c..30d99a13c6 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -203,7 +203,6 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, enum : bool { value = true }; \ }; -#if KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(double, Kokkos::LayoutLeft, Kokkos::Experimental::SYCLDeviceUSMSpace) KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(float, Kokkos::LayoutLeft, @@ -222,7 +221,6 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::Experimental::SYCLDeviceUSMSpace) KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(Kokkos::complex, Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace) -#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 #endif diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 882fb12824..3a699b0f8d 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -604,7 +604,6 @@ TPL_SCALAR_TYPE is the type MKL accents for SCALAR_TYPE KOKKOSBLAS3_XGEMM_MKL(Kokkos::complex, std::complex, LAYOUT, \ MEM_SPACE, ETI_SPEC_AVAIL) -#if KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 // ETI_SPEC_AVAIL is both false and true here, because we want to use // MKL regardless of whether ETI is available. KOKKOSBLAS3_DGEMM_MKL(Kokkos::LayoutLeft, @@ -642,7 +641,6 @@ KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, true) KOKKOSBLAS3_CGEMM_MKL(Kokkos::LayoutRight, Kokkos::Experimental::SYCLDeviceUSMSpace, false) -#endif // KOKKOSKERNELS_IMPL_MKL_VERSION >= 202300 } // namespace KokkosBlas::Impl #endif // KOKKOSKERNELS_ENABLE_TPL_MKL && KOKKOS_ENABLE_SYCL diff --git a/blas/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp index 39469f1354..d489e90203 100644 --- a/blas/tpls/KokkosBlas_tpl_spec.hpp +++ b/blas/tpls/KokkosBlas_tpl_spec.hpp @@ -231,7 +231,8 @@ struct MagmaSingleton { } // namespace KokkosBlas #endif // KOKKOSKERNELS_ENABLE_TPL_MAGMA -#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) +#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) +#include #include namespace KokkosBlas { @@ -245,13 +246,14 @@ inline oneapi::mkl::transpose trans_mode_kk_to_onemkl(char mode_kk) { case 'C': return oneapi::mkl::transpose::conjtrans; default:; } - throw std::invalid_argument( - "Invalid mode for oneMKL (should be one of N, T, C)"); + std::stringstream ss; + ss << "Invalid mode \"" << mode_kk << "\" for oneMKL (should be one of N, T, C)"; + throw std::invalid_argument(ss.str()); } } // namespace Impl } // namespace KokkosBlas -#endif // KOKKOSKERNELS_ENABLE_TPL_MKL +#endif // KOKKOSKERNELS_ENABLE_TPL_MKL && KOKKOS_ENABLE_SYCL #endif // KOKKOSBLAS_TPL_SPEC_HPP_ From d5f79a9dba10255859e5b14d9aa6b2741976ea33 Mon Sep 17 00:00:00 2001 From: Carl William Pearson Date: Wed, 13 Dec 2023 11:50:21 -0700 Subject: [PATCH 6/7] remove KokkosBlas_MKL_tpl.hpp header --- blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp | 2 -- blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp | 1 - blas/tpls/KokkosBlas_MKL_tpl.hpp | 12 ------------ 3 files changed, 15 deletions(-) delete mode 100644 blas/tpls/KokkosBlas_MKL_tpl.hpp diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp index 30d99a13c6..fc866d9b70 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_avail.hpp @@ -185,8 +185,6 @@ KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_ROCBLAS(Kokkos::complex, #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) -#include - #define KOKKOSBLAS3_GEMM_TPL_SPEC_AVAIL_MKL(SCALAR, LAYOUT, MEMSPACE) \ template <> \ struct gemm_tpl_spec_avail< \ diff --git a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp index 3a699b0f8d..d6d11897a3 100644 --- a/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp +++ b/blas/tpls/KokkosBlas3_gemm_tpl_spec_decl.hpp @@ -502,7 +502,6 @@ KOKKOSBLAS3_CGEMM_ROCBLAS(Kokkos::LayoutRight, Kokkos::HIPSpace, false) #endif // KOKKOSKERNELS_ENABLE_TPL_ROCBLAS #if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) && defined(KOKKOS_ENABLE_SYCL) -#include #include #include diff --git a/blas/tpls/KokkosBlas_MKL_tpl.hpp b/blas/tpls/KokkosBlas_MKL_tpl.hpp deleted file mode 100644 index b8b4d7ee80..0000000000 --- a/blas/tpls/KokkosBlas_MKL_tpl.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __KOKKOSBLAS_MKL_TPL_HPP__ -#define __KOKKOSBLAS_MKL_TPL_HPP__ - -#if defined(KOKKOSKERNELS_ENABLE_TPL_MKL) - -#define KOKKOSKERNELS_IMPL_MKL_VERSION = -((__INTEL_MKL__ * 100) + (__INTEL_MKL_MINOR__ * 10) + - (__INTEL_MKL_UPDATE__ * 1)); - -#endif - -#endif From 34da41e6baaf0b9bb4073a4eb54af6d7353cc076 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Wed, 13 Dec 2023 11:58:25 -0700 Subject: [PATCH 7/7] formatting --- blas/tpls/KokkosBlas_tpl_spec.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blas/tpls/KokkosBlas_tpl_spec.hpp b/blas/tpls/KokkosBlas_tpl_spec.hpp index d489e90203..db1f1603d9 100644 --- a/blas/tpls/KokkosBlas_tpl_spec.hpp +++ b/blas/tpls/KokkosBlas_tpl_spec.hpp @@ -247,7 +247,8 @@ inline oneapi::mkl::transpose trans_mode_kk_to_onemkl(char mode_kk) { default:; } std::stringstream ss; - ss << "Invalid mode \"" << mode_kk << "\" for oneMKL (should be one of N, T, C)"; + ss << "Invalid mode \"" << mode_kk + << "\" for oneMKL (should be one of N, T, C)"; throw std::invalid_argument(ss.str()); }