From 608de56ca42f7695c470d5727202ba54b9cecfff Mon Sep 17 00:00:00 2001 From: Fardin Zaman Date: Mon, 3 Jul 2023 17:40:00 -0700 Subject: [PATCH] [#243] 2-step constructor for abstract data-structure --- .../data_structures/abstract_data_structure.h | 7 ++++++- include/shad/data_structures/array.h | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/shad/data_structures/abstract_data_structure.h b/include/shad/data_structures/abstract_data_structure.h index cb85308e..21fdc65b 100644 --- a/include/shad/data_structures/abstract_data_structure.h +++ b/include/shad/data_structures/abstract_data_structure.h @@ -64,6 +64,7 @@ class AbstractDataStructure { /// @brief Default constructor AbstractDataStructure() = default; + /// @brief Create method. /// /// Creates a global instance of DataStructure, and associates to it a unique @@ -85,7 +86,9 @@ class AbstractDataStructure { ObjectID id = catalogRef->GetNextID(); std::tuple tuple(id, args...); rt::executeOnAll(CreateFunWrapper, tuple); - return catalogRef->GetPtr(id); + auto ret= catalogRef->GetPtr(id); + ret->DataStructurePointerCommunication(); + return ret; } /// @brief Destroy method. @@ -149,6 +152,7 @@ class AbstractDataStructure { static void CreateFunWrapper(const std::tuple &args) { CreateFunInnerWrapper(std::move(args), std::index_sequence_for()); } + void DataStructurePointerCommunication(){} class Catalog { public: @@ -196,6 +200,7 @@ class AbstractDataStructure { } private: + Catalog() : register_(rt::numLocalities()), oidCache_(), registerLock_() {} /// The Type storing the counter to obtain new DataStructure object IDs. diff --git a/include/shad/data_structures/array.h b/include/shad/data_structures/array.h index a2929009..55a84f6a 100644 --- a/include/shad/data_structures/array.h +++ b/include/shad/data_structures/array.h @@ -701,6 +701,18 @@ void PrintAllElements() { } } + constexpr void DataStructurePointerCommunication() { + rt::executeOnAll([](const ObjectID &oid) { + auto This = Array::GetPtr(oid); + rt::executeOnAll([](const std::tuple &args) { + auto This = Array::GetPtr(std::get<0>(args)); + + This->ptrs_[(uint32_t)std::get<1>(args)] = std::get<2>(args); + }, + std::make_tuple(This->GetGlobalID(), rt::thisLocality(), This->data_.data())); + }, GetGlobalID()); + } + private: ObjectID oid_; size_t size_; @@ -948,6 +960,9 @@ void PrintAllElements() { } }; +template <> +constexpr void Array::DataStructurePointerCommunication() {} + static std::pair getTargetLocalityFromTargePosition( const std::vector> &dataDistribution, size_t position) {