From 496c1546d96345d4c08f53115cf794967fec2dd6 Mon Sep 17 00:00:00 2001 From: Marco Cisternino Date: Sat, 1 Apr 2023 12:21:43 +0200 Subject: [PATCH] voloctree: use unordered maps for lists of overlapping rank ids --- examples/voloctree_mapper_example_00003.cpp | 4 ++-- examples/voloctree_mapper_example_00004.cpp | 12 ++++++------ src/POD/pod_voloctree.cpp | 16 ++++++++-------- src/patchkernel/volume_mapper.hpp | 6 +++--- src/voloctree/voloctree_mapper.cpp | 20 +++++++++----------- src/voloctree/voloctree_mapper.hpp | 6 +++--- 6 files changed, 31 insertions(+), 33 deletions(-) diff --git a/examples/voloctree_mapper_example_00003.cpp b/examples/voloctree_mapper_example_00003.cpp index 8ebc235272..be0faa29cc 100644 --- a/examples/voloctree_mapper_example_00003.cpp +++ b/examples/voloctree_mapper_example_00003.cpp @@ -276,8 +276,8 @@ void run() //Communicate needed data for mapping std::map > datarec; { - std::map > rankIDrec = mapobject.getReceivedMappedIds(); - std::map > rankIDsend = mapobject.getSentMappedIds(); + std::unordered_map > rankIDrec = mapobject.getReceivedMappedIds(); + std::unordered_map > rankIDsend = mapobject.getSentMappedIds(); //build send buffers MPI_Comm comm = MPI_COMM_WORLD; diff --git a/examples/voloctree_mapper_example_00004.cpp b/examples/voloctree_mapper_example_00004.cpp index 9f3f3f4b4c..7e04ad809e 100644 --- a/examples/voloctree_mapper_example_00004.cpp +++ b/examples/voloctree_mapper_example_00004.cpp @@ -274,8 +274,8 @@ void runReferenceAdaptation() std::map > datarec; std::map > volrec; { - std::map > rankIDrec = mapobject.getReceivedMappedIds(); - std::map > rankIDsend = mapobject.getSentMappedIds(); + std::unordered_map > rankIDrec = mapobject.getReceivedMappedIds(); + std::unordered_map > rankIDsend = mapobject.getSentMappedIds(); //build send buffers MPI_Comm comm = MPI_COMM_WORLD; @@ -453,8 +453,8 @@ void runReferenceAdaptation() std::map > datarec; std::map > volrec; { - std::map > rankIDrec = mapobject.getReceivedMappedIds(); - std::map > rankIDsend = mapobject.getSentMappedIds(); + std::unordered_map > rankIDrec = mapobject.getReceivedMappedIds(); + std::unordered_map > rankIDsend = mapobject.getSentMappedIds(); //build send buffers MPI_Comm comm = MPI_COMM_WORLD; @@ -1271,8 +1271,8 @@ void runMappedAdaptation() std::map > datarec; std::map > volrec; { - std::map > rankIDrec = mapobject.getReceivedMappedIds(); - std::map > rankIDsend = mapobject.getSentMappedIds(); + std::unordered_map > rankIDrec = mapobject.getReceivedMappedIds(); + std::unordered_map > rankIDsend = mapobject.getSentMappedIds(); //build send buffers MPI_Comm comm; diff --git a/src/POD/pod_voloctree.cpp b/src/POD/pod_voloctree.cpp index 0d086906fb..690f6d69c1 100644 --- a/src/POD/pod_voloctree.cpp +++ b/src/POD/pod_voloctree.cpp @@ -1304,8 +1304,8 @@ void PODVolOctree::communicatePODField(const pod::PODField & field, std::mapgetFieldCount(); std::size_t nvf = field.vector->getFieldCount(); - std::map > rankIDrec = m_meshmap->getReceivedMappedIds(); - std::map > rankIDsend = m_meshmap->getSentMappedIds(); + std::unordered_map > rankIDrec = m_meshmap->getReceivedMappedIds(); + std::unordered_map > rankIDsend = m_meshmap->getSentMappedIds(); //build send buffers DataCommunicator dataCommunicator(m_communicator); @@ -1370,7 +1370,7 @@ void PODVolOctree::communicatePODFieldFromPOD(const pod::PODField & field, std:: std::size_t nsf = field.scalar->getFieldCount(); std::size_t nvf = field.vector->getFieldCount(); - std::map > rankIDsend = m_meshmap->getSentReferenceIds(); + std::unordered_map > rankIDsend = m_meshmap->getSentReferenceIds(); //build send buffers DataCommunicator dataCommunicator(m_communicator); @@ -1437,8 +1437,8 @@ void PODVolOctree::communicatePODFieldFromPOD(const pod::PODField & field, std:: void PODVolOctree::communicateBoolField(const PiercedStorage & field, std::map > & dataBrec) { - std::map > rankIDrec = m_meshmap->getReceivedMappedIds(); - std::map > rankIDsend = m_meshmap->getSentMappedIds(); + std::unordered_map > rankIDrec = m_meshmap->getReceivedMappedIds(); + std::unordered_map > rankIDsend = m_meshmap->getSentMappedIds(); //build send buffers DataCommunicator dataCommunicator(m_communicator); @@ -1477,8 +1477,8 @@ void PODVolOctree::communicateField(const PiercedStorage & field, const std::size_t nf = field.getFieldCount(); - std::map > rankIDrec = m_meshmap->getReceivedMappedIds(); - std::map > rankIDsend = m_meshmap->getSentMappedIds(); + std::unordered_map > rankIDrec = m_meshmap->getReceivedMappedIds(); + std::unordered_map > rankIDsend = m_meshmap->getSentMappedIds(); //build send buffers DataCommunicator dataCommunicator(m_communicator); @@ -1522,7 +1522,7 @@ void PODVolOctree::communicateFieldFromPOD(const PiercedStorage & field, std::size_t nf = field.getFieldCount(); - std::map > rankIDsend = m_meshmap->getSentReferenceIds(); + std::unordered_map > rankIDsend = m_meshmap->getSentReferenceIds(); //build send buffers DataCommunicator dataCommunicator(m_communicator); diff --git a/src/patchkernel/volume_mapper.hpp b/src/patchkernel/volume_mapper.hpp index ea24e76448..26dde8b63d 100644 --- a/src/patchkernel/volume_mapper.hpp +++ b/src/patchkernel/volume_mapper.hpp @@ -119,9 +119,9 @@ class VolumeMapper { #if BITPIT_ENABLE_MPI virtual bool checkPartition() = 0; - virtual std::map > getReceivedMappedIds() = 0; - virtual std::map > getSentMappedIds() = 0; - virtual std::map > getSentReferenceIds() = 0; + virtual std::unordered_map > getReceivedMappedIds() = 0; + virtual std::unordered_map > getSentMappedIds() = 0; + virtual std::unordered_map > getSentReferenceIds() = 0; #endif protected: diff --git a/src/voloctree/voloctree_mapper.cpp b/src/voloctree/voloctree_mapper.cpp index 8056f42496..31e05fa63f 100644 --- a/src/voloctree/voloctree_mapper.cpp +++ b/src/voloctree/voloctree_mapper.cpp @@ -749,9 +749,9 @@ void VolOctreeMapper::_mappingAdaptionMappedUpdate(const std::vector> VolOctreeMapper::getReceivedMappedIds() +std::unordered_map> VolOctreeMapper::getReceivedMappedIds() { - std::map> received; + std::unordered_map> received; for (OctantIR octir : m_partitionIR.list_rec_octantIR_before) { received[octir.rank].push_back(octir.id); @@ -772,12 +772,12 @@ std::map> VolOctreeMapper::getReceivedMappedIds() * (argument) of the reference mesh overlapped with the partition (rank) of * the mapped mesh. */ -std::map> VolOctreeMapper::getSentReferenceIds() +std::unordered_map> VolOctreeMapper::getSentReferenceIds() { - std::map> sent; + std::unordered_map> sent; // Recover id to be recv/send - std::map> rankIdSend; + std::unordered_map> rankIdSend; for (Cell &cell : m_referencePatch->getCells()) { long id = cell.getId(); @@ -789,10 +789,8 @@ std::map> VolOctreeMapper::getSentReferenceIds() } } - for (std::map>::iterator it=rankIdSend.begin(); it!=rankIdSend.end(); ++it) { - for (long id : it->second) { - sent[it->first].push_back(id); - } + for (const auto & rankId : rankIdSend) { + sent[rankId.first].assign(rankId.second.begin(), rankId.second.end()); } return sent; @@ -806,9 +804,9 @@ std::map> VolOctreeMapper::getSentReferenceIds() * (argument) of the mapped mesh overlapped with the partition (rank) of the * reference mesh. */ -std::map> VolOctreeMapper::getSentMappedIds() +std::unordered_map> VolOctreeMapper::getSentMappedIds() { - std::map> sent; + std::unordered_map> sent; for (OctantIR octir : m_partitionIR.list_sent_octantIR) { sent[octir.rank].push_back(octir.id); diff --git a/src/voloctree/voloctree_mapper.hpp b/src/voloctree/voloctree_mapper.hpp index c2afee1788..57be3d4b5a 100644 --- a/src/voloctree/voloctree_mapper.hpp +++ b/src/voloctree/voloctree_mapper.hpp @@ -54,9 +54,9 @@ class VolOctreeMapper: public VolumeMapper { #if BITPIT_ENABLE_MPI bool checkPartition() override; void clearPartitionMapping(); - std::map> getReceivedMappedIds() override; - std::map> getSentMappedIds() override; - std::map> getSentReferenceIds() override; + std::unordered_map> getReceivedMappedIds() override; + std::unordered_map> getSentMappedIds() override; + std::unordered_map> getSentReferenceIds() override; #endif private: