diff --git a/python/mesa_pd/templates/mpi/BroadcastProperty.templ.h b/python/mesa_pd/templates/mpi/BroadcastProperty.templ.h index 2279df7d1691b32c0c4900309b9fd21ec40c26ba..236c0a65cc59beaf36375c5d659a88ae318ea954 100644 --- a/python/mesa_pd/templates/mpi/BroadcastProperty.templ.h +++ b/python/mesa_pd/templates/mpi/BroadcastProperty.templ.h @@ -59,15 +59,18 @@ public: template <typename Notification> void operator()(data::ParticleStorage& ps) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem(walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; template <typename Notification> @@ -75,6 +78,8 @@ void BroadcastProperty::operator()(data::ParticleStorage& ps) const { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs(walberla::mpi::MPIManager::instance()->comm()); + std::set<int> recvRanks; // potential message senders WALBERLA_LOG_DETAIL( "Assembling of property reduction message starts..."); @@ -128,6 +133,11 @@ void BroadcastProperty::operator()(data::ParticleStorage& ps) const } } WALBERLA_LOG_DETAIL( "Parsing of property broadcasting message ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } } // namespace mpi diff --git a/python/mesa_pd/templates/mpi/ReduceProperty.templ.h b/python/mesa_pd/templates/mpi/ReduceProperty.templ.h index 38f7340854e17934bc5e867757968566393d658a..60abb8985584bfd5e80b96d0c3c1d950b722551c 100644 --- a/python/mesa_pd/templates/mpi/ReduceProperty.templ.h +++ b/python/mesa_pd/templates/mpi/ReduceProperty.templ.h @@ -68,15 +68,18 @@ public: template <typename Notification> void operator()(data::ParticleStorage& ps) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem(walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; template <typename Notification> @@ -84,6 +87,8 @@ void ReduceProperty::operator()(data::ParticleStorage& ps) const { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs(walberla::mpi::MPIManager::instance()->comm()); + std::set<int> recvRanks; // potential message senders WALBERLA_LOG_DETAIL( "Assembling of property reduction message starts..."); @@ -139,6 +144,11 @@ void ReduceProperty::operator()(data::ParticleStorage& ps) const } } WALBERLA_LOG_DETAIL( "Parsing of property reduction message ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } } // namespace mpi diff --git a/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.cpp b/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.cpp index ce0475880157e7de39dc696d5b48b805c85aec7a..1dca2429de6f345715e0cd81ea90685bba0658dd 100644 --- a/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.cpp +++ b/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.cpp @@ -39,6 +39,11 @@ void SyncGhostOwners::operator()( data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + bytesSent_ = 0; + bytesReceived_ = 0; + numberOfSends_ = 0; + numberOfReceives_ = 0; + //========================================================== // STEP1: Update & Migrate //========================================================== @@ -59,6 +64,8 @@ void SyncGhostOwners::updateAndMigrate( data::ParticleStorage& ps, // STEP1: Update & Migrate //========================================================== + walberla::mpi::BufferSystem bs1( walberla::mpi::MPIManager::instance()->comm(), 749861); + WALBERLA_CHECK(!bs1.isCommunicationRunning()); WALBERLA_LOG_DETAIL( "Assembling of Update&Migrate starts..." ); @@ -192,6 +199,11 @@ void SyncGhostOwners::updateAndMigrate( data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of Update&Migrate ended." ); + + bytesSent_ += bs1.getBytesSent(); + bytesReceived_ += bs1.getBytesReceived(); + numberOfSends_ += bs1.getNumberOfSends(); + numberOfReceives_ += bs1.getNumberOfReceives(); } void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, @@ -204,6 +216,8 @@ void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, // STEP2: Check&Resolve //========================================================== + walberla::mpi::BufferSystem bs2( walberla::mpi::MPIManager::instance()->comm(), 255367); + WALBERLA_CHECK(!bs2.isCommunicationRunning()); //init buffers @@ -350,6 +364,11 @@ void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of Check&Resolve ended." ); + + bytesSent_ += bs2.getBytesSent(); + bytesReceived_ += bs2.getBytesReceived(); + numberOfSends_ += bs2.getNumberOfSends(); + numberOfReceives_ += bs2.getNumberOfReceives(); } } // namespace mpi diff --git a/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.h b/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.h index 8ec931a686671a285bcfe000807c42425026c67f..0be135507c793080a5b7b8db30415839d59f2ae7 100644 --- a/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.h +++ b/python/mesa_pd/templates/mpi/SyncGhostOwners.templ.h @@ -60,11 +60,11 @@ public: const real_t dx = real_t(0), const bool syncNonCommunicatingBodies = false ) const; - int64_t getBytesSent() const { return bs1.getBytesSent() + bs2.getBytesSent(); } - int64_t getBytesReceived() const { return bs1.getBytesReceived() + bs2.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs1.getNumberOfSends() + bs2.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs1.getNumberOfReceives() + bs2.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: void updateAndMigrate( data::ParticleStorage& ps, const domain::IDomain& domain, @@ -77,11 +77,13 @@ private: mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs1 = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm(), 749861); - mutable walberla::mpi::BufferSystem bs2 = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm(), 255367); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.cpp b/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.cpp index dcf86e8bed632796fb1b36730daf56d0f78126a6..f631bb0e7b49e814556f93664521d7fb5f5c30de 100644 --- a/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.cpp +++ b/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.cpp @@ -38,6 +38,8 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs( walberla::mpi::MPIManager::instance()->comm() ); + neighborRanks_ = domain.getNeighborProcesses(); for( uint_t nbProcessRank : neighborRanks_ ) { @@ -47,7 +49,7 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, bs.sendBuffer(nbProcessRank) << walberla::uint8_c(0); } } - generateSynchronizationMessages(ps, domain, dx); + generateSynchronizationMessages(bs, ps, domain, dx); // size of buffer is unknown and changes with each send bs.setReceiverInfoFromSendBufferState(false, true); @@ -66,9 +68,15 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of particle synchronization response ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } -void SyncNextNeighbors::generateSynchronizationMessages(data::ParticleStorage& ps, +void SyncNextNeighbors::generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain, const real_t dx) const { diff --git a/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.h b/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.h index 5c9402d4c0f0c0f9a8f15343eac067496238514d..7a9dc110bc1e51bdfc4f052c08840cd9b077796c 100644 --- a/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.h +++ b/python/mesa_pd/templates/mpi/SyncNextNeighbors.templ.h @@ -57,21 +57,25 @@ public: const domain::IDomain& domain, const real_t dx = real_t(0)) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - void generateSynchronizationMessages(data::ParticleStorage& ps, + void generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain, const real_t dx) const; mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.cpp b/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.cpp index bab7acfcc9be2aeabd5c74494db0168dd3df291e..ce8c9100d2615ac8660ff3a1040c259b36fc02bd 100644 --- a/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.cpp +++ b/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.cpp @@ -37,6 +37,8 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs( walberla::mpi::MPIManager::instance()->comm() ); + neighborRanks_ = domain.getNeighborProcesses(); for( uint_t nbProcessRank : neighborRanks_ ) { @@ -46,7 +48,7 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, bs.sendBuffer(nbProcessRank) << walberla::uint8_c(0); } } - generateSynchronizationMessages(ps, domain); + generateSynchronizationMessages(bs, ps, domain); // size of buffer is unknown and changes with each send bs.setReceiverInfoFromSendBufferState(false, true); @@ -65,9 +67,15 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of particle synchronization response ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } -void SyncNextNeighborsNoGhosts::generateSynchronizationMessages(data::ParticleStorage& ps, +void SyncNextNeighborsNoGhosts::generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain) const { const uint_t ownRank = uint_c(rank_); diff --git a/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.h b/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.h index 7ffc5f2b7b915997c0a88b33e0d9fdd8b1b4f860..8030c09e76f1362a2e5e4d9f16531c8525ef2046 100644 --- a/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.h +++ b/python/mesa_pd/templates/mpi/SyncNextNeighborsNoGhosts.templ.h @@ -60,20 +60,24 @@ public: void operator()(data::ParticleStorage& ps, const domain::IDomain& domain) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - void generateSynchronizationMessages(data::ParticleStorage& ps, + void generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain) const; mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/src/mesa_pd/common/ParticleFunctions.h b/src/mesa_pd/common/ParticleFunctions.h index 462e3f2e8ec428b10d56171e54f1baf97597c11c..b546b36a7347e8e655062986415533158bf76105 100644 --- a/src/mesa_pd/common/ParticleFunctions.h +++ b/src/mesa_pd/common/ParticleFunctions.h @@ -18,6 +18,12 @@ // //====================================================================================================================== +//====================================================================================================================== +// +// THIS FILE IS GENERATED - PLEASE CHANGE THE TEMPLATE !!! +// +//====================================================================================================================== + #pragma once #include <mesa_pd/data/DataTypes.h> diff --git a/src/mesa_pd/mpi/BroadcastProperty.h b/src/mesa_pd/mpi/BroadcastProperty.h index 856e030ec1dd861db98c9984faa2eaa79f95f9c3..27c4542cf29f2b2b8c08019bbb3a1611de1e02ca 100644 --- a/src/mesa_pd/mpi/BroadcastProperty.h +++ b/src/mesa_pd/mpi/BroadcastProperty.h @@ -59,15 +59,18 @@ public: template <typename Notification> void operator()(data::ParticleStorage& ps) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem(walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; template <typename Notification> @@ -75,6 +78,8 @@ void BroadcastProperty::operator()(data::ParticleStorage& ps) const { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs(walberla::mpi::MPIManager::instance()->comm()); + std::set<int> recvRanks; // potential message senders WALBERLA_LOG_DETAIL( "Assembling of property reduction message starts..."); @@ -128,6 +133,11 @@ void BroadcastProperty::operator()(data::ParticleStorage& ps) const } } WALBERLA_LOG_DETAIL( "Parsing of property broadcasting message ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } } // namespace mpi diff --git a/src/mesa_pd/mpi/ReduceProperty.h b/src/mesa_pd/mpi/ReduceProperty.h index 7f55c334973729778ca7dd87ada38ed175a522e7..46736d9edd5006565e223a12ab7a69e577ccae27 100644 --- a/src/mesa_pd/mpi/ReduceProperty.h +++ b/src/mesa_pd/mpi/ReduceProperty.h @@ -68,15 +68,18 @@ public: template <typename Notification> void operator()(data::ParticleStorage& ps) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem(walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; template <typename Notification> @@ -84,6 +87,8 @@ void ReduceProperty::operator()(data::ParticleStorage& ps) const { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs(walberla::mpi::MPIManager::instance()->comm()); + std::set<int> recvRanks; // potential message senders WALBERLA_LOG_DETAIL( "Assembling of property reduction message starts..."); @@ -139,6 +144,11 @@ void ReduceProperty::operator()(data::ParticleStorage& ps) const } } WALBERLA_LOG_DETAIL( "Parsing of property reduction message ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } } // namespace mpi diff --git a/src/mesa_pd/mpi/SyncGhostOwners.cpp b/src/mesa_pd/mpi/SyncGhostOwners.cpp index 7f115fdb214350ef0c3b4cc9714a1a71c6d4be9f..dd13a9fb2623fe2cba41fd8bcca1318176ec1757 100644 --- a/src/mesa_pd/mpi/SyncGhostOwners.cpp +++ b/src/mesa_pd/mpi/SyncGhostOwners.cpp @@ -39,6 +39,11 @@ void SyncGhostOwners::operator()( data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + bytesSent_ = 0; + bytesReceived_ = 0; + numberOfSends_ = 0; + numberOfReceives_ = 0; + //========================================================== // STEP1: Update & Migrate //========================================================== @@ -59,6 +64,8 @@ void SyncGhostOwners::updateAndMigrate( data::ParticleStorage& ps, // STEP1: Update & Migrate //========================================================== + walberla::mpi::BufferSystem bs1( walberla::mpi::MPIManager::instance()->comm(), 749861); + WALBERLA_CHECK(!bs1.isCommunicationRunning()); WALBERLA_LOG_DETAIL( "Assembling of Update&Migrate starts..." ); @@ -192,6 +199,11 @@ void SyncGhostOwners::updateAndMigrate( data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of Update&Migrate ended." ); + + bytesSent_ += bs1.getBytesSent(); + bytesReceived_ += bs1.getBytesReceived(); + numberOfSends_ += bs1.getNumberOfSends(); + numberOfReceives_ += bs1.getNumberOfReceives(); } void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, @@ -204,6 +216,8 @@ void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, // STEP2: Check&Resolve //========================================================== + walberla::mpi::BufferSystem bs2( walberla::mpi::MPIManager::instance()->comm(), 255367); + WALBERLA_CHECK(!bs2.isCommunicationRunning()); //init buffers @@ -350,6 +364,11 @@ void SyncGhostOwners::checkAndResolveOverlap( data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of Check&Resolve ended." ); + + bytesSent_ += bs2.getBytesSent(); + bytesReceived_ += bs2.getBytesReceived(); + numberOfSends_ += bs2.getNumberOfSends(); + numberOfReceives_ += bs2.getNumberOfReceives(); } } // namespace mpi diff --git a/src/mesa_pd/mpi/SyncGhostOwners.h b/src/mesa_pd/mpi/SyncGhostOwners.h index 0b9d1db826f85044591595ca136d27ff2a84af4a..02089e33c33cd6878731110cb4b349b6213a2788 100644 --- a/src/mesa_pd/mpi/SyncGhostOwners.h +++ b/src/mesa_pd/mpi/SyncGhostOwners.h @@ -60,11 +60,11 @@ public: const real_t dx = real_t(0), const bool syncNonCommunicatingBodies = false ) const; - int64_t getBytesSent() const { return bs1.getBytesSent() + bs2.getBytesSent(); } - int64_t getBytesReceived() const { return bs1.getBytesReceived() + bs2.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs1.getNumberOfSends() + bs2.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs1.getNumberOfReceives() + bs2.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: void updateAndMigrate( data::ParticleStorage& ps, const domain::IDomain& domain, @@ -77,11 +77,13 @@ private: mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs1 = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm(), 749861); - mutable walberla::mpi::BufferSystem bs2 = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm(), 255367); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/src/mesa_pd/mpi/SyncNextNeighbors.cpp b/src/mesa_pd/mpi/SyncNextNeighbors.cpp index e36c352dc8e60c490d36ded178be585e2a82f62d..52d922375c06dae902fef936d4db61b69edfebdf 100644 --- a/src/mesa_pd/mpi/SyncNextNeighbors.cpp +++ b/src/mesa_pd/mpi/SyncNextNeighbors.cpp @@ -38,6 +38,8 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs( walberla::mpi::MPIManager::instance()->comm() ); + neighborRanks_ = domain.getNeighborProcesses(); for( uint_t nbProcessRank : neighborRanks_ ) { @@ -47,7 +49,7 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, bs.sendBuffer(nbProcessRank) << walberla::uint8_c(0); } } - generateSynchronizationMessages(ps, domain, dx); + generateSynchronizationMessages(bs, ps, domain, dx); // size of buffer is unknown and changes with each send bs.setReceiverInfoFromSendBufferState(false, true); @@ -66,9 +68,15 @@ void SyncNextNeighbors::operator()(data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of particle synchronization response ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } -void SyncNextNeighbors::generateSynchronizationMessages(data::ParticleStorage& ps, +void SyncNextNeighbors::generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain, const real_t dx) const { diff --git a/src/mesa_pd/mpi/SyncNextNeighbors.h b/src/mesa_pd/mpi/SyncNextNeighbors.h index 8d8364cbf5fd28d1dae06f677a4334ba7293e3d7..31e51f56b8324ba3dc99cb7cb01345a51c08afd7 100644 --- a/src/mesa_pd/mpi/SyncNextNeighbors.h +++ b/src/mesa_pd/mpi/SyncNextNeighbors.h @@ -57,21 +57,25 @@ public: const domain::IDomain& domain, const real_t dx = real_t(0)) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - void generateSynchronizationMessages(data::ParticleStorage& ps, + void generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain, const real_t dx) const; mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.cpp b/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.cpp index 417d1a86bd8005173550f358310f19aaba75f07e..34778d0e2ca5b458666498f296f8109ac72b4f50 100644 --- a/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.cpp +++ b/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.cpp @@ -51,6 +51,8 @@ void SyncNextNeighborsBlockForest::operator()(data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs( walberla::mpi::MPIManager::instance()->comm() ); + WALBERLA_CHECK(!bs.isCommunicationRunning()); WALBERLA_CHECK_EQUAL(bs.size(), 0); @@ -67,7 +69,7 @@ void SyncNextNeighborsBlockForest::operator()(data::ParticleStorage& ps, } } - generateSynchronizationMessages(ps, bf, dx); + generateSynchronizationMessages(bs, ps, bf, dx); // size of buffer is unknown and changes with each send bs.setReceiverInfoFromSendBufferState(false, true); @@ -86,9 +88,15 @@ void SyncNextNeighborsBlockForest::operator()(data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of particle synchronization response ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } -void SyncNextNeighborsBlockForest::generateSynchronizationMessages(data::ParticleStorage& ps, +void SyncNextNeighborsBlockForest::generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const std::shared_ptr<blockforest::BlockForest>& bf, const real_t dx) const { diff --git a/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.h b/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.h index 2fa8dfc2d9a9e282f3e1f5c72b557e442f030009..8c04c3ceed47a17f5ec147722549ca4cd25f456d 100644 --- a/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.h +++ b/src/mesa_pd/mpi/SyncNextNeighborsBlockForest.h @@ -60,20 +60,24 @@ public: const std::shared_ptr<domain::BlockForestDomain>& domain, const real_t dx = real_t(0)) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - void generateSynchronizationMessages(data::ParticleStorage& ps, + void generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const std::shared_ptr<blockforest::BlockForest>& blockforest, const real_t dx) const; - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi diff --git a/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.cpp b/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.cpp index cfd313cefa151826650f8a095f310674902afcdd..145b95cd8bea0732f1f8b507d7d9ed21bfd1c421 100644 --- a/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.cpp +++ b/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.cpp @@ -37,6 +37,8 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, { if (numProcesses_ == 1) return; + walberla::mpi::BufferSystem bs( walberla::mpi::MPIManager::instance()->comm() ); + neighborRanks_ = domain.getNeighborProcesses(); for( uint_t nbProcessRank : neighborRanks_ ) { @@ -46,7 +48,7 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, bs.sendBuffer(nbProcessRank) << walberla::uint8_c(0); } } - generateSynchronizationMessages(ps, domain); + generateSynchronizationMessages(bs, ps, domain); // size of buffer is unknown and changes with each send bs.setReceiverInfoFromSendBufferState(false, true); @@ -65,9 +67,15 @@ void SyncNextNeighborsNoGhosts::operator()(data::ParticleStorage& ps, } } WALBERLA_LOG_DETAIL( "Parsing of particle synchronization response ended." ); + + bytesSent_ = bs.getBytesSent(); + bytesReceived_ = bs.getBytesReceived(); + numberOfSends_ = bs.getNumberOfSends(); + numberOfReceives_ = bs.getNumberOfReceives(); } -void SyncNextNeighborsNoGhosts::generateSynchronizationMessages(data::ParticleStorage& ps, +void SyncNextNeighborsNoGhosts::generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain) const { const uint_t ownRank = uint_c(rank_); diff --git a/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.h b/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.h index a802fe4d631a5b5499b07a24560984f3b98f86bf..a95bc567f5c8846f72262f457c9447b6f7f36f4e 100644 --- a/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.h +++ b/src/mesa_pd/mpi/SyncNextNeighborsNoGhosts.h @@ -60,20 +60,24 @@ public: void operator()(data::ParticleStorage& ps, const domain::IDomain& domain) const; - int64_t getBytesSent() const { return bs.getBytesSent(); } - int64_t getBytesReceived() const { return bs.getBytesReceived(); } + int64_t getBytesSent() const { return bytesSent_; } + int64_t getBytesReceived() const { return bytesReceived_; } - int64_t getNumberOfSends() const { return bs.getNumberOfSends(); } - int64_t getNumberOfReceives() const { return bs.getNumberOfReceives(); } + int64_t getNumberOfSends() const { return numberOfSends_; } + int64_t getNumberOfReceives() const { return numberOfReceives_; } private: - void generateSynchronizationMessages(data::ParticleStorage& ps, + void generateSynchronizationMessages(walberla::mpi::BufferSystem& bs, + data::ParticleStorage& ps, const domain::IDomain& domain) const; mutable std::vector<uint_t> neighborRanks_; ///cache for neighbor ranks -> will be updated in operator() - mutable walberla::mpi::BufferSystem bs = walberla::mpi::BufferSystem( walberla::mpi::MPIManager::instance()->comm() ); - int numProcesses_ = walberla::mpi::MPIManager::instance()->numProcesses(); int rank_ = walberla::mpi::MPIManager::instance()->rank(); + + mutable int64_t bytesSent_ = 0; + mutable int64_t bytesReceived_ = 0; + mutable int64_t numberOfSends_ = 0; + mutable int64_t numberOfReceives_ = 0; }; } // namespace mpi