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)
104 #endif // KOKKOS_ENABLE_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)
119 #endif // KOKKOS_ENABLE_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)
138 #endif // KOKKOS_ENABLE_CUDA 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)
153 #endif // KOKKOS_ENABLE_HIP 155 #endif // AMESOS2_KOKKOS_IMPL_HPP Amesos2::MultiVecAdapter specialization for the Kokkos::View class.