From 7413cfa51806698f26bf53f5dcdef8a24a0f7d29 Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Wed, 13 Dec 2023 15:01:28 +0100 Subject: [PATCH] split up HIP compilation further --- core/base/mixed_precision_types.hpp | 126 +++++++++++---- hip/CMakeLists.txt | 3 +- hip/matrix/csr_kernels.instantiate.hip.cpp | 144 ++++++++++++++++++ hip/matrix/ell_kernels.instantiate.hip.cpp | 28 ++++ ...s.hip.cpp => ell_kernels.template.hip.cpp} | 6 - 5 files changed, 273 insertions(+), 34 deletions(-) create mode 100644 hip/matrix/ell_kernels.instantiate.hip.cpp rename hip/matrix/{ell_kernels.hip.cpp => ell_kernels.template.hip.cpp} (98%) diff --git a/core/base/mixed_precision_types.hpp b/core/base/mixed_precision_types.hpp index 0173ddde193..92d822921c3 100644 --- a/core/base/mixed_precision_types.hpp +++ b/core/base/mixed_precision_types.hpp @@ -13,35 +13,59 @@ #ifdef GINKGO_MIXED_PRECISION #define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, ...) \ - template _macro(float, float, float, __VA_ARGS__); \ - template _macro(float, float, double, __VA_ARGS__); \ - template _macro(float, double, float, __VA_ARGS__); \ - template _macro(float, double, double, __VA_ARGS__) + template _macro(float, float, float, __VA_ARGS__) #define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, ...) \ - template _macro(double, float, float, __VA_ARGS__); \ - template _macro(double, float, double, __VA_ARGS__); \ - template _macro(double, double, float, __VA_ARGS__); \ - template _macro(double, double, double, __VA_ARGS__) + template _macro(float, float, double, __VA_ARGS__) #define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, ...) \ + template _macro(float, double, float, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, ...) \ + template _macro(float, double, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5(_macro, ...) \ + template _macro(double, float, float, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6(_macro, ...) \ + template _macro(double, float, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7(_macro, ...) \ + template _macro(double, double, float, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8(_macro, ...) \ + template _macro(double, double, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9(_macro, ...) \ template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10(_macro, ...) \ + template _macro(std::complex, std::complex, \ std::complex, __VA_ARGS__) -#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, ...) \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16(_macro, ...) \ + template _macro(std::complex, std::complex, \ std::complex, __VA_ARGS__) #else @@ -60,14 +84,62 @@ template _macro(std::complex, std::complex, \ std::complex, __VA_ARGS__) +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16(_macro, ...) \ + static_assert(true, "avoid warnings about missing semicolon") + #endif -#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, ...) \ - GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, __VA_ARGS__); \ - GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, __VA_ARGS__); \ - GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, __VA_ARGS__); \ - GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, __VA_ARGS__) +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, ...) \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16(_macro, __VA_ARGS__) #define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE(_macro) \ diff --git a/hip/CMakeLists.txt b/hip/CMakeLists.txt index 6cf4d056e83..9e69f98ea1d 100644 --- a/hip/CMakeLists.txt +++ b/hip/CMakeLists.txt @@ -1,5 +1,6 @@ include(${PROJECT_SOURCE_DIR}/cmake/template_instantiation.cmake) add_instantiation_files(. matrix/csr_kernels.instantiate.hip.cpp CSR_INSTANTIATE) +add_instantiation_files(. matrix/ell_kernels.instantiate.hip.cpp ELL_INSTANTIATE) add_instantiation_files(. matrix/fbcsr_kernels.instantiate.hip.cpp FBCSR_INSTANTIATE) # we don't split up the dense kernels into distinct compilations list(APPEND GKO_UNIFIED_COMMON_SOURCES ${PROJECT_SOURCE_DIR}/common/unified/matrix/dense_kernels.instantiate.cpp) @@ -42,7 +43,7 @@ set(GINKGO_HIP_SOURCES ${CSR_INSTANTIATE} matrix/dense_kernels.hip.cpp matrix/diagonal_kernels.hip.cpp - matrix/ell_kernels.hip.cpp + ${ELL_INSTANTIATE} ${FBCSR_INSTANTIATE} matrix/sellp_kernels.hip.cpp matrix/sparsity_csr_kernels.hip.cpp diff --git a/hip/matrix/csr_kernels.instantiate.hip.cpp b/hip/matrix/csr_kernels.instantiate.hip.cpp index c3f78ed83af..0bb43af70e5 100644 --- a/hip/matrix/csr_kernels.instantiate.hip.cpp +++ b/hip/matrix/csr_kernels.instantiate.hip.cpp @@ -34,6 +34,42 @@ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(GKO_DECLARE_CSR_SPMV_KERNEL, GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(GKO_DECLARE_CSR_SPMV_KERNEL, int32); // split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(GKO_DECLARE_CSR_SPMV_KERNEL, int64); // split @@ -45,6 +81,42 @@ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(GKO_DECLARE_CSR_SPMV_KERNEL, // split GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(GKO_DECLARE_CSR_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); // split @@ -60,6 +132,42 @@ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3( GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4( GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); // split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1( GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); // split @@ -71,6 +179,42 @@ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3( // split GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4( GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT5( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT6( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT7( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT8( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT9( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT10( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT11( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT12( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT13( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT14( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT15( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT16( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); // split diff --git a/hip/matrix/ell_kernels.instantiate.hip.cpp b/hip/matrix/ell_kernels.instantiate.hip.cpp new file mode 100644 index 00000000000..fbb953e895a --- /dev/null +++ b/hip/matrix/ell_kernels.instantiate.hip.cpp @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: 2017-2023 The Ginkgo authors +// +// SPDX-License-Identifier: BSD-3-Clause + +#include "hip/matrix/ell_kernels.template.hip.cpp" + + +namespace gko { +namespace kernels { +namespace hip { +namespace ell { + +// begin +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_ELL_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_ELL_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_ELL_ADVANCED_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_ELL_ADVANCED_SPMV_KERNEL, + int64); +// end + +} // namespace ell +} // namespace hip +} // namespace kernels +} // namespace gko diff --git a/hip/matrix/ell_kernels.hip.cpp b/hip/matrix/ell_kernels.template.hip.cpp similarity index 98% rename from hip/matrix/ell_kernels.hip.cpp rename to hip/matrix/ell_kernels.template.hip.cpp index 37df9787b08..5fd0b07c57d 100644 --- a/hip/matrix/ell_kernels.hip.cpp +++ b/hip/matrix/ell_kernels.template.hip.cpp @@ -230,9 +230,6 @@ void spmv(std::shared_ptr exec, b, c); } -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE( - GKO_DECLARE_ELL_SPMV_KERNEL); - template @@ -264,9 +261,6 @@ void advanced_spmv(std::shared_ptr exec, b, c, alpha, beta); } -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE( - GKO_DECLARE_ELL_ADVANCED_SPMV_KERNEL); - } // namespace ell } // namespace hip