From 64c863b99f1e5f6c2ea2611d9d057fdac0a98351 Mon Sep 17 00:00:00 2001 From: KyleKlenk <kyle.c.klenk@gmail.com> Date: Fri, 8 Jul 2022 16:22:33 -0600 Subject: [PATCH] added timing info to summa_actor, removed unencessary print statements --- build/includes/global/timing_info.hpp | 6 ++- build/includes/summa_actor/summa_actor.hpp | 10 +++-- build/source/actors/hru_actor/hru_actor.cpp | 44 ++----------------- .../source/actors/summa_actor/summa_actor.cpp | 24 +++++----- 4 files changed, 25 insertions(+), 59 deletions(-) diff --git a/build/includes/global/timing_info.hpp b/build/includes/global/timing_info.hpp index 145ee06..e246a6c 100644 --- a/build/includes/global/timing_info.hpp +++ b/build/includes/global/timing_info.hpp @@ -4,7 +4,11 @@ #include <vector> using chrono_time = std::chrono::time_point<std::chrono::system_clock>; - +/** + * Class to manage timing information. This allows the user to add an arbitrary amount of timing variables. + * The timing variables are accessed through their named string and will keep a running duration of the amount + * of time spent through multiple calls to updateStartPoint and updateEndPoint + */ class TimingInfo { private: std::vector<std::optional<chrono_time>> start; diff --git a/build/includes/summa_actor/summa_actor.hpp b/build/includes/summa_actor/summa_actor.hpp index a2e9410..ef05577 100644 --- a/build/includes/summa_actor/summa_actor.hpp +++ b/build/includes/summa_actor/summa_actor.hpp @@ -2,14 +2,17 @@ #include "caf/all.hpp" #include "caf/io/all.hpp" +#include "timing_info.hpp" #include <chrono> #include <string> +#include <vector> namespace caf { -struct summa_actor_timing_info { +struct job_timing_info { + std: std::chrono::time_point<std::chrono::system_clock> start; std::chrono::time_point<std::chrono::system_clock> end; double summa_actor_duration; @@ -18,9 +21,8 @@ struct summa_actor_timing_info { struct summa_actor_state { // Timing Information For Summa-Actor - std::chrono::time_point<std::chrono::system_clock> start; - std::chrono::time_point<std::chrono::system_clock> end; - double duration; + TimingInfo summa_actor_timing; + // Program Parameters int startGRU; // starting GRU for the simulation int numGRU; // number of GRUs to compute diff --git a/build/source/actors/hru_actor/hru_actor.cpp b/build/source/actors/hru_actor/hru_actor.cpp index 6a2ed14..90b60db 100644 --- a/build/source/actors/hru_actor/hru_actor.cpp +++ b/build/source/actors/hru_actor/hru_actor.cpp @@ -90,7 +90,7 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->state.hru_timing.updateEndPoint("total_duration"); // Tell our parent we are done, convert all timings to seconds - aout(self) << "\n________________PRINTING HRU TIMING INFO RESULTS________________\n"; + aout(self) << "\n________________HRU TIMING INFO RESULTS________________\n"; aout(self) << "Total Duration = " << self->state.hru_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n"; aout(self) << "Init Duration = " << self->state.hru_timing.getDuration("init_duration").value_or(-1.0) << " Seconds\n"; aout(self) << "Forcing Duration = " << self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0) << " Seconds\n"; @@ -145,16 +145,13 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU, self->state.dt_init_factor = dt_init_factor; }, }; - /********************************************************************************************************* - *********************************** END ACTOR MESSAGE HANDLERS ****************************************** - *********************************************************************************************************/ } + + void Initialize_HRU(stateful_actor<hru_state>* self) { self->state.hru_timing.updateStartPoint("init_duration"); - // aout(self) << "Initalizing HRU" << std::endl; - // aout(self) << "Entering Initalize \n"; summaActors_initialize(&self->state.indxGRU, &self->state.num_steps, self->state.handle_forcStat, @@ -209,7 +206,6 @@ void Initialize_HRU(stateful_actor<hru_state>* self) { self->quit(); return; } - // aout(self) << "Restart" << std::endl; Restart(&self->state.indxGRU, &self->state.indxHRU, @@ -294,9 +290,6 @@ int Run_HRU(stateful_actor<hru_state>* self) { } self->state.hru_timing.updateEndPoint("run_physics_duration"); - /********************************************************************** - ** WRITE_OUTPUT - **********************************************************************/ self->state.hru_timing.updateStartPoint("write_output_duration"); WriteOutput(&self->state.indxHRU, &self->state.indxGRU, @@ -349,13 +342,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.timestep > self->state.num_steps) { // check if simulation is finished self->state.outputStep -= 1; // prevents segfault - - if (debug) - aout(self) << "Sending Final Write" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; self->send(self->state.file_access_actor, write_output_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self); @@ -369,14 +355,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { // Special case where we need both reading and writing self->state.outputStep -= 1; // prevents segfault - if (debug) - aout(self) << "Need to read forcing and write to outputstruc\n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - - self->send(self->state.file_access_actor, read_and_write_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self->state.iFile + 1, self); self->state.outputStep = 1; @@ -386,14 +364,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.outputStep > self->state.outputStrucSize) { // check if we need to clear the output struc self->state.outputStep -= 1; - - if (debug) - aout(self) << "Sending Write \n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - self->send(self->state.file_access_actor, write_output_v, self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self); @@ -403,14 +373,6 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) { } else if (self->state.forcingStep > self->state.stepsInCurrentFFile) { // we need more forcing data - - if (debug) - aout(self) << "Asking for more forcing data\n" << - "forcingStep = " << self->state.forcingStep << "\n" << - "stepsInCurrentFFile = " << self->state.stepsInCurrentFFile << "\n" << - "timeStep = " << self->state.timestep << "\n" << - "outputStep = " << self->state.outputStep << "\n"; - self->send(self->state.file_access_actor, access_forcing_v, self->state.iFile + 1, self); return false; diff --git a/build/source/actors/summa_actor/summa_actor.cpp b/build/source/actors/summa_actor/summa_actor.cpp index 4aaa11e..10049d7 100644 --- a/build/source/actors/summa_actor/summa_actor.cpp +++ b/build/source/actors/summa_actor/summa_actor.cpp @@ -15,7 +15,10 @@ using json = nlohmann::json; namespace caf { behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int numGRU, std::string configPath, actor parent) { - self->state.start = std::chrono::high_resolution_clock::now(); + // Set Timing Variables + self->state.summa_actor_timing = TimingInfo(); + self->state.summa_actor_timing.addTimePoint("total_duration"); + self->state.summa_actor_timing.updateStartPoint("total_duration"); // Set Variables self->state.startGRU = startGRU; self->state.numGRU = numGRU; @@ -35,24 +38,19 @@ behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int spawnJob(self); return { - [=](done_job, int numFailed, int job_duration, int read_duration, int write_duration) { + [=](done_job, int numFailed, double job_duration, double read_duration, double write_duration) { self->state.numFailed += numFailed; aout(self) << "Job Done\n"; if (self->state.numGRU <= 0) { - - self->state.end = std::chrono::high_resolution_clock::now(); - self->state.duration = calculateTime(self->state.start, self->state.end); - - self->state.duration = self->state.duration / 1000; // Convert to milliseconds - + self->state.summa_actor_timing.updateEndPoint("total_duration"); - aout(self) << "Total Program Duration:\n"; - aout(self) << " " << self->state.duration / 1000 << " Seconds\n"; - aout(self) << " " << (self->state.duration / 1000) / 60 << " Minutes\n"; - aout(self) << " " << ((self->state.duration / 1000) / 60) / 60 << " Hours\n"; + aout(self) << "\n________________SUMMA_ACTOR TIMING INFO________________\n"; + aout(self) << "Total Duration = " << self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n"; + aout(self) << "Total Duration = " << self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) / 60 << " Minutes\n"; + aout(self) << "Total Duration = " << (self->state.summa_actor_timing.getDuration("total_duration").value_or(-1.0) / 60) / 60 << " Hours\n\n"; aout(self) << "Program Finished \n"; - self->send(self->state.parent, done_batch_v, self->state.duration); + self->send(self->state.parent, done_batch_v, self->state.summa_actor_timing.getDuration("total duration").value_or(-1.0)); } else { // spawn a new job -- GitLab