From 573c0456fd5d3fb068e5bdeea931e8fbc58f3fb2 Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Wed, 9 Jan 2019 18:20:01 +0100
Subject: [PATCH] add statistics about communication partners

---
 src/core/mpi/BufferSystem.cpp | 14 ++++++++++----
 src/core/mpi/BufferSystem.h   | 14 ++++++++++++--
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/core/mpi/BufferSystem.cpp b/src/core/mpi/BufferSystem.cpp
index cfe037d8f..a6e64b887 100644
--- a/src/core/mpi/BufferSystem.cpp
+++ b/src/core/mpi/BufferSystem.cpp
@@ -56,6 +56,7 @@ void BufferSystem::iterator::operator++()
    } else
    {
       bufferSystem_.bytesReceived_ += currentRecvBuffer_->size() * sizeof(RecvBuffer::ElementType);
+      bufferSystem_.numberOfReceives_ += 1;
    }
 }
 
@@ -307,7 +308,8 @@ void BufferSystem::sendAll()
       {
          if ( iter->second.buffer.size() > 0 )
          {
-            bytesSent_ += iter->second.buffer.size() * sizeof(SendBuffer::ElementType);
+            bytesSent_     += iter->second.buffer.size() * sizeof(SendBuffer::ElementType);
+            numberOfSends_ += 1;
             currentComm_->send( iter->first, iter->second.buffer );
          }
 
@@ -338,7 +340,8 @@ void BufferSystem::send( MPIRank rank )
 
    if ( iter->second.buffer.size() > 0 )
    {
-      bytesSent_ += iter->second.buffer.size() * sizeof(SendBuffer::ElementType);
+      bytesSent_     += iter->second.buffer.size() * sizeof(SendBuffer::ElementType);
+      numberOfSends_ += 1;
       currentComm_->send( rank, iter->second.buffer );
    }
 
@@ -372,8 +375,11 @@ void BufferSystem::startCommunication()
    currentComm_->scheduleReceives( recvInfos_ );
    communicationRunning_ = true;
 
-   bytesSent_     = 0;
-   bytesReceived_ = 0;
+   bytesSent_        = 0;
+   bytesReceived_    = 0;
+
+   numberOfSends_    = 0;
+   numberOfReceives_ = 0;
 }
 
 
diff --git a/src/core/mpi/BufferSystem.h b/src/core/mpi/BufferSystem.h
index 03ea8bcbe..926a7181f 100644
--- a/src/core/mpi/BufferSystem.h
+++ b/src/core/mpi/BufferSystem.h
@@ -193,9 +193,16 @@ public:
    //@}
    //*******************************************************************************************************************
 
+   ///Bytes sent during the current or last communication
    int64_t getBytesSent() const { return bytesSent_; }
+   ///Bytes received during the current or last communication
    int64_t getBytesReceived() const { return bytesReceived_; }
 
+   ///Communication partners during current or last send operation
+   int64_t getNumberOfSends() const { return numberOfSends_; }
+   ///Communication partners during current or last receive operation
+   int64_t getNumberOfReceives() const { return numberOfReceives_; }
+
 
    //* Rank Ranges     *************************************************************************************************
    /*! \name Rank Ranges  */
@@ -244,8 +251,11 @@ protected:
    //each concurrently running communication uses different tags
    static std::set<int> activeTags_;
 
-   int64_t bytesSent_     = 0; ///< number of bytes sent during last communication
-   int64_t bytesReceived_ = 0; ///< number of bytes received during last communication
+   int64_t bytesSent_        = 0; ///< number of bytes sent during last communication
+   int64_t bytesReceived_    = 0; ///< number of bytes received during last communication
+
+   int64_t numberOfSends_    = 0; ///< number of communication partners during last send
+   int64_t numberOfReceives_ = 0; ///< number of communication partners during last receive
 };
 
 
-- 
GitLab