52 #ifndef AMESOS2_KOKKOS_IMPL_HPP
53 #define AMESOS2_KOKKOS_IMPL_HPP
55 #include <type_traits>
57 #include <Kokkos_Core.hpp>
58 #include <KokkosSparse_CrsMatrix.hpp>
60 #define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(S,LO,EXEC_SPACE) \
61 template class Amesos2::AMESOS2_KOKKOS_IMPL_SOLVER_NAME<KokkosSparse::CrsMatrix<S, LO, \
62 typename EXEC_SPACE::device_type>, \
63 Kokkos::View<S**, Kokkos::LayoutLeft, typename EXEC_SPACE::device_type> >;
65 #ifdef KOKKOS_ENABLE_CUDA_UVM
66 #define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(S,LO) \
67 template class Amesos2::AMESOS2_KOKKOS_IMPL_SOLVER_NAME<KokkosSparse::CrsMatrix<S, LO, \
68 Kokkos::Device<Kokkos::Cuda,Kokkos::CudaSpace>>, \
69 Kokkos::View<S**, Kokkos::LayoutLeft, Kokkos::Device<Kokkos::Cuda,Kokkos::CudaSpace>> >;
71 #define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(S,LO)
75 #if defined(KOKKOS_ENABLE_SERIAL)
76 #ifdef HAVE_TPETRA_INST_FLOAT
77 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Kokkos::Serial)
79 #ifdef HAVE_TPETRA_INST_DOUBLE
80 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Kokkos::Serial)
82 #ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
83 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Kokkos::Serial)
85 #ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
86 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Kokkos::Serial)
90 #if defined(KOKKOS_ENABLE_THREADS)
91 #define EXEC_SPACE Kokkos::Threads
92 #ifdef HAVE_TPETRA_INST_FLOAT
93 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Kokkos::Threads)
95 #ifdef HAVE_TPETRA_INST_DOUBLE
96 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Kokkos::Threads)
98 #ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
99 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Kokkos::Threads)
101 #ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
102 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Kokkos::Threads)
106 #if defined(KOKKOS_ENABLE_OPENMP)
107 #ifdef HAVE_TPETRA_INST_FLOAT
108 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Kokkos::OpenMP)
110 #ifdef HAVE_TPETRA_INST_DOUBLE
111 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Kokkos::OpenMP)
113 #ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
114 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Kokkos::OpenMP)
116 #ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
117 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Kokkos::OpenMP)
121 #if defined(KOKKOS_ENABLE_CUDA)
122 #ifdef HAVE_TPETRA_INST_FLOAT
123 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Kokkos::Cuda)
124 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(
float,
int)
126 #ifdef HAVE_TPETRA_INST_DOUBLE
127 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Kokkos::Cuda)
128 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(
double,
int)
130 #ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
131 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Kokkos::Cuda)
132 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(Kokkos::complex<float>,
int)
134 #ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
135 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Kokkos::Cuda)
136 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(Kokkos::complex<double>,
int)
140 #if defined(KOKKOS_ENABLE_HIP)
141 #ifdef HAVE_TPETRA_INST_FLOAT
142 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Kokkos::Experimental::HIP)
144 #ifdef HAVE_TPETRA_INST_DOUBLE
145 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Kokkos::Experimental::HIP)
147 #ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
148 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Kokkos::Experimental::HIP)
150 #ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
151 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Kokkos::Experimental::HIP)
Amesos2::MultiVecAdapter specialization for the Kokkos::View class.