diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2006-07-31 15:06:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2006-07-31 15:06:00 +0000 |
commit | f9be2e1959cac50e919a1b464af2e04d13c4b224 (patch) | |
tree | 6f39609186cb84a8bd334eb54e19d9a7ff55c133 /Carpet/Carpet/src/Evolve.cc | |
parent | 83b3e3dee04ae3519160473dd3641323b1038638 (diff) |
Carpet: Add a timer class
Add a timer class that handles Cactus timers conveniently. Define
also a class for sets of timers, so that several timers can e.g. be
output together.
Use this class in Evolve.cc.
Add timers to CallFunction.cc.
Do not output timers by default.
darcs-hash:20060731150618-dae7b-954e61aa5dcc163884f7fe03c3aa4f0298409918.gz
Diffstat (limited to 'Carpet/Carpet/src/Evolve.cc')
-rw-r--r-- | Carpet/Carpet/src/Evolve.cc | 152 |
1 files changed, 32 insertions, 120 deletions
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index 06bd88038..af8155bb9 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -33,6 +33,7 @@ #include "th.hh" #include "carpet.hh" +#include "Timers.hh" @@ -42,18 +43,6 @@ namespace Carpet { - static int evolve_timer ; - static int do_terminate_timer ; - static int advance_time_timer ; - static int preregrid_timer ; - static int regrid_timer ; - static int postregrid_timer ; - static int evolution_i_timer ; - static int evolution_restrict_timer; - static int evolution_ii_timer ; - - - static bool do_terminate (const cGH *cgh, const CCTK_REAL time, const int iteration) { @@ -151,32 +140,32 @@ namespace Carpet { const int convlev = 0; cGH* cgh = fc->GH[convlev]; - // Create timers - evolve_timer = CCTK_TimerCreate ("Carpet::Evolve" ); - do_terminate_timer = CCTK_TimerCreate ("Carpet::do_terminate" ); - advance_time_timer = CCTK_TimerCreate ("Carpet::AdvanceTime" ); - preregrid_timer = CCTK_TimerCreate ("Carpet::PreRegrid" ); - regrid_timer = CCTK_TimerCreate ("Carpet::Regrid" ); - postregrid_timer = CCTK_TimerCreate ("Carpet::PostRegrid" ); - evolution_i_timer = CCTK_TimerCreate ("Carpet::EvolutionI" ); - evolution_restrict_timer = CCTK_TimerCreate ("Carpet::EvolutionRestrict"); - evolution_ii_timer = CCTK_TimerCreate ("Carpet::EvolutionII" ); + // Set up timers + static Timer evolve_timer (timerSet, "Evolve"); + static Timer do_terminate_timer (timerSet, "Evolve::do_terminate"); + static Timer advance_time_timer (timerSet, "Evolve::AdvanceTime"); + static Timer preregrid_timer (timerSet, "Evolve::PreRegrid"); + static Timer regrid_timer (timerSet, "Evolve::Regrid"); + static Timer postregrid_timer (timerSet, "Evolve::PostRegrid"); + static Timer evolution_i_timer (timerSet, "Evolve::EvolutionI"); + static Timer restrict_timer (timerSet, "Evolve::Restrict"); + static Timer evolution_ii_timer (timerSet, "Evolve::EvolutionII"); // Timing statistics InitTiming (cgh); // Main loop - CCTK_TimerStartI (evolve_timer); + evolve_timer.start(); for (;;) { - CCTK_TimerStartI (do_terminate_timer); + do_terminate_timer.start(); bool const do_term = do_terminate (cgh, cgh->cctk_time, cgh->cctk_iteration); - CCTK_TimerStopI (do_terminate_timer); + do_terminate_timer.stop(); if (do_term) break; - CCTK_TimerStartI (advance_time_timer); + advance_time_timer.start(); AdvanceTime( cgh, cctk_initial_time ); - CCTK_TimerStopI (advance_time_timer); + advance_time_timer.stop(); if ((cgh->cctk_iteration-1) % (maxtimereflevelfact / timereffacts.at(reflevels-1)) == 0) { @@ -184,31 +173,31 @@ namespace Carpet { cgh->cctk_iteration, (double)cgh->cctk_time); } - CCTK_TimerStartI (preregrid_timer); + preregrid_timer.start(); PreRegrid (cgh); - CCTK_TimerStopI (preregrid_timer); + preregrid_timer.stop(); - CCTK_TimerStartI (regrid_timer); + regrid_timer.start(); bool const did_regrid = Regrid (cgh); - CCTK_TimerStopI (regrid_timer); + regrid_timer.stop(); if (did_regrid) { - CCTK_TimerStartI (postregrid_timer); + postregrid_timer.start(); PostRegrid (cgh); - CCTK_TimerStopI (postregrid_timer); + postregrid_timer.stop(); } - CCTK_TimerStartI (evolution_i_timer); + evolution_i_timer.start(); EvolutionI (cgh); - CCTK_TimerStopI (evolution_i_timer); + evolution_i_timer.stop(); - CCTK_TimerStartI (evolution_restrict_timer); + restrict_timer.start(); Evolution_Restrict (cgh); - CCTK_TimerStopI (evolution_restrict_timer); + restrict_timer.stop(); - CCTK_TimerStartI (evolution_ii_timer); + evolution_ii_timer.start(); EvolutionII (cgh); - CCTK_TimerStopI (evolution_ii_timer); + evolution_ii_timer.stop(); if (output_internal_data) { CCTK_INFO ("Internal data dump:"); @@ -220,94 +209,17 @@ namespace Carpet { cout.precision (oldprecision); } + // Print timer values if ((cgh->cctk_iteration - 1) % (maxtimereflevelfact / timereffacts.at(reflevels - 1)) == 0 and output_timers_every > 0 and (cgh->cctk_iteration - 1) % output_timers_every == 0) { - // Print timer values - - int fdsave; - if (not CCTK_EQUALS (timer_file, "")) { -#ifndef HAVE_UNISTD_H - CCTK_WARN (1, "Cannot redirect timer output to a file; the operating system does not support this"); -#else // #ifdef HAVE_UNISTD_H - - int const myproc = CCTK_MyProc (cgh); - char filename [10000]; - Util_snprintf (filename, sizeof filename, - "%s/%s.%04d.txt", out_dir, timer_file, myproc); - - // append - int flags = O_WRONLY | O_CREAT | O_APPEND; - static bool first_time = true; - if (first_time) { - first_time = false; - if (IO_TruncateOutputFiles (cgh)) { - // truncate - flags = O_WRONLY | O_CREAT | O_TRUNC; - } - } - - // Temporarily redirect stdout - fflush (stdout); - fdsave = dup (1); // fd 1 is stdout - int const mode = 0644; // rw-r--r--, or a+r u+w - int const fdfile = open (filename, flags, mode); - if (fdfile < 0) - { - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Could not open timer output file \"%s\"", filename); - goto cleanup; - } - close (1); - dup (fdfile); // dup to 1, i.e., stdout again - close (fdfile); -#endif // #ifdef HAVE_UNISTD_H - } - - // Output the timers - printf ("Carpet Timing information at iteration %d time %g:\n", - cgh->cctk_iteration, (double) cgh->cctk_time); - CCTK_TimerStopI (evolve_timer); - CCTK_TimerPrintDataI (evolve_timer , -1); - CCTK_TimerPrintDataI (do_terminate_timer , -1); - CCTK_TimerPrintDataI (advance_time_timer , -1); - CCTK_TimerPrintDataI (preregrid_timer , -1); - CCTK_TimerPrintDataI (regrid_timer , -1); - CCTK_TimerPrintDataI (postregrid_timer , -1); - CCTK_TimerPrintDataI (evolution_i_timer , -1); - CCTK_TimerPrintDataI (evolution_restrict_timer, -1); - CCTK_TimerPrintDataI (evolution_ii_timer , -1); - CCTK_TimerStartI (evolve_timer); - printf ("\n********************************************************************************\n"); - - if (not CCTK_EQUALS (timer_file, "")) { -#ifdef HAVE_UNISTD_H - // Redirect stdout back - fflush (stdout); - close (1); - dup (fdsave); - cleanup: - close (fdsave); -#endif // #ifdef HAVE_UNISTD_H - } - - } // if timer output + timerSet.printData (cgh, timer_file); + } } // end main loop - CCTK_TimerStopI (evolve_timer); - - // Destroy timers - CCTK_TimerDestroyI (evolve_timer ); - CCTK_TimerDestroyI (do_terminate_timer ); - CCTK_TimerDestroyI (advance_time_timer ); - CCTK_TimerDestroyI (preregrid_timer ); - CCTK_TimerDestroyI (regrid_timer ); - CCTK_TimerDestroyI (postregrid_timer ); - CCTK_TimerDestroyI (evolution_i_timer ); - CCTK_TimerDestroyI (evolution_restrict_timer); - CCTK_TimerDestroyI (evolution_ii_timer ); + evolve_timer.stop(); Waypoint ("Done with evolution loop"); |