Actual source code: vecimpl_kokkos.hpp
1: #pragma once
3: /* types used by all petsc kokkos code */
5: #include <petscvec_kokkos.hpp>
6: #include <Kokkos_Core.hpp>
7: #include <Kokkos_DualView.hpp>
8: #include <Kokkos_OffsetView.hpp>
10: using DefaultExecutionSpace = Kokkos::DefaultExecutionSpace;
11: using DefaultMemorySpace = Kokkos::DefaultExecutionSpace::memory_space;
13: /* Define a macro if DefaultMemorySpace is HostSpace */
14: #if defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) || defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) || defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) || defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX)
15: #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HOST
16: #endif
18: /* 1 to 4D PetscScalar Kokkos Views */
19: template <class MemorySpace>
20: using PetscScalarKokkosViewType = Kokkos::View<PetscScalar *, MemorySpace>;
21: template <class MemorySpace>
22: using PetscScalarKokkosView1DType = Kokkos::View<PetscScalar *, MemorySpace>;
23: template <class MemorySpace>
24: using PetscScalarKokkosView2DType = Kokkos::View<PetscScalar **, Kokkos::LayoutRight, MemorySpace>;
25: template <class MemorySpace>
26: using PetscScalarKokkosView3DType = Kokkos::View<PetscScalar ***, Kokkos::LayoutRight, MemorySpace>;
27: template <class MemorySpace>
28: using PetscScalarKokkosView4DType = Kokkos::View<PetscScalar ****, Kokkos::LayoutRight, MemorySpace>;
30: template <class MemorySpace>
31: using ConstPetscScalarKokkosViewType = Kokkos::View<const PetscScalar *, MemorySpace>;
32: template <class MemorySpace>
33: using ConstPetscScalarKokkosView1DType = Kokkos::View<const PetscScalar *, MemorySpace>;
34: template <class MemorySpace>
35: using ConstPetscScalarKokkosView2DType = Kokkos::View<const PetscScalar **, Kokkos::LayoutRight, MemorySpace>;
36: template <class MemorySpace>
37: using ConstPetscScalarKokkosView3DType = Kokkos::View<const PetscScalar ***, Kokkos::LayoutRight, MemorySpace>;
38: template <class MemorySpace>
39: using ConstPetscScalarKokkosView4DType = Kokkos::View<const PetscScalar ****, Kokkos::LayoutRight, MemorySpace>;
41: /* 1 to 4D PetscScalar Kokkos OffsetViews */
42: template <class MemorySpace>
43: using PetscScalarKokkosOffsetViewType = Kokkos::Experimental::OffsetView<PetscScalar *, MemorySpace>;
44: template <class MemorySpace>
45: using PetscScalarKokkosOffsetView1DType = Kokkos::Experimental::OffsetView<PetscScalar *, MemorySpace>;
46: template <class MemorySpace>
47: using PetscScalarKokkosOffsetView2DType = Kokkos::Experimental::OffsetView<PetscScalar **, Kokkos::LayoutRight, MemorySpace>;
48: template <class MemorySpace>
49: using PetscScalarKokkosOffsetView3DType = Kokkos::Experimental::OffsetView<PetscScalar ***, Kokkos::LayoutRight, MemorySpace>;
50: template <class MemorySpace>
51: using PetscScalarKokkosOffsetView4DType = Kokkos::Experimental::OffsetView<PetscScalar ****, Kokkos::LayoutRight, MemorySpace>;
53: template <class MemorySpace>
54: using ConstPetscScalarKokkosOffsetViewType = Kokkos::Experimental::OffsetView<const PetscScalar *, MemorySpace>;
55: template <class MemorySpace>
56: using ConstPetscScalarKokkosOffsetView1DType = Kokkos::Experimental::OffsetView<const PetscScalar *, MemorySpace>;
57: template <class MemorySpace>
58: using ConstPetscScalarKokkosOffsetView2DType = Kokkos::Experimental::OffsetView<const PetscScalar **, Kokkos::LayoutRight, MemorySpace>;
59: template <class MemorySpace>
60: using ConstPetscScalarKokkosOffsetView3DType = Kokkos::Experimental::OffsetView<const PetscScalar ***, Kokkos::LayoutRight, MemorySpace>;
61: template <class MemorySpace>
62: using ConstPetscScalarKokkosOffsetView4DType = Kokkos::Experimental::OffsetView<const PetscScalar ****, Kokkos::LayoutRight, MemorySpace>;
64: using PetscScalarKokkosDualView = Kokkos::DualView<PetscScalar *>;
66: /* Shortcut types for Views in the default space and host space */
67: using PetscScalarKokkosView = PetscScalarKokkosViewType<DefaultMemorySpace>;
68: using PetscScalarKokkosView1D = PetscScalarKokkosView1DType<DefaultMemorySpace>;
69: using PetscScalarKokkosView2D = PetscScalarKokkosView2DType<DefaultMemorySpace>;
70: using PetscScalarKokkosView3D = PetscScalarKokkosView3DType<DefaultMemorySpace>;
71: using PetscScalarKokkosView4D = PetscScalarKokkosView4DType<DefaultMemorySpace>;
73: using PetscScalarKokkosViewHost = PetscScalarKokkosViewType<Kokkos::HostSpace>;
74: using PetscScalarKokkosView1DHost = PetscScalarKokkosView1DType<Kokkos::HostSpace>;
75: using PetscScalarKokkosView2DHost = PetscScalarKokkosView2DType<Kokkos::HostSpace>;
76: using PetscScalarKokkosView3DHost = PetscScalarKokkosView3DType<Kokkos::HostSpace>;
77: using PetscScalarKokkosView4DHost = PetscScalarKokkosView4DType<Kokkos::HostSpace>;
79: using ConstPetscScalarKokkosView = ConstPetscScalarKokkosViewType<DefaultMemorySpace>;
80: using ConstPetscScalarKokkosView1D = ConstPetscScalarKokkosView1DType<DefaultMemorySpace>;
81: using ConstPetscScalarKokkosView2D = ConstPetscScalarKokkosView2DType<DefaultMemorySpace>;
82: using ConstPetscScalarKokkosView3D = ConstPetscScalarKokkosView3DType<DefaultMemorySpace>;
83: using ConstPetscScalarKokkosView4D = ConstPetscScalarKokkosView4DType<DefaultMemorySpace>;
85: using ConstPetscScalarKokkosViewHost = ConstPetscScalarKokkosViewType<Kokkos::HostSpace>;
86: using ConstPetscScalarKokkosView1DHost = ConstPetscScalarKokkosView1DType<Kokkos::HostSpace>;
87: using ConstPetscScalarKokkosView2DHost = ConstPetscScalarKokkosView2DType<Kokkos::HostSpace>;
88: using ConstPetscScalarKokkosView3DHost = ConstPetscScalarKokkosView3DType<Kokkos::HostSpace>;
89: using ConstPetscScalarKokkosView4DHost = ConstPetscScalarKokkosView4DType<Kokkos::HostSpace>;
91: /* Shortcut types for OffsetViews in the default space and host space */
92: using PetscScalarKokkosOffsetView = PetscScalarKokkosOffsetViewType<DefaultMemorySpace>;
93: using PetscScalarKokkosOffsetView1D = PetscScalarKokkosOffsetView1DType<DefaultMemorySpace>;
94: using PetscScalarKokkosOffsetView2D = PetscScalarKokkosOffsetView2DType<DefaultMemorySpace>;
95: using PetscScalarKokkosOffsetView3D = PetscScalarKokkosOffsetView3DType<DefaultMemorySpace>;
96: using PetscScalarKokkosOffsetView4D = PetscScalarKokkosOffsetView4DType<DefaultMemorySpace>;
98: using PetscScalarKokkosOffsetViewHost = PetscScalarKokkosOffsetViewType<Kokkos::HostSpace>;
99: using PetscScalarKokkosOffsetView1DHost = PetscScalarKokkosOffsetView1DType<Kokkos::HostSpace>;
100: using PetscScalarKokkosOffsetView2DHost = PetscScalarKokkosOffsetView2DType<Kokkos::HostSpace>;
101: using PetscScalarKokkosOffsetView3DHost = PetscScalarKokkosOffsetView3DType<Kokkos::HostSpace>;
102: using PetscScalarKokkosOffsetView4DHost = PetscScalarKokkosOffsetView4DType<Kokkos::HostSpace>;
104: using ConstPetscScalarKokkosOffsetView = ConstPetscScalarKokkosOffsetViewType<DefaultMemorySpace>;
105: using ConstPetscScalarKokkosOffsetView1D = ConstPetscScalarKokkosOffsetView1DType<DefaultMemorySpace>;
106: using ConstPetscScalarKokkosOffsetView2D = ConstPetscScalarKokkosOffsetView2DType<DefaultMemorySpace>;
107: using ConstPetscScalarKokkosOffsetView3D = ConstPetscScalarKokkosOffsetView3DType<DefaultMemorySpace>;
108: using ConstPetscScalarKokkosOffsetView4D = ConstPetscScalarKokkosOffsetView4DType<DefaultMemorySpace>;
110: using ConstPetscScalarKokkosOffsetViewHost = ConstPetscScalarKokkosOffsetViewType<Kokkos::HostSpace>;
111: using ConstPetscScalarKokkosOffsetView1DHost = ConstPetscScalarKokkosOffsetView1DType<Kokkos::HostSpace>;
112: using ConstPetscScalarKokkosOffsetView2DHost = ConstPetscScalarKokkosOffsetView2DType<Kokkos::HostSpace>;
113: using ConstPetscScalarKokkosOffsetView3DHost = ConstPetscScalarKokkosOffsetView3DType<Kokkos::HostSpace>;
114: using ConstPetscScalarKokkosOffsetView4DHost = ConstPetscScalarKokkosOffsetView4DType<Kokkos::HostSpace>;
116: using PetscIntKokkosView = Kokkos::View<PetscInt *, DefaultMemorySpace>;
117: using PetscIntKokkosViewHost = Kokkos::View<PetscInt *, Kokkos::HostSpace>;
118: using PetscIntKokkosDualView = Kokkos::DualView<PetscInt *>;
119: using PetscCountKokkosView = Kokkos::View<PetscCount *, DefaultMemorySpace>;
120: using PetscCountKokkosViewHost = Kokkos::View<PetscCount *, Kokkos::HostSpace>;