From 3462bd784f4669d77033835344c5b8c14beb3693 Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Wed, 10 Jul 2024 22:56:30 -0600 Subject: [PATCH] New View: fix up more ctors --- core/src/Kokkos_View.hpp | 23 ++++++++++--------- .../View/MDSpan/Kokkos_MDSpan_Accessor.hpp | 16 +++++++++++++ .../default/TestDefaultDeviceDevelop.cpp | 2 ++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/src/Kokkos_View.hpp b/core/src/Kokkos_View.hpp index 5e771a46211..b7f1b383ffd 100644 --- a/core/src/Kokkos_View.hpp +++ b/core/src/Kokkos_View.hpp @@ -510,21 +510,12 @@ class View : public Impl::BasicViewFromTraits::type { template View(pointer_type ptr, Args ... args) : base_t(Kokkos::view_wrap(ptr), typename mdspan_type::mapping_type(typename mdspan_type::extents_type{args...})) {} -#if 0 - // Wrap memory according to properties and array layout - template - explicit KOKKOS_INLINE_FUNCTION View( - const Impl::ViewCtorProp& arg_prop, - std::enable_if_t::has_pointer, - typename traits::array_layout> const& arg_layout) - : base_t(arg_prop, arg_layout) {} - // Simple dimension-only layout + // Constructor which allows always 8 sizes should be deprecated template explicit inline View( const Impl::ViewCtorProp& arg_prop, - std::enable_if_t::has_pointer, size_t> const - arg_N0 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N0 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t arg_N1 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t arg_N2 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t arg_N3 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, @@ -540,6 +531,16 @@ class View : public Impl::BasicViewFromTraits::type { "overload taking a layout object instead."); } +#if 0 + // Wrap memory according to properties and array layout + template + explicit KOKKOS_INLINE_FUNCTION View( + const Impl::ViewCtorProp& arg_prop, + std::enable_if_t::has_pointer, + typename traits::array_layout> const& arg_layout) + : base_t(arg_prop, arg_layout) {} + + template explicit KOKKOS_INLINE_FUNCTION View( const Impl::ViewCtorProp& arg_prop, diff --git a/core/src/View/MDSpan/Kokkos_MDSpan_Accessor.hpp b/core/src/View/MDSpan/Kokkos_MDSpan_Accessor.hpp index f236bb75da2..e857fb0687c 100644 --- a/core/src/View/MDSpan/Kokkos_MDSpan_Accessor.hpp +++ b/core/src/View/MDSpan/Kokkos_MDSpan_Accessor.hpp @@ -340,6 +340,14 @@ class ReferenceCountedAccessor { OtherElementType (*)[], element_type (*)[]>>> constexpr ReferenceCountedAccessor( const ReferenceCountedAccessor&) {} + + template >> + constexpr ReferenceCountedAccessor( + const default_accessor&) {} + + operator default_accessor() const { return {}; } constexpr reference access(data_handle_type p, size_t i) const { return p.get()[i]; @@ -371,6 +379,14 @@ class ReferenceCountedAccessor { constexpr ReferenceCountedAccessor( const ReferenceCountedAccessor&) {} + template >> + constexpr ReferenceCountedAccessor( + const default_accessor&) {} + + operator default_accessor() const { return {}; } + constexpr reference access(data_handle_type p, size_t i) const { return p.get()[i]; } diff --git a/core/unit_test/default/TestDefaultDeviceDevelop.cpp b/core/unit_test/default/TestDefaultDeviceDevelop.cpp index 22d13dbdbd6..524348b4010 100644 --- a/core/unit_test/default/TestDefaultDeviceDevelop.cpp +++ b/core/unit_test/default/TestDefaultDeviceDevelop.cpp @@ -34,6 +34,8 @@ TEST(defaultdevicetype, development_test) { auto prop = Kokkos::view_alloc("C"); Kokkos::View c(prop, Kokkos::LayoutRight(5)); Kokkos::View b_um(b.data(), 5); + Kokkos::View> b_atomic(b); + Kokkos::View> b_unmanaged(b); Kokkos::mdspan> mds(b.data(), 5); auto sub_a = Kokkos::submdspan(mds, std::pair{1,3}); auto sub_b = Kokkos::submdspan(mds, std::array{1,3});