From a25a25c8879108ad1e7935a56114b62f72a44a39 Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Mon, 17 Apr 2017 17:02:18 +0100 Subject: [PATCH] Re-enabled individual task timers. --- README | 1 + examples/main.c | 25 +++++++++++++++++++++++-- src/timers.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/timers.h | 10 +++++++++- 4 files changed, 80 insertions(+), 3 deletions(-) diff --git a/README b/README index bec538bfc3..6e2b2cb230 100644 --- a/README +++ b/README @@ -31,6 +31,7 @@ Valid options are: -s Run with hydrodynamics. -S Run with stars. -t {int} The number of threads to use on each MPI rank. Defaults to 1 if not specified. + -T Print timers every time-step. -v [12] Increase the level of verbosity 1: MPI-rank 0 writes 2: All MPI-ranks write diff --git a/examples/main.c b/examples/main.c index 2b741f75b2..5f42f3e06e 100644 --- a/examples/main.c +++ b/examples/main.c @@ -90,6 +90,7 @@ void print_help_message() { printf(" %2s %8s %s\n", "-t", "{int}", "The number of threads to use on each MPI rank. Defaults to 1 if not " "specified."); + printf(" %2s %8s %s\n", "-T", "", "Print timers every time-step."); printf(" %2s %8s %s\n", "-v", "[12]", "Increase the level of verbosity."); printf(" %2s %8s %s\n", "", "", "1: MPI-rank 0 writes "); printf(" %2s %8s %s\n", "", "", "2: All MPI-ranks write"); @@ -165,12 +166,13 @@ int main(int argc, char *argv[]) { int with_drift_all = 0; int verbose = 0; int nr_threads = 1; + int with_verbose_timers = 0; char paramFileName[200] = ""; unsigned long long cpufreq = 0; /* Parse the parameters */ int c; - while ((c = getopt(argc, argv, "acCdDef:FgGhn:sSt:v:y:")) != -1) switch (c) { + while ((c = getopt(argc, argv, "acCdDef:FgGhn:sSt:Tv:y:")) != -1) switch (c) { case 'a': with_aff = 1; break; @@ -229,6 +231,9 @@ int main(int argc, char *argv[]) { return 1; } break; + case 'T': + with_verbose_timers = 1; + break; case 'v': if (sscanf(optarg, "%d", &verbose) != 1) { if (myrank == 0) printf("Error parsing verbosity level (-v).\n"); @@ -596,11 +601,18 @@ int main(int argc, char *argv[]) { engine_dump_snapshot(&e); /* Legend */ - if (myrank == 0) + if (myrank == 0) { printf("# %6s %14s %14s %10s %10s %10s %16s [%s]\n", "Step", "Time", "Time-step", "Updates", "g-Updates", "s-Updates", "Wall-clock time", clocks_getunit()); + if (with_verbose_timers) { + printf("timers: "); + for (int k = 0; k < timer_count; k++) printf("%s\t", timers_names[k]); + printf("\n"); + } + } + /* Main simulation loop */ for (int j = 0; !engine_is_done(&e) && e.step - 1 != nsteps; j++) { @@ -610,6 +622,15 @@ int main(int argc, char *argv[]) { /* Take a step. */ engine_step(&e); + /* Print the timers. */ + if (with_verbose_timers) { + printf("timers: "); + for (int k = 0; k < timer_count; k++) + printf("%.3f\t", clocks_from_ticks(timers[k])); + printf("\n"); + timers_reset(0xFFFFFFFFllu); + } + #ifdef SWIFT_DEBUG_TASKS /* Dump the task data using the given frequency. */ if (dump_tasks && (dump_tasks == 1 || j % dump_tasks == 1)) { diff --git a/src/timers.c b/src/timers.c index c2f3b35d75..9b6b32251d 100644 --- a/src/timers.c +++ b/src/timers.c @@ -29,6 +29,53 @@ /* The timers. */ ticks timers[timer_count]; +/* Timer names. */ +char *timers_names[timer_count] = { + "none", + "prepare", + "init", + "drift", + "kick1", + "kick2", + "timestep", + "endforce", + "dosort", + "doself_density", + "doself_gradient", + "doself_force", + "doself_grav_pp", + "dopair_density", + "dopair_gradient", + "dopair_force", + "dopair_grav_pm", + "dopair_grav_mm", + "dopair_grav_pp", + "dograv_external", + "dograv_down", + "dograv_long_range", + "dosource", + "dosub_self_density", + "dosub_self_gradient", + "dosub_self_force", + "dosub_self_grav", + "dosub_pair_density", + "dosub_pair_gradient", + "dosub_pair_force", + "dosub_pair_grav", + "dopair_subset", + "do_ghost", + "do_extra_ghost", + "dorecv_part", + "dorecv_gpart", + "dorecv_spart", + "gettask", + "qget", + "qsteal", + "runners", + "step", + "do_cooling", +}; + /** * @brief Re-set the timers. * diff --git a/src/timers.h b/src/timers.h index 39bcf30fba..d4bfedaa0a 100644 --- a/src/timers.h +++ b/src/timers.h @@ -27,7 +27,12 @@ #include "cycle.h" #include "inline.h" -/* The timers themselves. */ +/** + * @brief The timers themselves. + * + * If you modify this list, be sure to change timers_names in timers.c as + * well! + **/ enum { timer_none = 0, timer_prepare, @@ -78,6 +83,9 @@ enum { /* The timers. */ extern ticks timers[timer_count]; +/* The timer names. */ +extern char *timers_names[]; + /* Mask for all timers. */ #define timers_mask_all ((1ull << timer_count) - 1) -- GitLab