Adding support for user defined strings that can be noted. These are basically user...
authorIsaac Dooley <idooley2@illinois.edu>
Thu, 18 Dec 2008 22:17:30 +0000 (22:17 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Thu, 18 Dec 2008 22:17:30 +0000 (22:17 +0000)
src/ck-perf/trace-common.C
src/ck-perf/trace-common.h
src/ck-perf/trace-controlPoints.C
src/ck-perf/trace-controlPoints.h
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h
src/ck-perf/trace.h

index a7568141b81dbb4270dbd7592f309da205b00de8..64d661fb2d2cfd2dc0f487235d5537da10285262 100644 (file)
@@ -382,6 +382,15 @@ void traceUserSuppliedData(int d)
 #endif
 }
 
+extern "C"
+void traceUserSuppliedNote(char * note)
+{
+#ifndef CMK_OPTIMIZE
+  if (CpvAccess(traceOn) && CkpvAccess(_traces))
+    CkpvAccess(_traces)->userSuppliedNote(note);
+#endif
+}
+
 extern "C"
 void traceMemoryUsage()
 {
index 56774dda9f201e6cf8c5e075c0119a23f5091304..b11f065fade0d2e8fc4590352066e047742bb922 100644 (file)
 /* Trace memory usage */
 #define MEMORY_USAGE_CURRENT       27
 
+/* Trace user supplied note (text string)  */
+#define USER_SUPPLIED_NOTE       28
+
+
+
+
 #define  USER_EVENT_PAIR    100
 
 CkpvExtern(int, CtrLogBufSize);
index ab18e567e1be576861a3099e2d54733af9e23e92..776eb320f7df42e2a2778a2b4d5b77321a13f801 100644 (file)
@@ -2,6 +2,13 @@
 #include "trace-controlPoints.h"
 #include "trace-controlPointsBOC.h"
 
+
+/**
+ *   \addtogroup ControlPointFramework
+ *   @{
+ */
+
+
 // Charm++ "processor"(user thread)-private global variable
 CkpvStaticDeclare(TraceControlPoints*, _trace);
 
index 7671a9e59995f9559e824517f40d7f132ab82148..e27cc67458d4d9dc0cba5b3dcb3e4e9870756b20 100644 (file)
 #include "trace-common.h"
 
 /**
- *  TraceControlPoints is a template for an instrumentation module making use of
- *    the tracing framework hooks provided in Charm++.
+ *   \addtogroup ControlPointFramework
+ *   @{
+ */
+
+
+/**
+ *    An instrumentation module making use of
+ *    the tracing framework hooks provided in Charm++. It is used 
+ *    by the control point framework to monitor idle time.
  *
  *  Only the more common hooks are listened to in this module.
  */
@@ -98,6 +105,6 @@ class TraceControlPoints : public Trace {
 TraceControlPoints *localControlPointTracingInstance();
 
 
+/*! @} */
 #endif
 
-/*@}*/
index e5c94fdd155f4372ee1aa306974a47c32d705e78..5589fc6878cf6b63a69473242f54cc86217efe49 100644 (file)
@@ -598,6 +598,17 @@ void LogPool::addUserSupplied(int data){
        pool[numEntries-1].setUserSuppliedData(data);
   }
 
+
+void LogPool::addUserSuppliedNote(char *note){
+       // add an event
+       add(USER_SUPPLIED_NOTE, 0, 0, TraceTimer(), -1, -1, 0, 0, 0, 0, 0 );
+
+       // set the user supplied note for the previously created event 
+       pool[numEntries-1].setUserSuppliedNote(note);
+  }
+
+
+
 /* **CW** Not sure if this is the right thing to do. Feels more like
    a hack than a solution to Sameer's request to add the destination
    processor information to multicasts and broadcasts.
@@ -624,23 +635,27 @@ void LogPool::postProcessLog()
 #endif
 }
 
-/** Constructor for a multicast log entry */
-LogEntry::LogEntry(double tm, unsigned short m, unsigned short e, int ev, int p,
-            int ml, CmiObjId *d, double rt, int numPe, int *pelist) 
-{
-    type = CREATION_MULTICAST; mIdx = m; eIdx = e; event = ev; pe = p; time = tm; msglen = ml;
-    if (d) id = *d; else {id.id[0]=id.id[1]=id.id[2]=id.id[3]=-1; };
-    recvTime = rt; 
-    numpes = numPe;
-    if (pelist != NULL) {
-       pes = new int[numPe];
-       for (int i=0; i<numPe; i++) {
-         pes[i] = pelist[i];
-       }
-    } else {
-       pes= NULL;
-    }
-}
+// /** Constructor for a multicast log entry */
+// 
+//  THIS WAS MOVED TO trace-projections.h with the other constructors
+// 
+// LogEntry::LogEntry(double tm, unsigned short m, unsigned short e, int ev, int p,
+//          int ml, CmiObjId *d, double rt, int numPe, int *pelist) 
+// {
+//     type = CREATION_MULTICAST; mIdx = m; eIdx = e; event = ev; pe = p; time = tm; msglen = ml;
+//     if (d) id = *d; else {id.id[0]=id.id[1]=id.id[2]=id.id[3]=-1; };
+//     recvTime = rt; 
+//     numpes = numPe;
+//     userSuppliedNote = NULL;
+//     if (pelist != NULL) {
+//     pes = new int[numPe];
+//     for (int i=0; i<numPe; i++) {
+//       pes[i] = pelist[i];
+//     }
+//     } else {
+//     pes= NULL;
+//     }
+// }
 
 void LogEntry::addPapi(int numPapiEvts, int *papi_ids, LONG_LONG_PAPI *papiVals)
 {
@@ -724,6 +739,20 @@ void LogEntry::pup(PUP::er &p)
          p|userSuppliedData;
          p|itime;
        break;
+    case USER_SUPPLIED_NOTE:
+         p|itime;
+         int length;
+         if (p.isPacking()) length = strlen(userSuppliedNote);
+          p | length;
+         char space;
+         space = ' ';
+          p | space;
+         if (p.isUnpacking()) {
+           userSuppliedNote = new char[length+1];
+           userSuppliedNote[length] = '\0';
+         }
+         PUParray(p,userSuppliedNote, length);
+         break;
     case MEMORY_USAGE_CURRENT:
       p | memUsage;
       p | itime;
@@ -992,6 +1021,12 @@ void TraceProjections::userSuppliedData(int d)
   _logPool->addUserSupplied(d);
 }
 
+void TraceProjections::userSuppliedNote(char *note)
+{
+  if (!computationStarted) return;
+  _logPool->addUserSuppliedNote(note);
+}
+
 void TraceProjections::memoryUsage(double m)
 {
   if (!computationStarted) return;
index eb03fb1ab02c0a4d675a3aab4f90392c7fcab378..b385b10eecc50d371331a0e34e5513376291b3af 100644 (file)
 #include <unistd.h>
 
 #include "trace.h"
+#include "trace-common.h"
 #include "ckhashtable.h"
 
+
+
 #if CMK_HAS_COUNTER_PAPI
 #include <papi.h>
 #endif
@@ -55,8 +58,9 @@ class LogEntry {
     CmiObjId   id;
     int numpes;
     int *pes;
-       int userSuppliedData;
-       unsigned long memUsage;
+    int userSuppliedData;
+    char *userSuppliedNote;
+    unsigned long memUsage;
 
     // this is taken out so as to provide a placeholder value for non-PAPI
     // versions (whose value is *always* zero).
@@ -68,8 +72,13 @@ class LogEntry {
     unsigned char type; 
     char *fName;
     int flen;
+
   public:
-    LogEntry() {fName=NULL;flen=0;pes=NULL;numpes=0;}
+    
+    LogEntry() {
+      fName=NULL;flen=0;pes=NULL;numpes=0;userSuppliedNote = NULL;
+    }
+
     LogEntry(double tm, unsigned char t, unsigned short m=0, 
             unsigned short e=0, int ev=0, int p=0, int ml=0, 
             CmiObjId *d=NULL, double rt=0., double cputm=0., int numPe=0) {
@@ -79,20 +88,82 @@ class LogEntry {
       recvTime = rt; cputime = cputm;
       // initialize for papi as well as non papi versions.
       numPapiEvents = 0;
+      userSuppliedNote = NULL;
 #if CMK_HAS_COUNTER_PAPI
       papiIDs = NULL;
       papiValues = NULL;
 #endif
-      fName = NULL; flen=0;
+      fName = NULL;
+      flen=0;
       pes=NULL;
       numpes=numPe;
     }
+
     LogEntry(double _time,unsigned char _type,unsigned short _funcID,
             int _lineNum,char *_fileName){
       time = _time;
       type = _type;
       mIdx = _funcID;
       event = _lineNum;
+      userSuppliedNote = NULL;      
+      pes=NULL;
+      numpes=0;
+      setFName(_fileName);
+    }
+
+    // Constructor for User Supplied Data
+    LogEntry(double _time,unsigned char _type, int value,
+            int _lineNum,char *_fileName){
+      time = _time;
+      type = _type;
+      userSuppliedData = value;
+      userSuppliedNote = NULL;
+      pes=NULL;
+      numpes=0;
+      setFName(_fileName);
+    }
+
+    // Constructor for User Supplied Data
+    LogEntry(double _time,unsigned char _type, char* note,
+            int _lineNum,char *_fileName){
+      time = _time;
+      type = _type;
+      pes=NULL;
+      numpes=0;
+      setFName(_fileName);
+      if(note != NULL)
+       setUserSuppliedNote(note);
+    }
+
+    // Constructor for multicast data
+    LogEntry(double tm, unsigned short m, unsigned short e, int ev, int p,
+            int ml, CmiObjId *d, double rt, int numPe, int *pelist){
+
+      type = CREATION_MULTICAST; 
+      mIdx = m; 
+      eIdx = e; 
+      event = ev; 
+      pe = p; 
+      time = tm; 
+      msglen = ml;
+      
+      if (d) id = *d; else {id.id[0]=id.id[1]=id.id[2]=id.id[3]=-1; };
+      recvTime = rt; 
+      numpes = numPe;
+      userSuppliedNote = NULL;
+      if (pelist != NULL) {
+       pes = new int[numPe];
+       for (int i=0; i<numPe; i++) {
+         pes[i] = pelist[i];
+       }
+      } else {
+       pes= NULL;
+      }
+
+    }
+
+
+    void setFName(char *_fileName){
       if(_fileName == NULL){
        fName = NULL;
        flen = 0;
@@ -102,46 +173,41 @@ class LogEntry {
        memcpy(fName+1,_fileName,strlen(_fileName)+1);
        flen = strlen(fName)+1;
       }        
-      pes=NULL;numpes=0;
     }
 
-       // Constructor for User Supplied Data
-       LogEntry(double _time,unsigned char _type, int value,
-            int _lineNum,char *_fileName){
-      time = _time;
-      type = _type;
-      userSuppliedData = value;
-      if(_fileName == NULL){
-               fName = NULL;
-               flen = 0;
-      }else{
-               fName = new char[strlen(_fileName)+2];
-               fName[0] = ' ';
-               memcpy(fName+1,_fileName,strlen(_fileName)+1);
-               flen = strlen(fName)+1;
-      }        
-      pes=NULL;numpes=0;
-    }
 
-    // **CW** new constructor for multicast data
-    LogEntry(double tm, unsigned short m, unsigned short e, int ev, int p,
-            int ml, CmiObjId *d, double rt, int numPe, int *pelist);
+
     // complementary function for adding papi data
     void addPapi( int numPapiEvts, int *papi_ids, LONG_LONG_PAPI *papiVals);
-       void setUserSuppliedData(int data){
-         userSuppliedData = data;
-       }
+   
+    void setUserSuppliedData(int data){
+      userSuppliedData = data;
+    }
+
+    void setUserSuppliedNote(char *note){
 
-       /// A constructor for a memory usage record
-       LogEntry(unsigned char _type, double _time, long _memUsage) {
-           time = _time;
-               type = _type;
-               memUsage = _memUsage;
-               fName = NULL;
-               flen = 0;
-               pes=NULL;
-               numpes=0;
+      int length = strlen(note)+1;
+      userSuppliedNote = new char[length];
+      memcpy(userSuppliedNote,note,length);
+      for(int i=0;i<length;i++){
+       if(userSuppliedNote[i] == '\n' || userSuppliedNote[i] == '\r'){
+         userSuppliedNote[i] = ' ';
        }
+      }
+         
+    }
+       
+
+    /// A constructor for a memory usage record
+    LogEntry(unsigned char _type, double _time, long _memUsage) {
+      time = _time;
+      type = _type;
+      memUsage = _memUsage;
+      fName = NULL;
+      flen = 0;
+      pes=NULL;
+      numpes=0;
+    }
 
 
     void *operator new(size_t s) {void*ret=malloc(s);_MEMCHECK(ret);return ret;}
@@ -153,6 +219,7 @@ class LogEntry {
     void pup(PUP::er &p);
     ~LogEntry(){
       if (fName) delete [] fName;
+      if (userSuppliedNote) delete [] userSuppliedNote;
     }
 };
 
@@ -222,6 +289,10 @@ class LogPool {
        /** add a record for a user supplied piece of data */
        void addUserSupplied(int data);
 
+       /** add a record for a user supplied piece of data */
+       void addUserSuppliedNote(char *note);
+
+
     void add(unsigned char type,double time,unsigned short funcID,int lineNum,char *fileName);
   
        void addMemoryUsage(unsigned char type,double time,double memUsage);
@@ -319,6 +390,7 @@ class TraceProjections : public Trace {
     void userEvent(int e);
     void userBracketEvent(int e, double bt, double et);
     void userSuppliedData(int e);
+    void userSuppliedNote(char* note);
     void memoryUsage(double m);
     void creation(envelope *e, int epIdx, int num=1);
     void creationMulticast(envelope *e, int epIdx, int num=1, int *pelist=NULL);
index ed9fc90c4aaaf042a08c077565932ba459c80acb..32989756feb6df7691585cf54f4b4c98513387d9 100644 (file)
@@ -73,6 +73,9 @@ class Trace {
        // a user supplied integer value(likely a timestep)
        virtual void userSuppliedData(int e) {}
 
+       // a user supplied integer value(likely a timestep)
+       virtual void userSuppliedNote(char *note) {}
+
        // the current memory usage as a double
        virtual void memoryUsage(double currentMemUsage) {}
        
@@ -187,6 +190,9 @@ public:
     
        inline void userSuppliedData(int d) { ALLDO(userSuppliedData(d));}
 
+       inline void userSuppliedNote(char *note) { ALLDO(userSuppliedNote(note));}
+
+
        inline void memoryUsage(double memUsage) { ALLDO(memoryUsage(memUsage));}