Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Tpetra_Details_DefaultTypes.hpp
1// @HEADER
2// ***********************************************************************
3//
4// Tpetra: Templated Linear Algebra Services Package
5// Copyright (2008) Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// ************************************************************************
38// @HEADER
39
40#ifndef TPETRA_DETAILS_DEFAULTTYPES_HPP
41#define TPETRA_DETAILS_DEFAULTTYPES_HPP
42
43#include "TpetraCore_config.h"
44#include "KokkosClassic_DefaultNode_config.h"
45#include "KokkosCompat_ClassicNodeAPI_Wrapper.hpp"
46
48namespace Tpetra {
49
52namespace Details {
53
59namespace DefaultTypes {
61#if defined(HAVE_TPETRA_INST_DOUBLE)
62 using scalar_type = double;
63#elif defined(HAVE_TPETRA_INST_FLOAT)
64 using scalar_type = float;
65#else
66# error "Tpetra: No scalar types in the set {float, double} have been enabled."
67#endif
68
71
74#if defined(HAVE_TPETRA_INST_INT_LONG_LONG)
75 using global_ordinal_type = long long;
76#elif defined(HAVE_TPETRA_INST_INT_INT)
77 using global_ordinal_type = int;
78#elif defined(HAVE_TPETRA_INST_INT_LONG)
79 using global_ordinal_type = long;
80#elif defined(HAVE_TPETRA_INST_INT_UNSIGNED_LONG)
81 using global_ordinal_type = unsigned long;
82#elif defined(HAVE_TPETRA_INST_INT_UNSIGNED)
83 using global_ordinal_type = unsigned;
84#else
85 #error "Tpetra: No global ordinal types in the set {int, long long, long, unsigned long, unsigned} have been enabled."
86#endif
87
90#if defined(HAVE_TPETRA_DEFAULTNODE_SYCLWRAPPERNODE)
91 using execution_space = ::Kokkos::Experimental::SYCL;
92 using node_type = ::Kokkos::Compat::KokkosSYCLWrapperNode;
93#elif defined(HAVE_TPETRA_DEFAULTNODE_HIPWRAPPERNODE)
94 using execution_space = ::Kokkos::Experimental::HIP;
95 using node_type = ::Kokkos::Compat::KokkosHIPWrapperNode;
96#elif defined(HAVE_TPETRA_DEFAULTNODE_CUDAWRAPPERNODE)
97 using execution_space = ::Kokkos::Cuda;
98 using node_type = ::Kokkos::Compat::KokkosCudaWrapperNode;
99#elif defined(HAVE_TPETRA_DEFAULTNODE_OPENMPWRAPPERNODE)
100 using execution_space = ::Kokkos::OpenMP;
101 using node_type = ::Kokkos::Compat::KokkosOpenMPWrapperNode;
102#elif defined(HAVE_TPETRA_DEFAULTNODE_THREADSWRAPPERNODE)
103 using execution_space = ::Kokkos::Threads;
104 using node_type = ::Kokkos::Compat::KokkosThreadsWrapperNode;
105#elif defined(HAVE_TPETRA_DEFAULTNODE_SERIALWRAPPERNODE)
106 using execution_space = ::Kokkos::Serial;
107 using node_type = ::Kokkos::Compat::KokkosSerialWrapperNode;
108#else
109# error "No default Tpetra Node type specified. Please set the CMake option Tpetra_DefaultNode to a valid Node type."
110#endif
111
115
116 template<typename ExecutionSpace>
118 {
119 using type = typename ExecutionSpace::memory_space;
120 };
121
122#ifdef KOKKOS_ENABLE_CUDA
123 template<>
125 {
126 using type = Kokkos::CudaSpace;
127 };
128#endif
129
130#ifdef KOKKOS_ENABLE_HIP
131 template<>
132 struct CommBufferMemorySpace<Kokkos::Experimental::HIP>
133 {
134 using type = Kokkos::Experimental::HIPSpace;
135 };
136#endif
137
138#ifdef KOKKOS_ENABLE_SYCL
139 template<>
140 struct CommBufferMemorySpace<Kokkos::Experimental::SYCL>
141 {
142 using type = Kokkos::Experimental::SYCLDeviceUSMSpace;
143 };
144#endif
145
146 template<typename Device>
147 using comm_buffer_memory_space = typename CommBufferMemorySpace<typename Device::execution_space>::type;
148
149} // namespace DefaultTypes
150
151} // namespace Details
152
153} // namespace Tpetra
154
155#endif // TPETRA_DETAILS_DEFAULTTYPES_HPP
Struct that holds views of the contents of a CrsMatrix.
Implementation details of Tpetra.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Memory space used for MPI communication buffers.