17 #ifndef dealii_memory_space_data_h
18 #define dealii_memory_space_data_h
27 #include <Kokkos_Core.hpp>
46 template <
typename T,
typename MemorySpace>
74 Kokkos::View<T *, typename MemorySpace::kokkos_space>
values;
99 template <
typename T,
typename MemorySpace>
106 template <
typename T,
typename MemorySpace>
108 : values_host_buffer(
110 Kokkos::
View<
T *, Kokkos::HostSpace>(
"host buffer", 0)))
118 template <
typename T,
typename MemorySpace>
120 MemorySpaceData<T, MemorySpace>::copy_to(
T *
begin,
121 const std::size_t n_elements)
125 "n_elements is greater than the size of MemorySpaceData."));
126 using ExecutionSpace =
typename MemorySpace::kokkos_space::execution_space;
128 View<T *, Kokkos::HostSpace, Kokkos::MemoryTraits<Kokkos::Unmanaged>>
129 begin_view(
begin, n_elements);
133 Kokkos::subview(
values, Kokkos::make_pair(std::size_t(0), n_elements)));
134 ExecutionSpace{}.fence();
139 template <
typename T,
typename MemorySpace>
141 MemorySpaceData<T, MemorySpace>::copy_from(
const T *
begin,
142 const std::size_t n_elements)
146 "n_elements is greater than the size of MemorySpaceData."));
147 using ExecutionSpace =
typename MemorySpace::kokkos_space::execution_space;
150 Kokkos::MemoryTraits<Kokkos::Unmanaged>>
151 begin_view(
begin, n_elements);
154 Kokkos::subview(
values, Kokkos::make_pair(std::size_t(0), n_elements)),
156 ExecutionSpace{}.fence();
164 template <
typename T,
typename MemorySpace>
166 swap(MemorySpaceData<T, MemorySpace> &u, MemorySpaceData<T, MemorySpace> &v)
168 std::swap(u.values_host_buffer, v.values_host_buffer);
170 std::swap(u.values_sm_ptr, v.values_sm_ptr);
void swap(BlockIndices &u, BlockIndices &v)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
typename ::internal::FEInterfaceViews::ViewType< dim, spacedim, Extractor >::type View
void swap(MemorySpaceData< T, MemorySpace > &u, MemorySpaceData< T, MemorySpace > &v)
VectorType::value_type * begin(VectorType &V)
void ensure_kokkos_initialized()
Kokkos::View< T *, Kokkos::HostSpace > values_host_buffer
Kokkos::View< T *, typename MemorySpace::kokkos_space > values
std::vector< ArrayView< const T > > values_sm
std::shared_ptr< T > values_sm_ptr
void copy_to(T *begin, const std::size_t n_elements)
void copy_from(const T *begin, const std::size_t n_elements)