10#ifndef TPETRA_DETAILS_DUALVIEWUTIL_HPP
11#define TPETRA_DETAILS_DUALVIEWUTIL_HPP
13#include "TpetraCore_config.h"
14#include "Kokkos_DualView.hpp"
15#include "Teuchos_ArrayView.hpp"
30 decltype (Kokkos::view_alloc (label, Kokkos::WithoutInitializing));
36template<
class ElementType,
class DeviceType>
39 (Kokkos::DualView<ElementType*, DeviceType>&
dv,
40 const typename Kokkos::DualView<ElementType*, DeviceType>::t_host&
hostView)
42 using execution_space =
typename DeviceType::execution_space;
43 using dual_view_type = Kokkos::DualView<ElementType*, DeviceType>;
45 if constexpr(Kokkos::SpaceAccessibility<Kokkos::HostSpace, typename DeviceType::memory_space>::accessible) {
49 typename Kokkos::DualView<ElementType*, DeviceType>::t_dev
devView;
57 execution_space().fence();
61template<
class ElementType,
class DeviceType>
63makeDualViewFromArrayView (Kokkos::DualView<ElementType*, DeviceType>&
dv,
64 const Teuchos::ArrayView<const ElementType>&
av,
65 const std::string& label)
67 using execution_space =
typename DeviceType::execution_space;
68 using dual_view_type = Kokkos::DualView<ElementType*, DeviceType>;
69 using host_view_type =
typename dual_view_type::t_host;
72 const auto size =
av.size ();
82template<
class ElementType,
class DeviceType>
84makeDualViewFromVector (Kokkos::DualView<ElementType*, DeviceType>& dv,
85 const std::vector<ElementType>& vec,
86 const std::string& label)
88 using dual_view_type = Kokkos::DualView<ElementType*, DeviceType>;
89 using execution_space =
typename DeviceType::execution_space;
90 using host_view_type =
typename dual_view_type::t_host;
91 using const_host_view_type =
typename host_view_type::const_type;
93 const auto size = vec.size ();
94 const ElementType* ptr = (size == 0) ?
nullptr : vec.data ();
95 const_host_view_type inView (ptr, size);
98 Kokkos::deep_copy (execution_space(), hostView, inView);
103template<
class ElementType,
class DeviceType>
105printDualView (std::ostream& out,
106 const Kokkos::DualView<ElementType*, DeviceType>& dv,
107 const std::string& name)
110 const size_t size = size_t (dv.extent (0));
111 const auto hostView = dv.view_host ();
114 for (
size_t k = 0; k < size; ++k) {
116 if (k +
size_t (1) < size) {
Struct that holds views of the contents of a CrsMatrix.
Implementation details of Tpetra.
auto view_alloc_no_init(const std::string &label) -> decltype(Kokkos::view_alloc(label, Kokkos::WithoutInitializing))
Use in place of the string label as the first argument of Kokkos::View's constructor,...
void makeDualViewFromOwningHostView(Kokkos::DualView< ElementType *, DeviceType > &dv, const typename Kokkos::DualView< ElementType *, DeviceType >::t_host &hostView)
Initialize dv such that its host View is hostView.
Namespace Tpetra contains the class and methods constituting the Tpetra library.