52#ifndef AMESOS2_KOKKOS_IMPL_HPP
53#define AMESOS2_KOKKOS_IMPL_HPP
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.