From: Martin Quinson Date: Mon, 20 May 2019 22:07:48 +0000 (+0200) Subject: mc: privatized regions now use a vector of pointers for sake of homogeneity X-Git-Tag: v3.22.4~77 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/af4f085dddf9802166aa47d8866efce05d8efc1d mc: privatized regions now use a vector of pointers for sake of homogeneity This commit is ... not very helping the readability as is. I hope to make a real hierarchy of classes here around soon. --- diff --git a/src/mc/compare.cpp b/src/mc/compare.cpp index b6e259cd2d..51c99bb281 100644 --- a/src/mc/compare.cpp +++ b/src/mc/compare.cpp @@ -1329,8 +1329,8 @@ static int compare_global_variables(simgrid::mc::StateComparator& state, simgrid // Compare the global variables separately for each simulates process: for (size_t i = 0; i < process_count; i++) { - if (compare_global_variables(state, object_info, i, &r1->privatized_data()[i], &r2->privatized_data()[i], - snapshot1, snapshot2)) + if (compare_global_variables(state, object_info, i, r1->privatized_data()[i].get(), + r2->privatized_data()[i].get(), snapshot1, snapshot2)) return 1; } return 0; diff --git a/src/mc/sosp/RegionSnapshot.hpp b/src/mc/sosp/RegionSnapshot.hpp index 7d335bc2ab..87996d774b 100644 --- a/src/mc/sosp/RegionSnapshot.hpp +++ b/src/mc/sosp/RegionSnapshot.hpp @@ -121,7 +121,7 @@ private: Buffer flat_data_; ChunkedData page_numbers_; - std::vector privatized_regions_; + std::vector> privatized_regions_; public: RegionSnapshot() {} @@ -205,15 +205,15 @@ public: } ChunkedData const& page_data() const { return page_numbers_; } - void privatized_data(std::vector data) + void privatized_data(std::vector> data) { storage_type_ = StorageType::Privatized; flat_data_.clear(); page_numbers_.clear(); privatized_regions_ = std::move(data); } - std::vector const& privatized_data() const { return privatized_regions_; } - std::vector& privatized_data() { return privatized_regions_; } + std::vector> const& privatized_data() const { return privatized_regions_; } + std::vector>& privatized_data() { return privatized_regions_; } simgrid::mc::ObjectInformation* object_info() const { return object_info_; } void object_info(simgrid::mc::ObjectInformation* info) { object_info_ = info; } @@ -232,8 +232,8 @@ public: RegionSnapshot privatized_region(RegionType region_type, void* start_addr, void* permanent_addr, std::size_t size); RegionSnapshot dense_region(RegionType type, void* start_addr, void* data_addr, std::size_t size); -simgrid::mc::RegionSnapshot sparse_region(RegionType type, void* start_addr, void* data_addr, std::size_t size); -simgrid::mc::RegionSnapshot region(RegionType type, void* start_addr, void* data_addr, std::size_t size); +RegionSnapshot sparse_region(RegionType type, void* start_addr, void* data_addr, std::size_t size); +RegionSnapshot region(RegionType type, void* start_addr, void* data_addr, std::size_t size); } // namespace mc } // namespace simgrid diff --git a/src/mc/sosp/mc_checkpoint.cpp b/src/mc/sosp/mc_checkpoint.cpp index 99cd848898..e614bd3cb4 100644 --- a/src/mc/sosp/mc_checkpoint.cpp +++ b/src/mc/sosp/mc_checkpoint.cpp @@ -75,7 +75,7 @@ static void restore(RegionSnapshot* region) case simgrid::mc::StorageType::Privatized: for (auto& p : region->privatized_data()) - restore(&p); + restore(p.get()); break; default: // includes StorageType::NoData @@ -97,14 +97,15 @@ RegionSnapshot privatized_region(RegionType region_type, void* start_addr, void* mc_model_checker->process().read_bytes(&privatization_regions, sizeof(privatization_regions), remote(remote_smpi_privatization_regions)); - std::vector data; + std::vector> data; data.reserve(process_count); for (size_t i = 0; i < process_count; i++) - data.push_back(region(region_type, start_addr, privatization_regions[i].address, size)); + data.push_back(std::unique_ptr( + new RegionSnapshot(region(region_type, start_addr, privatization_regions[i].address, size)))); - RegionSnapshot region = RegionSnapshot(region_type, start_addr, permanent_addr, size); - region.privatized_data(std::move(data)); - return region; + RegionSnapshot reg = RegionSnapshot(region_type, start_addr, permanent_addr, size); + reg.privatized_data(std::move(data)); + return reg; } #endif @@ -123,15 +124,14 @@ static void get_memory_regions(simgrid::mc::RemoteClient* process, simgrid::mc:: snapshot->add_region(simgrid::mc::RegionType::Heap, nullptr, start_heap, start_heap, (char*)end_heap - (char*)start_heap); snapshot->heap_bytes_used_ = mmalloc_get_bytes_used_remote(heap->heaplimit, process->get_malloc_info()); + snapshot->privatization_index_ = simgrid::mc::ProcessIndexMissing; #if HAVE_SMPI if (mc_model_checker->process().privatized() && MC_smpi_process_count()) // snapshot->privatization_index = smpi_loaded_page mc_model_checker->process().read_variable("smpi_loaded_page", &snapshot->privatization_index_, sizeof(snapshot->privatization_index_)); - else #endif - snapshot->privatization_index_ = simgrid::mc::ProcessIndexMissing; } /** @brief Fills the position of the segments (executable, read-only, read/write). diff --git a/src/mc/sosp/mc_snapshot.cpp b/src/mc/sosp/mc_snapshot.cpp index 7696bec78f..4b58752b7f 100644 --- a/src/mc/sosp/mc_snapshot.cpp +++ b/src/mc/sosp/mc_snapshot.cpp @@ -167,9 +167,9 @@ RegionSnapshot* Snapshot::get_region(const void* addr, int process_index) const xbt_assert(process_index >= 0, "Missing process index"); xbt_assert(process_index < (int)region->privatized_data().size(), "Invalid process index"); - RegionSnapshot& priv_region = region->privatized_data()[process_index]; - xbt_assert(priv_region.contain(simgrid::mc::remote(addr))); - return &priv_region; + RegionSnapshot* priv_region = region->privatized_data()[process_index].get(); + xbt_assert(priv_region->contain(simgrid::mc::remote(addr))); + return priv_region; #else xbt_die("Privatized region in a non SMPI build (this should not happen)"); #endif diff --git a/src/mc/sosp/mc_snapshot.hpp b/src/mc/sosp/mc_snapshot.hpp index 9e63033749..147c7fa0b6 100644 --- a/src/mc/sosp/mc_snapshot.hpp +++ b/src/mc/sosp/mc_snapshot.hpp @@ -35,8 +35,8 @@ static XBT_ALWAYS_INLINE void* mc_translate_address_region(uintptr_t addr, simgr case simgrid::mc::StorageType::Privatized: { xbt_assert(process_index >= 0, "Missing process index for privatized region"); xbt_assert((size_t)process_index < region->privatized_data().size(), "Out of range process index"); - simgrid::mc::RegionSnapshot& subregion = region->privatized_data()[process_index]; - return mc_translate_address_region(addr, &subregion, process_index); + simgrid::mc::RegionSnapshot* subregion = region->privatized_data()[process_index].get(); + return mc_translate_address_region(addr, subregion, process_index); } default: // includes StorageType::NoData xbt_die("Storage type not supported");