From 23e90c4a5a4255b476f9ef416b21c1ded7a76916 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Mon, 23 Sep 2024 20:36:58 -0700 Subject: [PATCH 01/12] Slam: use pointer return in IndirectionPolicies to handle device-disablement --- src/axom/slam/Map.hpp | 8 ++-- .../slam/policies/IndirectionPolicies.hpp | 40 ++++++++++--------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/axom/slam/Map.hpp b/src/axom/slam/Map.hpp index 7423669a09..bd564aaa01 100644 --- a/src/axom/slam/Map.hpp +++ b/src/axom/slam/Map.hpp @@ -259,7 +259,7 @@ class Map : public StrPol, #ifndef AXOM_DEVICE_CODE verifyPositionImpl(setIndex); #endif - return IndirectionPolicy::getConstIndirection(m_data, setIndex); + return *IndirectionPolicy::getConstIndirection(m_data, setIndex); } AXOM_HOST_DEVICE ValueType operator[](SetPosition setIndex) @@ -267,7 +267,7 @@ class Map : public StrPol, #ifndef AXOM_DEVICE_CODE verifyPositionImpl(setIndex); #endif - return IndirectionPolicy::getIndirection(m_data, setIndex); + return *IndirectionPolicy::getIndirection(m_data, setIndex); } /** @@ -341,7 +341,7 @@ class Map : public StrPol, #endif SetPosition elemIndex = setIdx * StridePolicyType::stride(); elemIndex += componentOffset(compIdx...); - return IndirectionPolicy::getConstIndirection(m_data, elemIndex); + return *IndirectionPolicy::getConstIndirection(m_data, elemIndex); } /// \overload @@ -359,7 +359,7 @@ class Map : public StrPol, #endif SetPosition elemIndex = setIdx * StridePolicyType::stride(); elemIndex += componentOffset(compIdx...); - return IndirectionPolicy::getIndirection(m_data, elemIndex); + return *IndirectionPolicy::getIndirection(m_data, elemIndex); } SetElement index(IndexType idx) const { return set()->at(idx); } diff --git a/src/axom/slam/policies/IndirectionPolicies.hpp b/src/axom/slam/policies/IndirectionPolicies.hpp index 66675de942..939e0d4f92 100644 --- a/src/axom/slam/policies/IndirectionPolicies.hpp +++ b/src/axom/slam/policies/IndirectionPolicies.hpp @@ -64,6 +64,8 @@ struct IndexedIndirection : public BasePolicy using typename BasePolicy::ConstIndirectionResult; using typename BasePolicy::IndirectionResult; + using ConstResultPtr = std::remove_reference_t*; + using ResultPtr = std::remove_reference_t*; using typename BasePolicy::IndirectionBufferType; using typename BasePolicy::IndirectionConstRefType; @@ -78,23 +80,22 @@ struct IndexedIndirection : public BasePolicy bool verboseOutput = false) const; template - AXOM_HOST_DEVICE static inline std::enable_if_t - getIndirection(IndirectionRefType buf, PositionType pos) + AXOM_HOST_DEVICE static inline std::enable_if_t + getIndirection(IndirectionRefType buf, PositionType pos = 0) { - return buf[pos]; + return &buf[pos]; } template - AXOM_HOST_DEVICE static inline std::enable_if_t - getConstIndirection(IndirectionConstRefType buf, PositionType pos) + AXOM_HOST_DEVICE static inline std::enable_if_t + getConstIndirection(IndirectionConstRefType buf, PositionType pos = 0) { - return buf[pos]; + return &buf[pos]; } - AXOM_SUPPRESS_HD_WARN template - AXOM_HOST_DEVICE static inline std::enable_if_t - getIndirection(IndirectionRefType buf, PositionType pos) + AXOM_HOST_DEVICE static inline std::enable_if_t + getIndirection(IndirectionRefType buf, PositionType pos = 0) { #ifdef AXOM_DEVICE_CODE SLIC_ASSERT_MSG( @@ -108,15 +109,16 @@ struct IndexedIndirection : public BasePolicy #elif defined(__HIP_DEVICE_COMPILE__) abort(); #endif -#endif + return nullptr; +#else // Always return a value. - return buf[pos]; + return &buf[pos]; +#endif } - AXOM_SUPPRESS_HD_WARN template - AXOM_HOST_DEVICE static inline std::enable_if_t - getConstIndirection(IndirectionConstRefType buf, PositionType pos) + AXOM_HOST_DEVICE static inline std::enable_if_t + getConstIndirection(IndirectionConstRefType buf, PositionType pos = 0) { #ifdef AXOM_DEVICE_CODE SLIC_ASSERT_MSG( @@ -130,9 +132,11 @@ struct IndexedIndirection : public BasePolicy #elif defined(__HIP_DEVICE_COMPILE__) abort(); #endif -#endif + return nullptr; +#else // Always return a value. - return buf[pos]; + return &buf[pos]; +#endif } AXOM_HOST_DEVICE inline ConstIndirectionResult indirection(PositionType pos) const @@ -140,7 +144,7 @@ struct IndexedIndirection : public BasePolicy #ifndef AXOM_DEVICE_CODE checkIndirection(pos); #endif - return IndexedIndirection::getConstIndirection(BasePolicy::data(), pos); + return *IndexedIndirection::getConstIndirection(BasePolicy::data(), pos); } AXOM_HOST_DEVICE inline IndirectionResult indirection(PositionType pos) @@ -148,7 +152,7 @@ struct IndexedIndirection : public BasePolicy #ifndef AXOM_DEVICE_CODE checkIndirection(pos); #endif - return IndexedIndirection::getIndirection(BasePolicy::data(), pos); + return *IndexedIndirection::getIndirection(BasePolicy::data(), pos); } AXOM_HOST_DEVICE inline ConstIndirectionResult operator()(PositionType pos) const From cf9e922ef93b7e7ec524e93e233d523c72b43754 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 13:57:16 -0700 Subject: [PATCH 02/12] ArrayView: enable construction from subslices on device --- src/axom/core/Array.hpp | 2 +- src/axom/core/ArrayBase.hpp | 14 +++++++++----- src/axom/core/ArrayView.hpp | 15 ++++++++------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/axom/core/Array.hpp b/src/axom/core/Array.hpp index 303753b46f..a868787471 100644 --- a/src/axom/core/Array.hpp +++ b/src/axom/core/Array.hpp @@ -842,7 +842,7 @@ class Array : public ArrayBase> /*! * \brief Get the ID for the umpire allocator */ - int getAllocatorID() const { return m_allocator_id; } + AXOM_HOST_DEVICE int getAllocatorID() const { return m_allocator_id; } /*! * \brief Sets the preferred space where operations on this array should be diff --git a/src/axom/core/ArrayBase.hpp b/src/axom/core/ArrayBase.hpp index 4cee0c34da..fa9a212dfe 100644 --- a/src/axom/core/ArrayBase.hpp +++ b/src/axom/core/ArrayBase.hpp @@ -221,7 +221,7 @@ class ArrayBase * memory spaces */ template - ArrayBase( + AXOM_HOST_DEVICE ArrayBase( const ArrayBase::type, DIM, OtherArrayType>& other) : m_shape(other.shape()) , m_mapping(other.mapping()) @@ -230,7 +230,7 @@ class ArrayBase /// \overload template - ArrayBase( + AXOM_HOST_DEVICE ArrayBase( const ArrayBase::type, DIM, OtherArrayType>& other) : m_shape(other.shape()) , m_mapping(other.mapping()) @@ -618,12 +618,13 @@ class ArrayBase // Empty implementation because no member data template - ArrayBase(const ArrayBase::type, 1, OtherArrayType>&) + AXOM_HOST_DEVICE ArrayBase( + const ArrayBase::type, 1, OtherArrayType>&) { } // Empty implementation because no member data template - ArrayBase( + AXOM_HOST_DEVICE ArrayBase( const ArrayBase::type, 1, OtherArrayType>&) { } @@ -1812,7 +1813,10 @@ class ArraySubslice /*! * \brief Get the ID for the umpire allocator */ - int getAllocatorID() const { return m_array->getAllocatorID(); } + AXOM_HOST_DEVICE int getAllocatorID() const + { + return m_array->getAllocatorID(); + } protected: friend BaseClass; diff --git a/src/axom/core/ArrayView.hpp b/src/axom/core/ArrayView.hpp index cb1eafc976..ed339ebd70 100644 --- a/src/axom/core/ArrayView.hpp +++ b/src/axom/core/ArrayView.hpp @@ -114,10 +114,10 @@ class ArrayView : public ArrayBase> * space. */ template - ArrayView(ArrayBase& other); + AXOM_HOST_DEVICE ArrayView(ArrayBase& other); /// \overload template - ArrayView( + AXOM_HOST_DEVICE ArrayView( const ArrayBase::type, DIM, OtherArrayType>& other); /*! @@ -156,7 +156,7 @@ class ArrayView : public ArrayBase> /*! * \brief Get the ID for the umpire allocator */ - int getAllocatorID() const { return m_allocator_id; } + AXOM_HOST_DEVICE int getAllocatorID() const { return m_allocator_id; } /*! * \brief Returns an ArrayView that is a subspan of the original range of @@ -341,13 +341,14 @@ AXOM_HOST_DEVICE ArrayView::ArrayView( //------------------------------------------------------------------------------ template template -ArrayView::ArrayView(ArrayBase& other) +AXOM_HOST_DEVICE ArrayView::ArrayView( + ArrayBase& other) : ArrayBase>(other) , m_data(static_cast(other).data()) , m_num_elements(static_cast(other).size()) , m_allocator_id(static_cast(other).getAllocatorID()) { -#ifdef AXOM_DEBUG +#if !defined(AXOM_DEVICE_CODE) && defined(AXOM_DEBUG) // If it's not dynamic, the allocator ID from the argument array has to match the template param. // If that's not the case then things have gone horribly wrong somewhere. if(SPACE != MemorySpace::Dynamic && @@ -363,7 +364,7 @@ ArrayView::ArrayView(ArrayBase& other) //------------------------------------------------------------------------------ template template -ArrayView::ArrayView( +AXOM_HOST_DEVICE ArrayView::ArrayView( const ArrayBase::type, DIM, OtherArrayType>& other) : ArrayBase>(other) , m_data(static_cast(other).data()) @@ -373,7 +374,7 @@ ArrayView::ArrayView( static_assert( std::is_const::value || detail::ArrayTraits::is_view, "Cannot create an ArrayView of non-const type from a const Array"); -#ifdef AXOM_DEBUG +#if !defined(AXOM_DEVICE_CODE) && defined(AXOM_DEBUG) // If it's not dynamic, the allocator ID from the argument array has to match the template param. // If that's not the case then things have gone horribly wrong somewhere. if(SPACE != MemorySpace::Dynamic && From 9157f8abd72d512f79396c2dfec3c221a538c7d4 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:07:26 -0700 Subject: [PATCH 03/12] Map: remove host/device suppressions for range_iterator --- src/axom/slam/Map.hpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/axom/slam/Map.hpp b/src/axom/slam/Map.hpp index bd564aaa01..7eec6c4dbf 100644 --- a/src/axom/slam/Map.hpp +++ b/src/axom/slam/Map.hpp @@ -396,7 +396,10 @@ class Map : public StrPol, * an N-dimensional array with the number of values in each sub-component * index. */ - ElementShape shape() const { return StridePolicyType::shape(); } + AXOM_HOST_DEVICE ElementShape shape() const + { + return StridePolicyType::shape(); + } /// @} @@ -576,11 +579,12 @@ class Map : public StrPol, using difference_type = SetPosition; private: - static StackArray fetchDims(StrideIndexType shape) + AXOM_HOST_DEVICE static StackArray fetchDims( + StrideIndexType shape) { return {0, shape}; } - static StackArray fetchDims( + AXOM_HOST_DEVICE static StackArray fetchDims( const StackArray shape) { StackArray dims; @@ -592,14 +596,14 @@ class Map : public StrPol, } public: - MapRangeIterator(MapConstPtr oMap, PositionType pos) + AXOM_HOST_DEVICE MapRangeIterator(MapConstPtr oMap, PositionType pos) : IterBase(pos) , m_map(oMap) { StackArray dataDims = fetchDims(oMap->shape()); dataDims[0] = m_map->size(); m_mapData = - axom::ArrayView(m_map->data().data(), dataDims); + axom::ArrayView(m_map->data_ptr(), dataDims); m_currRange = m_mapData[pos]; } @@ -648,14 +652,13 @@ class Map : public StrPol, SetElement index() const { return m_map->index(this->m_pos); } /// \brief Returns the flat index pointed to by this iterator. - SetPosition flatIndex() const { return this->m_pos; } + AXOM_HOST_DEVICE SetPosition flatIndex() const { return this->m_pos; } /** \brief Returns the number of components per element in the Map. */ PositionType numComp() const { return m_map->stride(); } protected: /** Implementation of advance() as required by IteratorBase */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE void advance(PositionType n) { this->m_pos += n; @@ -800,6 +803,16 @@ class Map : public StrPol, "Not enough elements in buffer passed to Map constructor."); } + AXOM_HOST_DEVICE typename IndirectionPolicy::ConstResultPtr data_ptr() const + { + return IndirectionPolicy::getConstIndirection(m_data); + } + + AXOM_HOST_DEVICE typename IndirectionPolicy::ResultPtr data_ptr() + { + return IndirectionPolicy::getIndirection(m_data); + } + private: SetContainer<> m_set; OrderedMap m_data; From 7411f03893b696f21b2429dc43895295d3ec47e2 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:09:27 -0700 Subject: [PATCH 04/12] IteratorBase: enable arbitrary increment on device --- src/axom/core/IteratorBase.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/axom/core/IteratorBase.hpp b/src/axom/core/IteratorBase.hpp index 559a9f659f..60c5901001 100644 --- a/src/axom/core/IteratorBase.hpp +++ b/src/axom/core/IteratorBase.hpp @@ -156,6 +156,8 @@ class IteratorBase } /// Addition-assignment operator + AXOM_SUPPRESS_HD_WARN + AXOM_HOST_DEVICE IterType& operator+=(PosType n) { adv(getIter(), n); @@ -169,6 +171,8 @@ class IteratorBase } /// Addition operator with iterator on left and position on right + AXOM_SUPPRESS_HD_WARN + AXOM_HOST_DEVICE friend IterType operator+(const IterType& it, PosType n) { IterType ret(it); From 6f64f1e931296c8cbde80f752445073f92233ce3 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:12:27 -0700 Subject: [PATCH 05/12] Map: make set_begin()/set_end() host-device functions --- src/axom/slam/Map.hpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/axom/slam/Map.hpp b/src/axom/slam/Map.hpp index 7eec6c4dbf..b521de75ac 100644 --- a/src/axom/slam/Map.hpp +++ b/src/axom/slam/Map.hpp @@ -685,13 +685,19 @@ class Map : public StrPol, return RangeAdapter {begin(), end()}; } - range_iterator set_begin() { return range_iterator(this, 0); } - range_iterator set_end() { return range_iterator(this, size()); } - const_range_iterator set_begin() const + AXOM_HOST_DEVICE range_iterator set_begin() + { + return range_iterator(this, 0); + } + AXOM_HOST_DEVICE range_iterator set_end() + { + return range_iterator(this, size()); + } + AXOM_HOST_DEVICE const_range_iterator set_begin() const { return const_range_iterator(this, 0); } - const_range_iterator set_end() const + AXOM_HOST_DEVICE const_range_iterator set_end() const { return const_range_iterator(this, size()); } From 43263190ca401001c626d458e58eb0c4e5b9b385 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:13:11 -0700 Subject: [PATCH 06/12] BivariateSet: make iterator constructor a host-device function --- src/axom/slam/BivariateSet.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/axom/slam/BivariateSet.hpp b/src/axom/slam/BivariateSet.hpp index d8fabae95a..ef78ff5190 100644 --- a/src/axom/slam/BivariateSet.hpp +++ b/src/axom/slam/BivariateSet.hpp @@ -318,7 +318,8 @@ struct BivariateSetIterator using pointer = value_type*; using iterator_category = std::forward_iterator_tag; - BivariateSetIterator(const BivariateSetType* bset, IndexType flatPos = 0) + AXOM_HOST_DEVICE BivariateSetIterator(const BivariateSetType* bset, + IndexType flatPos = 0) : BaseType(flatPos) , m_bset(bset) { } From f80c728a267af27e8b04a83d86339d3d86492a0f Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:13:51 -0700 Subject: [PATCH 07/12] SubMap: host-device fixes --- src/axom/slam/SubMap.hpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/axom/slam/SubMap.hpp b/src/axom/slam/SubMap.hpp index df0faa46df..4b255e9c97 100644 --- a/src/axom/slam/SubMap.hpp +++ b/src/axom/slam/SubMap.hpp @@ -123,7 +123,6 @@ class SubMap * element, where `setIndex = i * numComp() + j`. * \pre 0 <= idx < size() * numComp() */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE DataRefType operator[](IndexType idx) const { #ifndef AXOM_DEVICE_CODE @@ -185,7 +184,6 @@ class SubMap /// /** \brief returns the size of the SubMap */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE axom::IndexType size() const { return m_subsetIdx.size(); } /** \brief returns the number of components (aka. stride) of the SubMap */ @@ -220,7 +218,7 @@ class SubMap * \brief Get the ComponentFlatIndex into the SuperMap given the subset's * ComponentFlatIndex. This is used only with bracket [] access */ - IndexType getMapCompFlatIndex(IndexType idx) const + AXOM_HOST_DEVICE IndexType getMapCompFlatIndex(IndexType idx) const { IndexType comp = numComp(); IndexType s = idx % comp; @@ -401,7 +399,7 @@ class SubMap::Iterator using iter = Iterator; using PositionType = SetPosition; - AXOM_HOST_DEVICE Iterator(PositionType pos, SubMap sMap) + AXOM_HOST_DEVICE Iterator(PositionType pos, const SubMap& sMap) : IterBase(pos) , m_submap(sMap) { } @@ -465,7 +463,7 @@ class SubMap::RangeIterator using pointer = typename MapRangeIterator::pointer; using difference_type = SetPosition; - PositionType getParentPosition(PositionType subset_pos) + AXOM_HOST_DEVICE PositionType getParentPosition(PositionType subset_pos) { PositionType subsetEnd = m_submap.m_subsetIdx.size() - 1; // End element is one past the last subset element. @@ -478,8 +476,7 @@ class SubMap::RangeIterator } public: - AXOM_SUPPRESS_HD_WARN - AXOM_HOST_DEVICE RangeIterator(PositionType pos, SubMap sMap) + AXOM_HOST_DEVICE RangeIterator(PositionType pos, const SubMap& sMap) : IterBase(pos) , m_submap(sMap) , m_mapIter(m_submap.m_superMap, getParentPosition(pos)) @@ -496,7 +493,6 @@ class SubMap::RangeIterator return m_mapIter(comp_idx...); } - AXOM_SUPPRESS_HD_WARN template AXOM_HOST_DEVICE DataRefType value(ComponentIndex... comp_idx) const { @@ -522,7 +518,6 @@ class SubMap::RangeIterator protected: /** Implementation of advance() as required by IteratorBase */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE void advance(PositionType n) { PositionType currIndex = m_mapIter.flatIndex(); From 2c9a1da8080056d6ef2c76a2ab40e08c40ddd138 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:14:25 -0700 Subject: [PATCH 08/12] BivariateMap: host-device fixes --- src/axom/slam/BivariateMap.hpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/axom/slam/BivariateMap.hpp b/src/axom/slam/BivariateMap.hpp index 5f8af53d2b..e98e6863ec 100644 --- a/src/axom/slam/BivariateMap.hpp +++ b/src/axom/slam/BivariateMap.hpp @@ -481,10 +481,8 @@ class BivariateMap public: /** BivariateMap iterator functions */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE iterator begin() { return iterator(this, 0); } - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE iterator end() { return iterator(this, totalSize() * numComp()); @@ -500,25 +498,21 @@ class BivariateMap return const_iterator(this, totalSize() * numComp()); } - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE range_iterator set_begin() { return range_iterator(this, 0); } - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE range_iterator set_end() { return range_iterator(this, totalSize()); } - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE const_range_iterator set_begin() const { return const_range_iterator(this, 0); } - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE const_range_iterator set_end() const { return const_range_iterator(this, totalSize()); @@ -562,9 +556,9 @@ class BivariateMap public: AXOM_HOST_DEVICE const BivariateSetType* set() const { return m_bset.get(); } - const MapType* getMap() const { return &m_map; } + AXOM_HOST_DEVICE const MapType* getMap() const { return &m_map; } - MapType* getMap() { return &m_map; } + AXOM_HOST_DEVICE MapType* getMap() { return &m_map; } bool isValid(bool verboseOutput = false) const { @@ -576,11 +570,10 @@ class BivariateMap /// /** \brief Returns the BivariateSet size. */ - AXOM_SUPPRESS_HD_WARN AXOM_HOST_DEVICE SetPosition size() const { return set()->size(); } /** \brief Returns the BivariateSet size. */ - SetPosition totalSize() const { return set()->size(); } + AXOM_HOST_DEVICE SetPosition totalSize() const { return set()->size(); } SetPosition firstSetSize() const { return set()->firstSetSize(); } @@ -594,7 +587,7 @@ class BivariateMap SetPosition size(SetPosition s) const { return set()->size(s); } /** \brief Return the number of components of the map */ - SetPosition numComp() const { return StrPol::stride(); } + AXOM_HOST_DEVICE SetPosition numComp() const { return StrPol::stride(); } /// @} @@ -682,7 +675,7 @@ class BivariateMap::FlatIterator /** * \brief Construct a new BivariateMap Iterator given an ElementFlatIndex */ - FlatIterator(BivariateMapPtr sMap, PositionType pos) + AXOM_HOST_DEVICE FlatIterator(BivariateMapPtr sMap, PositionType pos) : IterBase(pos) , m_map(sMap) , m_bsetIterator(m_map->set(), pos / m_map->numComp()) @@ -771,7 +764,7 @@ class BivariateMap::RangeIterator /*! * \brief Construct a new BivariateMap Iterator given an ElementFlatIndex */ - RangeIterator(BivariateMapPtr sMap, PositionType pos) + AXOM_HOST_DEVICE RangeIterator(BivariateMapPtr sMap, PositionType pos) : IterBase(pos) , m_map(sMap) , m_mapIterator(m_map->getMap()->set_begin() + pos) @@ -828,7 +821,10 @@ class BivariateMap::RangeIterator /** * \brief Return the current iterator's flat bivariate index. */ - PositionType flatIndex() const { return m_mapIterator.flatIndex(); } + AXOM_HOST_DEVICE PositionType flatIndex() const + { + return m_mapIterator.flatIndex(); + } /** \brief Returns the number of components per element in the map. */ PositionType numComp() const { return m_map->numComp(); } From 9848ede59f7dc7b051857d844847ff358e673efd Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:14:59 -0700 Subject: [PATCH 09/12] Map: default to non-virtual interface --- src/axom/slam/BivariateMap.hpp | 2 +- src/axom/slam/Map.hpp | 2 +- src/axom/slam/SubMap.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/axom/slam/BivariateMap.hpp b/src/axom/slam/BivariateMap.hpp index e98e6863ec..c2859d0206 100644 --- a/src/axom/slam/BivariateMap.hpp +++ b/src/axom/slam/BivariateMap.hpp @@ -83,7 +83,7 @@ template , typename StrPol = policies::StrideOne, - typename IfacePol = policies::VirtualInterface> + typename IfacePol = policies::ConcreteInterface> class BivariateMap : public policies::MapInterface, public StrPol diff --git a/src/axom/slam/Map.hpp b/src/axom/slam/Map.hpp index b521de75ac..f214ea6711 100644 --- a/src/axom/slam/Map.hpp +++ b/src/axom/slam/Map.hpp @@ -68,7 +68,7 @@ template , typename StrPol = policies::StrideOne, - typename IfacePol = policies::VirtualInterface> + typename IfacePol = policies::ConcreteInterface> class Map : public StrPol, public policies::MapInterface { diff --git a/src/axom/slam/SubMap.hpp b/src/axom/slam/SubMap.hpp index 4b255e9c97..344e56acc5 100644 --- a/src/axom/slam/SubMap.hpp +++ b/src/axom/slam/SubMap.hpp @@ -52,7 +52,7 @@ namespace slam template - typename InterfacePolicy = policies::VirtualInterface> + typename InterfacePolicy = policies::ConcreteInterface> class SubMap : public policies::MapInterface, public SuperMapType::StridePolicyType From 38ed6d4b6f22d3129424a0275f1eba66b96a5bd0 Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 14:20:23 -0700 Subject: [PATCH 10/12] OrderedSet: use concrete instance for iterator --- src/axom/slam/OrderedSet.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axom/slam/OrderedSet.hpp b/src/axom/slam/OrderedSet.hpp index 119b5dc27a..9d19595767 100644 --- a/src/axom/slam/OrderedSet.hpp +++ b/src/axom/slam/OrderedSet.hpp @@ -422,7 +422,7 @@ struct OrderedSet } private: - OrderedSet m_orderedSet; + OrderedSet::ConcreteSet m_orderedSet; }; public: // Functions related to iteration From 180622c2039138578cb5eae5a1b2741eb94d60eb Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 15:21:56 -0700 Subject: [PATCH 11/12] BVH: fix copy-capture of axom::Array in tests --- src/axom/spin/tests/spin_bvh.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/axom/spin/tests/spin_bvh.cpp b/src/axom/spin/tests/spin_bvh.cpp index 7e93c74fa2..bf0a96c86e 100644 --- a/src/axom/spin/tests/spin_bvh.cpp +++ b/src/axom/spin/tests/spin_bvh.cpp @@ -1354,7 +1354,7 @@ void check_find_points_zip3d() // construct the BVH spin::BVH bvh; bvh.setScaleFactor(1.0); // i.e., no scaling - bvh.initialize(aabbs, ncells); + bvh.initialize(aabbs_view, ncells); BoxType bounds = bvh.getBounds(); @@ -1441,7 +1441,7 @@ void check_find_points_zip2d() // construct the BVH spin::BVH bvh; bvh.setScaleFactor(1.0); // i.e., no scaling - bvh.initialize(aabbs, ncells); + bvh.initialize(aabbs_view, ncells); BoxType bounds = bvh.getBounds(); From 9a0cc2ed660357349520e0213c0c8dada9346d6d Mon Sep 17 00:00:00 2001 From: Max Yang Date: Tue, 24 Sep 2024 15:33:31 -0700 Subject: [PATCH 12/12] FlatTable: don't set curr_group when probing stops --- src/axom/core/detail/FlatTable.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/axom/core/detail/FlatTable.hpp b/src/axom/core/detail/FlatTable.hpp index 490e8d0c9f..3250f8ff48 100644 --- a/src/axom/core/detail/FlatTable.hpp +++ b/src/axom/core/detail/FlatTable.hpp @@ -258,7 +258,6 @@ struct SequentialLookupPolicy : ProbePolicy { // Stop probing if the "overflow" bit is not set. keep_going = false; - curr_group = NO_MATCH; } if(!keep_going)