Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Tpetra_Details_ExecutionSpacesUser.hpp
1#ifndef TPETRA_DETAILS_EXECUTIONSPACESUSER_HPP
2#define TPETRA_DETAILS_EXECUTIONSPACESUSER_HPP
3
4#include <iostream>
5#include <sstream>
6#include <vector>
7
8#include <Kokkos_Core.hpp>
9
10#include "Teuchos_RCP.hpp"
11
12#include "Tpetra_Details_ExecutionSpacesSlot.hpp"
13
14namespace Tpetra {
15namespace Details {
16namespace Spaces {
17
25class User {
26public:
27#ifdef KOKKOS_ENABLE_CUDA
28
37 template <typename ExecSpace,
38 Spaces::Priority priority = Spaces::Priority::medium,
39 Spaces::IsCuda<ExecSpace> = true>
40 Teuchos::RCP<const ExecSpace> space_instance() const {
41 return cudaSlot.space_instance<priority>();
42 }
43
53 template <typename ExecSpace, Spaces::IsCuda<ExecSpace> = true>
54 Teuchos::RCP<const ExecSpace>
55 space_instance(const Spaces::Priority &priority) const {
56 return cudaSlot.space_instance(priority);
57 }
58#endif // KOKKOS_ENABLE_CUDA
59
60#ifdef KOKKOS_ENABLE_SERIAL
61 template <typename ExecSpace,
62 Spaces::Priority priority = Spaces::Priority::medium,
63 Spaces::IsSerial<ExecSpace> = true>
64 Teuchos::RCP<const ExecSpace> space_instance() const {
65 return serialSlot.space_instance<priority>();
66 }
67 template <typename ExecSpace, Spaces::IsSerial<ExecSpace> = true>
68 Teuchos::RCP<const ExecSpace>
69 space_instance(const Spaces::Priority &priority) const {
70 return serialSlot.space_instance(priority);
71 }
72#endif // KOKKOS_ENABLE_SERIAL
73
74#ifdef KOKKOS_ENABLE_OPENMP
75 template <typename ExecSpace,
76 Spaces::Priority priority = Spaces::Priority::medium,
77 Spaces::IsOpenMP<ExecSpace> = true>
78 Teuchos::RCP<const ExecSpace> space_instance() const {
79 return openMPSlot.space_instance<priority>();
80 }
81 template <typename ExecSpace, Spaces::IsOpenMP<ExecSpace> = true>
82 Teuchos::RCP<const ExecSpace>
83 space_instance(const Spaces::Priority &priority) const {
84 return openMPSlot.space_instance(priority);
85 }
86#endif // KOKKOS_ENABLE_OPENMP
87
88#ifdef KOKKOS_ENABLE_HIP
89 template <typename ExecSpace,
90 Spaces::Priority priority = Spaces::Priority::medium,
91 Spaces::IsHIP<ExecSpace> = true>
92 Teuchos::RCP<const ExecSpace> space_instance() const {
93 return HIPSlot.space_instance<priority>();
94 }
95 template <typename ExecSpace, Spaces::IsHIP<ExecSpace> = true>
96 Teuchos::RCP<const ExecSpace>
97 space_instance(const Spaces::Priority &priority) const {
98 return HIPSlot.space_instance(priority);
99 }
100#endif // KOKKOS_ENABLE_HIP
101
102#ifdef KOKKOS_ENABLE_SYCL
103 template <typename ExecSpace,
104 Spaces::Priority priority = Spaces::Priority::medium,
105 Spaces::IsSYCL<ExecSpace> = true>
106 Teuchos::RCP<const ExecSpace> space_instance() const {
107 return SYCLSlot.space_instance<priority>();
108 }
109 template <typename ExecSpace, Spaces::IsSYCL<ExecSpace> = true>
110 Teuchos::RCP<const ExecSpace>
111 space_instance(const Spaces::Priority &priority) const {
112 return SYCLSlot.space_instance(priority);
113 }
114#endif // KOKKOS_ENABLE_SYCL
115
116#ifdef KOKKOS_ENABLE_SERIAL
117 Slot<Kokkos::Serial> serialSlot;
118#endif
119#ifdef KOKKOS_ENABLE_OPENMP
120 Slot<Kokkos::OpenMP> openMPSlot;
121#endif
122#ifdef KOKKOS_ENABLE_CUDA
123 Slot<Kokkos::Cuda> cudaSlot;
124#endif
125#ifdef KOKKOS_ENABLE_HIP
126 Slot<Kokkos::HIP> HIPSlot;
127#endif
128#ifdef KOKKOS_ENABLE_SYCL
130#endif
131
132}; // User
133} // namespace Spaces
134} // namespace Details
135} // namespace Tpetra
136
137#endif // TPETRA_DETAILS_EXECUTIONSPACESUSER_HPP
Teuchos::RCP< const ExecSpace > space_instance(const Priority &priority, int i=0)
get a strong Teuchos::RCP to Tpetra-managed Kokkos execution space instance i
Priority
Priority interface for Tpetra's managed execution spaces.
Lazily acquires and stores Kokkos Execution Spaces.
A class can inherit from this if it wants to use Tpetra managed spaces.
Nonmember function that computes a residual Computes R = B - A * X.
Namespace Tpetra contains the class and methods constituting the Tpetra library.