Skip to content

Commit 72fd0d2

Browse files
committed
SpGEMM oneAPI: adding TPL interface with oneAPI MKL
Starting some work to interface with oneapi sparse::matmat. This will help for multigrid and domain decomposition algorithms.
1 parent e2b240a commit 72fd0d2

2 files changed

+106
-1
lines changed

sparse/tpls/KokkosSparse_spgemm_numeric_tpl_spec_avail.hpp

+62-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,68 @@ SPGEMM_NUMERIC_AVAIL_MKL_E(Kokkos::Serial)
183183
#ifdef KOKKOS_ENABLE_OPENMP
184184
SPGEMM_NUMERIC_AVAIL_MKL_E(Kokkos::OpenMP)
185185
#endif
186-
#endif
186+
187+
#if defined(KOKKOS_ENABLE_SYCL)
188+
#define SPGEMM_NUMERIC_AVAIL_MKL_SYCL(SCALAR, ORDINAL) \
189+
template <> \
190+
struct spgemm_numeric_tpl_spec_avail< \
191+
KokkosKernels::Experimental::KokkosKernelsHandle< \
192+
const ORDINAL, const ORDINAL, const SCALAR, \
193+
Kokkos::Experimental::SYCL, \
194+
Kokkos::Experimental::SYCLDeviceUSMSpace, \
195+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
196+
Kokkos::View<const ORDINAL *, default_layout, \
197+
Kokkos::Device<Kokkos::Experimental::SYCL, \
198+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
199+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
200+
Kokkos::View<const ORDINAL *, default_layout, \
201+
Kokkos::Device<Kokkos::Experimental::SYCL, \
202+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
203+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
204+
Kokkos::View<const SCALAR *, default_layout, \
205+
Kokkos::Device<Kokkos::Experimental::SYCL, \
206+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
207+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
208+
Kokkos::View<const ORDINAL *, default_layout, \
209+
Kokkos::Device<Kokkos::Experimental::SYCL, \
210+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
211+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
212+
Kokkos::View<const ORDINAL *, default_layout, \
213+
Kokkos::Device<Kokkos::Experimental::SYCL, \
214+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
215+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
216+
Kokkos::View<const SCALAR *, default_layout, \
217+
Kokkos::Device<Kokkos::Experimental::SYCL, \
218+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
219+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
220+
Kokkos::View<const ORDINAL *, default_layout, \
221+
Kokkos::Device<Kokkos::Experimental::SYCL, \
222+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
223+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
224+
Kokkos::View<ORDINAL *, default_layout, \
225+
Kokkos::Device<Kokkos::Experimental::SYCL, \
226+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
227+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
228+
Kokkos::View<SCALAR *, default_layout, \
229+
Kokkos::Device<Kokkos::Experimental::SYCL, \
230+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
231+
Kokkos::MemoryTraits<Kokkos::Unmanaged> > > { \
232+
enum : bool { value = true }; \
233+
};
234+
235+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(float, std::int32_t)
236+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(double, std::int32_t)
237+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(Kokkos::complex<float>, std::int32_t)
238+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(Kokkos::complex<double>, std::int32_t)
239+
240+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(float, std::int64_t)
241+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(double, std::int64_t)
242+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(Kokkos::complex<float>, std::int64_t)
243+
SPGEMM_NUMERIC_AVAIL_MKL_SYCL(Kokkos::complex<double>, std::int64_t)
244+
245+
#endif // KOKKOS_ENABLE_SYCL
246+
247+
#endif // KOKKOSKERNELS_ENABLE_TPL_MKL
187248

188249
} // namespace Impl
189250
} // namespace KokkosSparse

sparse/tpls/KokkosSparse_spgemm_symbolic_tpl_spec_avail.hpp

+44
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,50 @@ SPGEMM_SYMBOLIC_AVAIL_MKL_E(Kokkos::Serial)
143143
#ifdef KOKKOS_ENABLE_OPENMP
144144
SPGEMM_SYMBOLIC_AVAIL_MKL_E(Kokkos::OpenMP)
145145
#endif
146+
147+
#if defined(KOKKOS_ENABLE_SYCL)
148+
#define SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(SCALAR, ORDINAL) \
149+
template <> \
150+
struct spgemm_symbolic_tpl_spec_avail< \
151+
KokkosKernels::Experimental::KokkosKernelsHandle< \
152+
const ORDINAL, const ORDINAL, const SCALAR, \
153+
Kokkos::Experimental::SYCL, \
154+
Kokkos::Experimental::SYCLDeviceUSMSpace, \
155+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
156+
Kokkos::View<const ORDINAL *, default_layout, \
157+
Kokkos::Device<Kokkos::Experimental::SYCL, \
158+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
159+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
160+
Kokkos::View<const ORDINAL *, default_layout, \
161+
Kokkos::Device<Kokkos::Experimental::SYCL, \
162+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
163+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
164+
Kokkos::View<const ORDINAL *, default_layout, \
165+
Kokkos::Device<Kokkos::Experimental::SYCL, \
166+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
167+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
168+
Kokkos::View<const ORDINAL *, default_layout, \
169+
Kokkos::Device<Kokkos::Experimental::SYCL, \
170+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
171+
Kokkos::MemoryTraits<Kokkos::Unmanaged> >, \
172+
Kokkos::View<ORDINAL *, default_layout, \
173+
Kokkos::Device<Kokkos::Experimental::SYCL, \
174+
Kokkos::Experimental::SYCLDeviceUSMSpace>, \
175+
Kokkos::MemoryTraits<Kokkos::Unmanaged> > > { \
176+
enum : bool { value = true }; \
177+
};
178+
179+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(float, std::int32_t)
180+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(double, std::int32_t)
181+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(Kokkos::complex<float>, std::int32_t)
182+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(Kokkos::complex<double>, std::int32_t)
183+
184+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(float, std::int64_t)
185+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(double, std::int64_t)
186+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(Kokkos::complex<float>, std::int64_t)
187+
SPGEMM_SYMBOLIC_AVAIL_MKL_SYCL(Kokkos::complex<double>, std::int64_t)
188+
189+
#endif // KOKKOS_ENABLE_SYCL
146190
#endif // KOKKOSKERNELS_ENABLE_TPL_MKL
147191

148192
} // namespace Impl

0 commit comments

Comments
 (0)