42 #ifndef TPETRA_MATRIXMATRIX_EXTRAKERNELS_DECL_HPP
43 #define TPETRA_MATRIXMATRIX_EXTRAKERNELS_DECL_HPP
49 namespace MatrixMatrix {
52 template <
typename View>
53 using UnmanagedView = Kokkos::View<
typename View::data_type
54 ,
typename View::array_layout
55 ,
typename View::device_type
56 ,
typename Kokkos::MemoryTraits< Kokkos::Unmanaged>
59 namespace ExtraKernels {
61 template<
class CrsMatrixType>
62 size_t C_estimate_nnz_per_row(CrsMatrixType & A, CrsMatrixType &B);
64 template<
class InRowptrArrayType,
class InColindArrayType,
class InValsArrayType,
65 class OutRowptrType,
class OutColindType,
class OutValsType>
66 void copy_out_from_thread_memory(
const InRowptrArrayType & Inrowptr,
const InColindArrayType &Incolind,
const InValsArrayType & Invals,
67 size_t m,
double thread_chunk,
68 OutRowptrType & Outrowptr, OutColindType &Outcolind, OutValsType & Outvals);
71 #ifdef HAVE_TPETRA_INST_OPENMP
72 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class LocalOrdinalViewType>
73 static inline void mult_A_B_newmatrix_LowThreadGustavsonKernel(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Aview,
74 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Bview,
75 const LocalOrdinalViewType & Acol2Brow,
76 const LocalOrdinalViewType & Acol2Irow,
77 const LocalOrdinalViewType & Bcol2Ccol,
78 const LocalOrdinalViewType & Icol2Ccol,
79 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& C,
80 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosOpenMPWrapperNode> > Cimport,
81 const std::string& label,
82 const Teuchos::RCP<Teuchos::ParameterList>& params);
84 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class LocalOrdinalViewType>
85 static inline void mult_A_B_reuse_LowThreadGustavsonKernel(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Aview,
86 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Bview,
87 const LocalOrdinalViewType & Acol2Brow,
88 const LocalOrdinalViewType & Acol2Irow,
89 const LocalOrdinalViewType & Bcol2Ccol,
90 const LocalOrdinalViewType & Icol2Ccol,
91 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& C,
92 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosOpenMPWrapperNode> > Cimport,
93 const std::string& label,
94 const Teuchos::RCP<Teuchos::ParameterList>& params);
96 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class LocalOrdinalViewType>
97 static inline void jacobi_A_B_newmatrix_LowThreadGustavsonKernel(Scalar omega,
98 const Vector<Scalar,LocalOrdinal,GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode> & Dinv,
99 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Aview,
100 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Bview,
101 const LocalOrdinalViewType & Acol2Brow,
102 const LocalOrdinalViewType & Acol2Irow,
103 const LocalOrdinalViewType & Bcol2Ccol,
104 const LocalOrdinalViewType & Icol2Ccol,
105 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& C,
106 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosOpenMPWrapperNode> > Cimport,
107 const std::string& label,
108 const Teuchos::RCP<Teuchos::ParameterList>& params);
110 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class LocalOrdinalViewType>
111 static inline void jacobi_A_B_reuse_LowThreadGustavsonKernel(Scalar omega,
112 const Vector<Scalar,LocalOrdinal,GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode> & Dinv,
113 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Aview,
114 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& Bview,
115 const LocalOrdinalViewType & Acol2Brow,
116 const LocalOrdinalViewType & Acol2Irow,
117 const LocalOrdinalViewType & Bcol2Ccol,
118 const LocalOrdinalViewType & Icol2Ccol,
119 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Kokkos::Compat::KokkosOpenMPWrapperNode>& C,
120 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Kokkos::Compat::KokkosOpenMPWrapperNode> > Cimport,
121 const std::string& label,
122 const Teuchos::RCP<Teuchos::ParameterList>& params);
126 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node,
class LocalOrdinalViewType>
127 static inline void jacobi_A_B_newmatrix_MultiplyScaleAddKernel(Scalar omega,
128 const Vector<Scalar,LocalOrdinal,GlobalOrdinal, Node> & Dinv,
129 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
130 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
131 const LocalOrdinalViewType & Acol2Brow,
132 const LocalOrdinalViewType & Acol2Irow,
133 const LocalOrdinalViewType & Bcol2Ccol,
134 const LocalOrdinalViewType & Icol2Ccol,
135 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
136 Teuchos::RCP<
const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
137 const std::string& label,
138 const Teuchos::RCP<Teuchos::ParameterList>& params);