diff options
author | eschnett <eschnett@d0051148-8e13-4bef-be1d-f6c572c85f9f> | 2011-03-30 19:22:41 +0000 |
---|---|---|
committer | eschnett <eschnett@d0051148-8e13-4bef-be1d-f6c572c85f9f> | 2011-03-30 19:22:41 +0000 |
commit | 9895833fa0f517aaacce17e6be71e1ca0f0fdead (patch) | |
tree | e6824dcf12d82f3b74034f55cfe79ac3eaa7fd01 | |
parent | 2ccd7dd110be6b9742798549c104ecf948a8988b (diff) |
TimerReport requires that all timers exist on all processes. If there
is an inconsistency, TimerReport aborts with an error. This patch
improves the error message by including the number of timers as well,
so that one sees which process is in error.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusUtils/TimerReport/trunk@39 d0051148-8e13-4bef-be1d-f6c572c85f9f
-rw-r--r-- | src/Output.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/Output.c b/src/Output.c index c69f415..5f734f6 100644 --- a/src/Output.c +++ b/src/Output.c @@ -617,7 +617,10 @@ static void PrintTopTimers (CCTK_ARGUMENTS) return; } -static int integer_same_on_all_procs(cGH const * restrict const cctkGH, const CCTK_INT i) +static int integer_same_on_all_procs(cGH const * restrict const cctkGH, + const CCTK_INT i, + CCTK_INT* restrict const iminp, + CCTK_INT* restrict const imaxp) { /* There is no "equals" reduction operator, so we check that * minimum and maximum are the same */ @@ -633,6 +636,8 @@ static int integer_same_on_all_procs(cGH const * restrict const cctkGH, const CC if (CCTK_ReduceLocScalar(cctkGH, -1 /* All processors */, reduce_max, &i, &max_i, CCTK_VARIABLE_INT)) CCTK_WARN (CCTK_WARN_ABORT, "Error in calling max reduction operator"); + if (iminp) *iminp = min_i; + if (imaxp) *imaxp = max_i; return min_i == max_i; } @@ -649,11 +654,12 @@ static int CollectTimerInfo (cGH const * restrict const cctkGH, assert (timers->ntimers >= 0); /* Check that the number of timers is consistent across processors */ - if (!integer_same_on_all_procs(cctkGH, timers->ntimers)) + CCTK_INT imin, imax; + if (!integer_same_on_all_procs(cctkGH, timers->ntimers, &imin, &imax)) { CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Number of timers is inconsistent across processes; cannot collect timer information. Number of timers on processor %d: %d", - CCTK_MyProc(cctkGH), timers->ntimers); + "Number of timers is inconsistent across processes; cannot collect timer information. Number of timers on processor %d: %d; overall minimum: %d; overall maximum: %d", + CCTK_MyProc(cctkGH), timers->ntimers, (int)imin, (int)imax); return 0; } |