handle nested events
authorGengbin Zheng <gzheng@illinois.edu>
Wed, 11 Jan 2012 15:43:31 +0000 (09:43 -0600)
committerGengbin Zheng <gzheng@illinois.edu>
Wed, 11 Jan 2012 15:43:31 +0000 (09:43 -0600)
src/ck-perf/trace-summary.C
src/ck-perf/trace-summary.h

index b76ca4ee9c41be74bc6a42c52b538d65d301c2e6..bd36fe84d28e4635f0f890ed28cd4704224b20b2 100644 (file)
@@ -657,6 +657,7 @@ TraceSummary::TraceSummary(char **argv):binStart(0.0),idleStart(0.0),
   execEp=INVALIDEP;
   inIdle = 0;
   inExec = 0;
+  depth = 0;
 }
 
 void TraceSummary::traceClearEps(void)
@@ -714,13 +715,22 @@ void TraceSummary::beginExecute(int event,int msgType,int ep,int srcPe, int mlen
   if (execEp == TRACEON_EP) {
     endExecute();
   }
-  CmiAssert(inIdle == 0 && inExec == 0);
-  inExec = 1;
+  CmiAssert(inIdle == 0);
+  if (inExec == 0) {
+    CmiAssert(depth == 0);
+    inExec = 1;
+  }
+  depth ++;
+  // printf("BEGIN exec: %d %d %d\n", inIdle, inExec, depth);
+
+  if (depth > 1) return;          //  nested
 
+/*
   if (execEp != INVALIDEP) {
     TRACE_WARN("Warning: TraceSummary two consecutive BEGIN_PROCESSING!\n");
     return;
   }
+*/
   
   execEp=ep;
   double t = TraceTimer();
@@ -748,10 +758,15 @@ void TraceSummary::beginExecute(int event,int msgType,int ep,int srcPe, int mlen
   }
 }
 
-void TraceSummary::endExecute(void)
+void TraceSummary::endExecute()
 {
   CmiAssert(inIdle == 0 && inExec == 1);
-  inExec = 0;
+  depth --;
+  if (depth == 0) inExec = 0;
+  CmiAssert(depth >= 0);
+  // printf("END exec: %d %d %d\n", inIdle, inExec, depth);
+
+  if (depth != 0) return;
  
   double t = TraceTimer();
   double ts = start;
@@ -815,6 +830,8 @@ void TraceSummary::beginIdle(double currT)
 
   CmiAssert(inIdle == 0 && inExec == 0);
   inIdle = 1;
+  //printf("BEGIN idle: %d %d %d\n", inIdle, inExec, depth);
+
   double t = TraceTimer(currT);
   
   // mark the time of this idle period. Only the next endIdle should see
@@ -834,6 +851,8 @@ void TraceSummary::endIdle(double currT)
 {
   CmiAssert(inIdle == 1 && inExec == 0);
   inIdle = 0;
+  // printf("END idle: %d %d %d\n", inIdle, inExec, depth);
+
   double t = TraceTimer(currT);
   double t_idleStart = idleStart;
   double t_binStart = binStart;
index fe05343372124dc10d7f4a7ec73c0fecc6b9f34b..d964a6ac5b3e4f5aadd6a20b3c6c4865eb730eef 100644 (file)
@@ -265,6 +265,7 @@ class TraceSummary : public Trace {
     int msgNum; /* used to handle multiple endComputation calls?? */
     int inIdle;
     int inExec;
+    int depth;
   public:
     TraceSummary(char **argv);
     void creation(envelope *e, int epIdx, int num=1) {}