added function (traceFlushLog) to be user callable function to voluntarily flush...
authorGengbin Zheng <gzheng@illinois.edu>
Sat, 17 Apr 2004 05:09:26 +0000 (05:09 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Sat, 17 Apr 2004 05:09:26 +0000 (05:09 +0000)
src/ck-perf/trace-common.C
src/ck-perf/trace-converse.c
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h
src/ck-perf/trace.h
src/ck-perf/tracef.C
src/ck-perf/tracef_f.f90

index 1cc9abd7b9c2a7f941812b8617fffc47329d2b0d..f12c442064ae912ab8073ff59916d38860924a82 100644 (file)
@@ -310,6 +310,13 @@ void traceWriteSts(void)
   CkpvAccess(_traces)->traceWriteSts();
 }
 
+extern "C"
+void traceFlushLog(void)
+{
+  OPTIMIZE_WARNING
+  CkpvAccess(_traces)->traceFlushLog();
+}
+
 /**
     traceClose:        this function is called at Converse
     traceCharmClose:   called at Charm++ level
index 4f2d739d7ea3beb3b0d1c22df3554c8f4750d694..920615d247b7929714d25ae049e34e55e2bb7caf 100644 (file)
@@ -36,6 +36,7 @@ void traceCharmClose(void) {}
 void traceBegin(void) {}
 void traceEnd(void) {}
 void traceWriteSts(void) {}
+void traceFlushLog(void) {}
 int  traceAvailable() {return 0;}
 void registerFunction(char *name){
 }
index 792dbc3815f9d77312c298f83289aa7d58a5ee5b..aab845a06940a53743e9b7dfe19f0dcbe514c5c5 100644 (file)
@@ -426,6 +426,18 @@ static void updateProjLog(void *data, double t, double recvT, void *ptr)
 }
 #endif
 
+// flush log entries to disk
+void LogPool::flushLogBuffer()
+{
+  if (numEntries) {
+    double writeTime = TraceTimer();
+    writeLog();
+    numEntries = 0;
+    new (&pool[numEntries++]) LogEntry(writeTime, BEGIN_INTERRUPT);
+    new (&pool[numEntries++]) LogEntry(TraceTimer(), END_INTERRUPT);
+  }
+}
+
 void LogPool::add(UChar type,UShort mIdx,UShort eIdx,double time,int event,
                  int pe, int ml, CmiObjId *id, double recvT, double cpuT, 
                  int numPap, int *pap_ids, LONG_LONG_PAPI *papVals) 
@@ -434,11 +446,7 @@ void LogPool::add(UChar type,UShort mIdx,UShort eIdx,double time,int event,
     LogEntry(time, type, mIdx, eIdx, event, pe, ml, id, recvT, cpuT, numPap,
             pap_ids, papVals);
   if(poolSize==numEntries) {
-    double writeTime = TraceTimer();
-    writeLog();
-    numEntries = 0;
-    new (&pool[numEntries++]) LogEntry(writeTime, BEGIN_INTERRUPT);
-    new (&pool[numEntries++]) LogEntry(TraceTimer(), END_INTERRUPT);
+    flushLogBuffer();
 #if CMK_BLUEGENE_CHARM
     extern int correctTimeLog;
     if (correctTimeLog) CmiAbort("I/O interrupt!\n");
@@ -464,15 +472,11 @@ void LogPool::add(UChar type,UShort mIdx,UShort eIdx,double time,int event,
 
 void LogPool::add(UChar type,double time,UShort funcID,int lineNum,char *fileName){
 #ifndef CMK_BLUEGENE_CHARM
-       new (&pool[numEntries++])
-               LogEntry(time,type,funcID,lineNum,fileName);
-       if(poolSize == numEntries){
-    double writeTime = TraceTimer();           
-               writeLog();
-               numEntries=0;
-               new (&pool[numEntries++]) LogEntry(writeTime, BEGIN_INTERRUPT);
-    new (&pool[numEntries++]) LogEntry(TraceTimer(), END_INTERRUPT);
-       }
+  new (&pool[numEntries++])
+       LogEntry(time,type,funcID,lineNum,fileName);
+  if(poolSize == numEntries){
+    flushLogBuffer();
+  }
 #endif 
 }
 
@@ -491,11 +495,7 @@ void LogPool::addCreationMulticast(UShort mIdx, UShort eIdx, double time,
   new (&pool[numEntries++])
     LogEntry(time, mIdx, eIdx, event, pe, ml, id, recvT, num, pelist);
   if(poolSize==numEntries) {
-    double writeTime = TraceTimer();
-    writeLog();
-    numEntries = 0;
-    new (&pool[numEntries++]) LogEntry(writeTime, BEGIN_INTERRUPT);
-    new (&pool[numEntries++]) LogEntry(TraceTimer(), END_INTERRUPT);
+    flushLogBuffer();
   }
 }
 
index a64c3d4cd733adb773a9ece4fd18d40b2e5767c3..e1985621ccfa4ec0f9dbd6c2e040fc16310a2e54 100644 (file)
@@ -150,6 +150,7 @@ class LogPool {
     void add(unsigned char type,unsigned short mIdx,unsigned short eIdx,double time,int event,int pe, int ml=0, CmiObjId* id=0, double recvT=0., double cpuT=0.0, int numPap=0, int *pap_ids=NULL, LONG_LONG_PAPI *papVals=NULL);
     void add(unsigned char type,double time,unsigned short funcID,int lineNum,char *fileName);
     void addCreationMulticast(unsigned short mIdx,unsigned short eIdx,double time,int event,int pe, int ml=0, CmiObjId* id=0, double recvT=0., int num=0, int *pelist=NULL);
+    void flushLogBuffer();
     void postProcessLog();
 };
 
@@ -219,8 +220,8 @@ class TraceProjections : public Trace {
     int inEntry;
     int computationStarted;
 
-               int funcCount;
-               CkHashtableT<StrKey,int> funcHashtable;
+    int funcCount;
+    CkHashtableT<StrKey,int> funcHashtable;
   public:
     TraceProjections(char **argv);
     void userEvent(int e);
@@ -250,6 +251,8 @@ class TraceProjections : public Trace {
     void traceClose();
     void traceBegin();
     void traceEnd();
+    void traceFlushLog() { _logPool->flushLogBuffer(); }
+
     //functions that perform function tracing
     CkHashtableIterator *getfuncIterator(){return funcHashtable.iterator();};
     int getFuncNumber(){return funcHashtable.numObjects();};
index 456bdb611abcef54c8133d3e81c6fc52ebe08298..3a3dfed349f44d26775155a74e2d0f3e268df109 100644 (file)
@@ -116,6 +116,8 @@ class Trace {
     virtual void traceWriteSts() {}
     // do any clean-up necessary for tracing
     virtual void traceClose() {}
+    // flush log buffer immediately
+    virtual void traceFlushLog() {}
 
     //for tracing function calls
     virtual void regFunc(char *name){}
@@ -188,6 +190,7 @@ public:
     inline void traceClearEps() {ALLDO(traceClearEps());}
     inline void traceWriteSts() {ALLDO(traceWriteSts());}
     inline void traceClose() {ALLDO(traceClose()); clearTrace();}
+    inline void traceFlushLog() {ALLDO(traceFlushLog());}
     
     // Tracing module registers *itself* for begin/end idle callbacks:
     inline void beginIdle(double curWallTime) {ALLDO(beginIdle(curWallTime));}
index 377d50571e9ff2da7e8edfaef776542555be9f11..3517011128ab9397c7a54094d231d22cd5f55b95 100644 (file)
@@ -23,6 +23,7 @@ FDECL {
 #define ftraceregisteruserevent  FTN_NAME(FTRACEREGISTERUSEREVENT, ftraceregisteruserevent)
 #define ftraceuserbracketevent   FTN_NAME(FTRACEUSERBRACKETEVENT, ftraceuserbracketevent)
 #define ftraceUserEvent         FTN_NAME(FTRACEUSEREVENT, ftraceuserevent)
+#define ftraceFlushLog          FTN_NAME(FTRACEFLUSHLOG, ftraceflushlog)
 
 void ftracebegin()
 {
@@ -69,5 +70,10 @@ void ftraceUserEvent(int *e)
   traceUserEvent(*e);
 }
 
+void ftraceFlushLog()
+{
+  traceFlushLog();
+}
+
 }  // FDECL
 
index beda46955649661a7dbeff7631879d8aedc3c50d..712db06e1c1d86141b65606ece56686f5bf4656b 100644 (file)
@@ -17,6 +17,8 @@
         subroutine ftraceUserEvent(ev)
           integer, intent(in) :: ev 
         end subroutine
+        subroutine ftraceFlushLog()
+        end subroutine
       end interface
       end module