From cecd6e106ce3459c82dae79e5de6c4afcf9f0511 Mon Sep 17 00:00:00 2001
From: ab04unyc <michael.zikeli@fau.de>
Date: Mon, 3 Feb 2025 16:47:15 +0100
Subject: [PATCH] [skip ci] Add timer data exposure to Python callback in
 UniformGridCPU benchmark.

---
 .../UniformGridCPU/UniformGridCPU.cpp         | 28 ++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp b/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
index a7eb9ecf4..bc933c6ad 100644
--- a/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
+++ b/apps/benchmarks/UniformGridCPU/UniformGridCPU.cpp
@@ -213,7 +213,6 @@ int main(int argc, char** argv)
 
          WcTimingPool timeloopTiming;
          WcTimer simTimer;
-
          WALBERLA_MPI_WORLD_BARRIER()
          WALBERLA_LOG_INFO_ON_ROOT("Starting simulation with " << timesteps << " time steps")
 
@@ -250,6 +249,33 @@ int main(int argc, char** argv)
                   pythonCallbackResults.data().exposeValue("nontemporal", nontemporal);
                   pythonCallbackResults.data().exposeValue("cse_global", infoCseGlobal);
                   pythonCallbackResults.data().exposeValue("cse_pdfs", infoCsePdfs);
+
+                  auto exposeTimers = [&pythonCallbackResults](const std::shared_ptr<WcTimingPool>& tp){
+                     std::string parseColumnName(const std::string& columnName) {
+                        std::string parsedName = columnName;
+                        std::replace(parsedName.begin(), parsedName.end(), ' ', '-');
+                        return parsedName;
+                     }
+                     auto& data = pythonCallbackResults.data();
+                     for (auto i = tp->begin(); i != tp->end(); ++i)
+                     {
+                     const std::string timerName = "Timer_" + i->first;
+                     const std::string coulumnName; 
+                     coulumnName = timerName + "_Total";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.total());
+                     coulumnName = timerName + "_Average";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.average());
+                     coulumnName = timerName + "_Count";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.getCounter());
+                     coulumnName = timerName + "_Min";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.min());
+                     coulumnName = timerName + "_Max";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.max());
+                     coulumnName = timerName + "_Variance";
+                     data.exposeValue(parseColumnName(coulumnName).c_str(), i->second.variance());
+                     }
+                  };
+                  exposeTimers(reducedTimeloopTiming);
                   // Call Python function to report results
                   pythonCallbackResults();
                }
-- 
GitLab