Enabled tracing of userevents in projector
authorSayantan Chakravorty <sayantan_chak@yahoo.com>
Sat, 4 Jan 2003 23:02:39 +0000 (23:02 +0000)
committerSayantan Chakravorty <sayantan_chak@yahoo.com>
Sat, 4 Jan 2003 23:02:39 +0000 (23:02 +0000)
src/conv-perf/charmEvents.h
src/conv-perf/charmProjections.C
src/conv-perf/charmProjections.h
src/conv-perf/traceCore.C
src/conv-perf/traceCore.h
src/conv-perf/traceCoreAPI.h
src/conv-perf/traceCoreCommon.C

index f881d729c307f22cb51ea6eeaedcc14c8a69c4a4..83e202239b87a73f2ee5dee337565f0d61525746 100644 (file)
@@ -25,6 +25,8 @@
 #define  _E_BEGIN_UNPACK        18
 #define  _E_END_UNPACK          19
 
+#define  _E_USER_EVENT_PAIR    100
+
 /* Trace Macros */
 #define REGISTER_CHARM \
        { RegisterLanguage(_CHARM_LANG_ID, "charm\0"); \
@@ -43,6 +45,7 @@
          RegisterEvent(_CHARM_LANG_ID, _E_END_PACK         ); \
          RegisterEvent(_CHARM_LANG_ID, _E_BEGIN_UNPACK     ); \
          RegisterEvent(_CHARM_LANG_ID, _E_END_UNPACK       ); \
+         RegisterEvent(_CHARM_LANG_ID, _E_USER_EVENT_PAIR  ); \
          \
        }
 #define _LOG_E_CREATION_1(env)                 { charm_creation(env); }
@@ -69,5 +72,5 @@
 #define _LOG_E_END_PACK()                              { charm_endPack(); }
 #define _LOG_E_BEGIN_UNPACK()                  { charm_beginUnpack(); }
 #define _LOG_E_END_UNPACK()                    { charm_endUnpack(); }
-
+#define _LOG_E_USER_EVENT_PAIR_CHARM(x,bt,et)  { charm_userPairEvent(x,bt,et);}
 #endif
index 79eac41de22188db1ff9651dc07508a565169645..c86afe946b4d5e2ab7c0f20ff349e81881eae4a9 100644 (file)
@@ -16,6 +16,7 @@ static int curEvent;
 static int execEvent;
 static int execEp;
 static int execPe;
+static int curevent=0;
 
 extern "C" void initCharmProjections() 
 {
@@ -142,7 +143,27 @@ extern "C" void charm_endComputation(void)
 
 extern "C" void charm_messageRecv(char *env, int pe) {} //TODO
 
-extern "C" void charm_userEvent(int e) {}      //TODO
+extern "C" void charm_userEvent(int e) {
+       int *iData = (int *)malloc(sizeof(int)*3);
+       iData[0] = e;
+       iData[1] = curevent;
+       iData[2] = CkMyPe();
+       curevent++;
+       LogEvent1(_CHARM_LANG_ID, _E_USER_EVENT_CHARM,3,iData);
+}      
+
+
+extern "C" void charm_userPairEvent(int e,double bt,double et){
+       int *iData1 = (int *)malloc(sizeof(int)*3);
+       int *iData2 = (int *)malloc(sizeof(int)*3);
+       iData1[0] = iData2[0] = e;
+       iData1[1] = iData2[1] = curevent;
+       iData1[2] = iData2[2] = CkMyPe();
+       curevent++;
+       LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData1,bt);
+       LogEvent4(_CHARM_LANG_ID, _E_USER_EVENT_PAIR,3,iData2,et);
+       
+}
 
 extern "C" void charm_beginPack(void)
 {
index 51ca40f26fea7c7335f19a98bb2a862fb9ae99fc..20fde80e9bbe41327439f30396ee63ba52384e6a 100644 (file)
@@ -21,6 +21,7 @@ void charm_beginComputation(void);
 void charm_endComputation(void);
 void charm_messageRecv(char *env, int pe);
 void charm_userEvent(int e);
+void charm_userPairEvent(int e,double bt,double et);
 void charm_beginPack(void);
 void charm_endPack(void);
 void charm_beginUnpack(void);
index 9ce7a600aa582346d0c5dd0e74758f35f5e6bcd5..4cd8cdfc48832ec661ccd5cebff7a2626b6e7bd1 100644 (file)
@@ -22,6 +22,7 @@ CpvStaticDeclare(int ,staticNumEntries);
 /* Trace Timer */
 #define  TRACE_CORE_TIMER   CmiWallTimer
 inline double TraceCoreTimer() { return TRACE_CORE_TIMER() - CpvAccess(_traceCoreInitTime); }
+inline double TraceCoreTimer(double t) { return t - CpvAccess(_traceCoreInitTime); }
 
 /***************** Class TraceCore Definition *****************/
 TraceCore::TraceCore(char** argv)
@@ -173,6 +174,16 @@ void TraceCore::LogEvent(int lID, int eID, int iLen, int* iData)
        LogEvent(lID, eID, iLen, iData, 0, NULL); 
 }
 
+void TraceCore::LogEvent(int lID, int eID, int iLen, int* iData,double t){
+       if(traceCoreOn == 0){
+               return;
+       }
+#ifndef CMK_OPTIMIZE   
+       traceLogger->add(lID,eID,TraceCoreTimer(t),iLen,iData,0,NULL);
+#endif
+}
+
+
 void TraceCore::LogEvent(int lID, int eID, int sLen, char* sData)
 { 
        if(traceCoreOn == 0){
@@ -187,15 +198,7 @@ void TraceCore::LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char*
        if(traceCoreOn == 0){
                return;
        }
-       if(iData != NULL) {
-       //      CmiPrintf(" iData(%d): ",iLen);
-               for(int i=0; i<iLen; i++) { //CmiPrintf("%d ", iData[i]);
-               }
-       }
-       if(sData != NULL) {
-//             CmiPrintf("sData: %s", sData);
-       }
-//     CmiPrintf("\n");
+       
 
 #ifndef CMK_OPTIMIZE
        traceLogger->add(lID, eID, TraceCoreTimer(), iLen, iData, sLen, sData);
@@ -249,11 +252,11 @@ void TraceEntry::write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nex
        else fprintf(fp, "\n");
 
        // free memory
-/*     if(entity) delete [] entity;
+       if(entity) delete [] entity;
        //entity = NULL;
        if(iData)  delete [] iData;
        //iData = NULL;
-       if(sData)  delete [] sData;*/
+       if(sData)  delete [] sData;
        //sData=NULL;
 }
 
@@ -275,6 +278,8 @@ TraceLogger::TraceLogger(char* program, int b):
   pgm = new char[strlen(program)+1];
   sprintf(pgm, "%s", program);
   numEntries = 0;
+  isWriting = 0;
+  buffer = NULL;
 
   //CmiPrintf("In TraceLogger Constructor %s %d",pgm,strlen(program)+1);
   //initlogfiles();
@@ -391,27 +396,32 @@ void TraceLogger::writeSts(void) {};
 
 void TraceLogger::add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData)
 {
-  
+  if(isWriting){
+       //  CmiPrintf("Printing in buffer \n");
+         buffer = new TraceEntry(lID, eID, timestamp, iLen, iData, sLen, sData);
+  }else{
   new (&pool[CpvAccess(staticNumEntries)]) TraceEntry(lID, eID, timestamp, iLen, iData, sLen, sData);
   CpvAccess(staticNumEntries) = CpvAccess(staticNumEntries)+1;
 if(CpvAccess(staticNumEntries)>= poolSize) {
-  //  if(numEntries>= poolSize) {
     double writeTime = TraceCoreTimer();
-
+    isWriting = 1;
     if(binary) writeBinary();
        else       write();
+    isWriting = 0;
 
-       // move the last entry of pool to first position
- /*   for(int i=0;i<numEntries;i++){
-           delete pool[i];
-    }*/
     new (&pool[0]) TraceEntry(pool[CpvAccess(staticNumEntries)-1]);
     //numEntries = 1;
     CpvAccess(staticNumEntries)=1;
+    if(buffer != NULL){
+           new (&pool[1]) TraceEntry(*buffer);
+           CpvAccess(staticNumEntries)=2;
+           buffer = NULL;
+    }
        //TODO
     //new (&pool[numEntries++]) TraceEntry(0, BEGIN_INTERRUPT, writeTime);
     //new (&pool[numEntries++]) TraceEntry(0, END_INTERRUPT, TraceCoreTimer());
   }
+ }
 }
 
 void TraceLogger::openLogFiles()
index 8b72d0e77f8b013c2297710d7b60abb2142cb90a..fdeb1603d24d84fd2c7c5e4733c5143916b116ed 100644 (file)
@@ -51,6 +51,7 @@ class TraceCore
        void RegisterEvent(int lID, int eID);
        void LogEvent(int lID, int eID);
        void LogEvent(int lID, int eID, int iLen, int* iData);
+       void LogEvent(int lID, int eID, int iLen, int* iData,double t);
        void LogEvent(int lID, int eID, int sLen, char* sData);
        void LogEvent(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
 
@@ -97,6 +98,7 @@ class TraceLogger
     int poolSize;
     int numEntries;
     TraceEntry *pool;
+    TraceEntry *buffer;
 
        int   numLangs;
  char *lName[MAX_NUM_LANGUAGES];               // Language Name
@@ -107,6 +109,7 @@ class TraceLogger
 
        int lastWriteFlag;              // set when writing log to file at end of program
        int prevLID, prevSeek;  // for writing logs to file
+       int isWriting;
 
   public:
     TraceLogger(char* program, int b);
index 0f832734ab638d8d740346e10203aba541af0870..d029a2442075f548939b4ec06b0889db89c0196d 100644 (file)
@@ -14,7 +14,7 @@ void LogEvent(int lID, int eID);
 void LogEvent1(int lID, int eID, int iLen, int* iData);
 void LogEvent2(int lID, int eID, int sLen, char* sData);
 void LogEvent3(int lID, int eID, int iLen, int* iData, int sLen, char* sData);
-
+void LogEvent4(int lID, int eID, int iLen, int* iData, double t);
 #ifdef __cplusplus
 }
 #endif
index a54a997795a0f2466d67019f7914e5410eda63c0..a5f65ef4449d23c047f0ee2825ebd385d8764292 100644 (file)
@@ -89,5 +89,6 @@ extern "C" void LogEvent2(int lID, int eID, int sLen, char* sData)
 extern "C" void LogEvent3(int lID, int eID, int iLen, int* iData, int sLen, char* sData)
 { CpvAccess(_traceCore)->LogEvent(lID, eID, iLen, iData, sLen, sData); }
 
-
+extern "C" void LogEvent4(int lID, int eID, int iLen, int* iData, double t)
+{ CpvAccess(_traceCore)->LogEvent(lID, eID, iLen, iData,t); }