From c6e30d286b96905b94c9b77bbda9ae84f0f77e35 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Thu, 27 Jun 2019 11:24:14 +0000
Subject: [PATCH] COB-64: Measure real-timeness of MPI transpose

---
 RTCP/Cobalt/GPUProc/src/Station/StationInput.cc     |  2 +-
 RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc | 10 ++++++++--
 RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h  |  4 +++-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc b/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
index d53e1a40b29..bd0c7824dbf 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationInput.cc
@@ -743,7 +743,7 @@ namespace LOFAR {
       Queue< SmartPtr< MPIData<SampleT> > > mpiQueue(str(format(
             "sendInputToPipeline::mpiQueue [station %s]") % stationID.name()));
 
-      MPISender sender(logPrefix, stationIdx, subbandDistribution);
+      MPISender sender(logPrefix, stationIdx, subbandDistribution, ps.settings.blockDuration());
 
       /*
        * Stream the data.
diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
index c493e80173e..e055c88443d 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.cc
@@ -46,6 +46,7 @@
 #include <Common/LofarLogger.h>
 #include <Common/Timer.h>
 #include <CoInterface/OMPThread.h>
+#include <CoInterface/BudgetTimer.h>
 #include <InputProc/SampleType.h>
 
 using namespace LOFAR;
@@ -197,14 +198,15 @@ namespace LOFAR {
     template struct MPIData< SampleType<i4complex> >;
 
     MPISender::MPISender( const std::string &logPrefix, size_t stationIdx,
-                          const SubbandDistribution &subbandDistribution )
+                          const SubbandDistribution &subbandDistribution, float blockDuration )
     :
       logPrefix(logPrefix),
       stationIdx(stationIdx),
       subbandDistribution(subbandDistribution),
       targetRanks(keys(subbandDistribution)),
       subbandOffsets(targetRanks.size(), 0),
-      nrSubbands(values(subbandDistribution).size())
+      nrSubbands(values(subbandDistribution).size()),
+      blockDuration(blockDuration)
     {
       // Determine the offset of the set of subbands for each rank within
       // the members in MPIData<SampleT>.
@@ -251,6 +253,10 @@ namespace LOFAR {
       SmartPtr< MPIData<SampleT> > mpiData;
 
       NSTimer mpiSendTimer(str(format("%s MPI send data") % logPrefix), true, true);
+      BudgetTimer copyTimer(
+        str(format("%s MPI send data") % logPrefix),
+        blockDuration,
+        true, true);
 
       size_t nrProcessedSamples = 0;
       size_t nrFlaggedSamples = 0;
diff --git a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
index 36156bbe57c..413f91ad6d8 100644
--- a/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
+++ b/RTCP/Cobalt/GPUProc/src/Station/StationTranspose.h
@@ -129,7 +129,8 @@ namespace LOFAR {
     class MPISender {
     public:
       MPISender( const std::string &logPrefix, size_t stationIdx,
-                 const SubbandDistribution &subbandDistribution );
+                 const SubbandDistribution &subbandDistribution,
+                 float blockDuration );
 
       /*
        * Sends blocks over MPI until a NULL is read from the inputQueue.
@@ -153,6 +154,7 @@ namespace LOFAR {
       const std::vector<int> targetRanks;
       std::vector<size_t> subbandOffsets;
       const size_t nrSubbands;
+      const float blockDuration;
 
 
       /*
-- 
GitLab