Added functions that are useful for tracing events on the communication thread in...
authorChao Mei <chaomei2@illinois.edu>
Thu, 28 Oct 2010 23:35:44 +0000 (18:35 -0500)
committerChao Mei <chaomei2@illinois.edu>
Thu, 28 Oct 2010 23:35:44 +0000 (18:35 -0500)
src/ck-perf/trace-common.C
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h
src/ck-perf/trace.h
src/conv-core/conv-trace.h

index 3d82948222c2ad198a9ae315e5950cc1b7f6e09f..b01252ba0a6017ff2875189e817d62d47cbae166 100644 (file)
@@ -662,4 +662,30 @@ void traceEndFuncIndexProj(int idx){
         _TRACE_ONLY(CkpvAccess(_traces)->endFunc(idx));
 }
 
+#if CMK_SMP_TRACE_COMMTHREAD
+extern "C"
+void traceBeginCommOp(char *msg){
+#if CMK_TRACE_ENABLED
+  if (CpvAccess(traceOn) && CkpvAccess(_traces))
+    CkpvAccess(_traces)->beginExecute((envelope *)msg);
+#endif
+}
+
+extern "C"
+void traceEndCommOp(char *msg){
+#if CMK_TRACE_ENABLED
+  if (CpvAccess(traceOn) && CkpvAccess(_traces))
+    CkpvAccess(_traces)->endExecute();
+#endif
+}
+#endif
+
+extern "C"
+void traceChangeLastTimestamp(double ts){
+#if CMK_TRACE_ENABLED
+  if (CpvAccess(traceOn) && CkpvAccess(_traces))
+    CkpvAccess(_traces)->changeLastEntryTimestamp(ts);
+#endif
+}
+
 /*@}*/
index 48b4c3caa5035bf920f454256e6ddf29d8538ee7..2c4e9ae8d7b471477da58ff2531c9848b1bcfe3e 100644 (file)
@@ -752,6 +752,12 @@ void LogPool::postProcessLog()
 #endif
 }
 
+void LogPool::modLastEntryTimestamp(double ts)
+{
+  pool[numEntries-1].time = ts;
+  //pool[numEntries-1].cputime = ts;
+}
+
 // /** Constructor for a multicast log entry */
 // 
 //  THIS WAS MOVED TO trace-projections.h with the other constructors
@@ -1116,6 +1122,12 @@ void TraceProjections::traceClose(void)
     CProxy_TraceProjectionsBOC bocProxy(traceProjectionsGID);
     bocProxy.traceProjectionsParallelShutdown(-1);
   }
+  if(CkMyRank() == CkMyNodeSize()){ //communication thread
+    CkpvAccess(_trace)->endComputation();
+    delete _logPool;              // will write
+    // remove myself from traceArray so that no tracing will be called.
+    CkpvAccess(_traces)->removeTrace(this);
+  }
 #else
   // we've already deleted the logpool, so multiple calls to traceClose
   // are tolerated.
@@ -1328,6 +1340,11 @@ void TraceProjections::beginExecute(int event, int msgType, int ep, int srcPe,
   beginExecuteLocal(event, msgType, ep, srcPe, mlen, idx);
 }
 
+void TraceProjections::changeLastEntryTimestamp(double ts)
+{
+  _logPool->modLastEntryTimestamp(ts);
+}
+
 void TraceProjections::beginExecuteLocal(int event, int msgType, int ep, int srcPe,
                                    int mlen, CmiObjId *idx)
 {
index 93ab8a0337d59c5c9a3854f2dc87582a111737a2..980fff1bce28ceed8b012a232f9d9d63a49656ad 100644 (file)
@@ -345,7 +345,7 @@ class LogPool {
     void setWriteData(bool b){
       writeData = b;
     }
-
+    void modLastEntryTimestamp(double ts);
 };
 
 /*
@@ -466,6 +466,7 @@ class TraceProjections : public Trace {
     void beginExecute(envelope *e);
     void beginExecute(CmiObjId  *tid);
     void beginExecute(int event,int msgType,int ep,int srcPe,int ml,CmiObjId *idx=NULL);
+    void changeLastEntryTimestamp(double ts);
     void beginExecuteLocal(int event,int msgType,int ep,int srcPe,int ml,CmiObjId *idx=NULL);
     void endExecute(void);
     void endExecuteLocal(void);
index 7ce7114c5b7095a1fa731877d99ced2943915579..12d3144d3c2d2c5d264fded4bc8d47d0da275083 100644 (file)
@@ -123,6 +123,7 @@ class Trace {
       int ml,      // message size
       CmiObjId* idx)    // index
     { }
+    virtual void changeLastEntryTimestamp(double ts) {}
     virtual void endExecute(void) {}
     // begin/end idle time for this pe
     virtual void beginIdle(double curWallTime) {}
@@ -225,6 +226,7 @@ public:
     inline void beginExecute(CmiObjId *tid) {ALLDO(beginExecute(tid));}
     inline void beginExecute(int event,int msgType,int ep,int srcPe, int mlen,CmiObjId *idx=NULL) {ALLDO(beginExecute(event, msgType, ep, srcPe, mlen,idx));}
     inline void endExecute(void) {ALLREVERSEDO(endExecute());}
+    inline void changeLastEntryTimestamp(double ts) {ALLDO(changeLastEntryTimestamp(ts));}
     inline void messageRecv(char *env, int pe) {ALLDO(messageRecv(env, pe));}
     inline void beginPack(void) {ALLDO(beginPack());}
     inline void endPack(void) {ALLDO(endPack());}
index bbbb1ac921a50dd9ad1768ac58f9f9997c5316ec..ffbb37b4c722b1274b67b0751d73a3673a18ee20 100644 (file)
@@ -35,6 +35,12 @@ int  traceRegisterUserEvent(const char*, int e
 #endif
 );
 
+#if CMK_SMP_TRACE_COMMTHREAD
+void traceBeginCommOp(char *msg);
+void traceEndCommOp(char *msg);
+#endif
+void traceChangeLastTimestamp(double ts);
+
 /* Support for machine layers to register their user events to projections */
 void registerMachineUserEventsFunction(void (*eventRegistrationFunc)());