10#ifndef TPETRA_MATRIXMATRIX_SYCL_DEF_HPP
11#define TPETRA_MATRIXMATRIX_SYCL_DEF_HPP
13#include "Tpetra_Details_IntRowPtrHelper.hpp"
15#ifdef HAVE_TPETRA_INST_SYCL
20struct KokkosKernelsSPGEMMBackend<
Tpetra::KokkosCompat::KokkosSYCLWrapperNode> {
21 static std::string parameter_prefix() {
return "sycl"; }
22 static std::string algorithm_label() {
return "SYCL"; }
24 template <
class MatrixType>
25 static void pre_spgemm(MatrixType&) {}
30template <
class Scalar,
33 class LocalOrdinalViewType>
34struct KernelWrappers<Scalar, LocalOrdinal, GlobalOrdinal,
Tpetra::KokkosCompat::KokkosSYCLWrapperNode, LocalOrdinalViewType> {
35 using Node = Tpetra::KokkosCompat::KokkosSYCLWrapperNode;
36 static inline void mult_A_B_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
37 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
38 const LocalOrdinalViewType& Acol2Brow,
39 const LocalOrdinalViewType& Acol2Irow,
40 const LocalOrdinalViewType& Bcol2Ccol,
41 const LocalOrdinalViewType& Icol2Ccol,
42 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
43 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
44 const std::string& label = std::string(),
45 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
46 Tpetra::MMdetails::kokkos_kernels_mult_A_B_newmatrix(
47 Aview, Bview, Acol2Brow, Acol2Irow, Bcol2Ccol, Icol2Ccol, C, Cimport, label, params);
50 static inline void mult_A_B_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
51 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
52 const LocalOrdinalViewType& Acol2Brow,
53 const LocalOrdinalViewType& Acol2Irow,
54 const LocalOrdinalViewType& Bcol2Ccol,
55 const LocalOrdinalViewType& Icol2Ccol,
56 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
57 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
58 const std::string& label = std::string(),
59 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
60 Tpetra::MMdetails::host_mult_A_B_reuse(
61 Aview, Bview, Acol2Brow, Acol2Irow,
62 Bcol2Ccol, Icol2Ccol, C, Cimport, label, params);
67template <
class Scalar,
69 class GlobalOrdinal,
class LocalOrdinalViewType>
70struct KernelWrappers2<Scalar, LocalOrdinal, GlobalOrdinal,
Tpetra::KokkosCompat::KokkosSYCLWrapperNode, LocalOrdinalViewType> {
71 using Node = Tpetra::KokkosCompat::KokkosSYCLWrapperNode;
72 static inline void jacobi_A_B_newmatrix_kernel_wrapper(
typename Teuchos::ScalarTraits<Scalar>::magnitudeType omega,
73 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
74 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
75 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
76 const LocalOrdinalViewType& Acol2Brow,
77 const LocalOrdinalViewType& Acol2Irow,
78 const LocalOrdinalViewType& Bcol2Ccol,
79 const LocalOrdinalViewType& Icol2Ccol,
80 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
81 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
82 const std::string& label = std::string(),
83 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
84#ifdef HAVE_TPETRA_MMM_TIMINGS
85 std::string prefix_mmm = std::string(
"TpetraExt ") + label + std::string(
": ");
86 using Teuchos::TimeMonitor;
87 Teuchos::RCP<TimeMonitor> MM;
95 std::string myalg(
"KK");
96 if (!params.is_null()) {
97 if (params->isParameter(
"sycl: jacobi algorithm"))
98 myalg = params->get(
"sycl: jacobi algorithm", myalg);
101 if (myalg ==
"MSAK") {
102 ::Tpetra::MatrixMatrix::ExtraKernels::jacobi_A_B_newmatrix_MultiplyScaleAddKernel(omega, Dinv, Aview, Bview, Acol2Brow, Acol2Irow, Bcol2Ccol, Icol2Ccol, C, Cimport, label, params);
103 }
else if (myalg ==
"KK") {
104 kokkos_kernels_jacobi_A_B_newmatrix(omega, Dinv, Aview, Bview, Acol2Brow, Acol2Irow, Bcol2Ccol, Icol2Ccol, C, Cimport, label, params);
106 throw std::runtime_error(
"Tpetra::MatrixMatrix::Jacobi newmatrix unknown kernel");
109#ifdef HAVE_TPETRA_MMM_TIMINGS
111 MM = rcp(
new TimeMonitor(*TimeMonitor::getNewTimer(prefix_mmm + std::string(
"Jacobi Newmatrix SYCLESFC"))));
115 RCP<Teuchos::ParameterList> labelList = rcp(
new Teuchos::ParameterList);
116 labelList->set(
"Timer Label", label);
117 if (!params.is_null()) labelList->set(
"compute global constants", params->get(
"compute global constants",
true));
120 if (!C.isFillComplete()) {
121 RCP<const Export<LocalOrdinal, GlobalOrdinal, Node> > dummyExport;
122 C.expertStaticFillComplete(Bview.origMatrix->getDomainMap(), Aview.origMatrix->getRangeMap(), Cimport, dummyExport, labelList);
126 static inline void jacobi_A_B_reuse_kernel_wrapper(
typename Teuchos::ScalarTraits<Scalar>::magnitudeType omega,
127 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
128 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
129 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
130 const LocalOrdinalViewType& Acol2Brow,
131 const LocalOrdinalViewType& Acol2Irow,
132 const LocalOrdinalViewType& Bcol2Ccol,
133 const LocalOrdinalViewType& Icol2Ccol,
134 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
135 Teuchos::RCP<
const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
136 const std::string& label = std::string(),
137 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
138 host_jacobi_A_B_reuse(omega, Dinv, Aview, Bview, Acol2Brow, Acol2Irow,
139 Bcol2Ccol, Icol2Ccol, C, Cimport, label, params);
Namespace Tpetra contains the class and methods constituting the Tpetra library.