Merge branch 'charm' of charmgit:charm into charm
authorChao Mei <chaomei2@illinois.edu>
Tue, 3 May 2011 02:06:18 +0000 (21:06 -0500)
committerChao Mei <chaomei2@illinois.edu>
Tue, 3 May 2011 02:06:18 +0000 (21:06 -0500)
src/arch/common/conv-mach-papi.sh
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h
src/scripts/configure
src/scripts/configure.in

index d88e0e5896a996e65844c6cdd1537d444b522184..20e3d84863c989e72f1573952bdb907d149f7210 100644 (file)
@@ -20,5 +20,14 @@ then
   fi
 fi
 
-
-CMK_LIBS="$CMK_LIBS -lpapi"
+if test -z "$PAPI_LIBDIR"
+then
+  #macros needs to be changed to point to the correct papi directory
+  PAPI_LIBDIR="$HOME/papi/lib"
+  PAPI_INCDIR="$HOME/papi/include"
+  CMK_INCDIR="$CMK_INCDIR -I$PAPI_INCDIR"
+  CMK_LIBDIR="-L $PAPI_LIBDIR"
+  CMK_LD="$CMK_LD -Wl,-rpath,$PAPI_LIBDIR"
+  CMK_LDXX="$CMK_LDXX -Wl,-rpath,$PAPI_LIBDIR" 
+  CMK_LIBS="$CMK_LIBS -lpapi"
+fi
index e5a724bc9ae152f184ec97e9e232e0fdef4ca5f5..0c3a18d223a125fff338213b963a3859748eb0e8 100644 (file)
@@ -99,9 +99,7 @@ On T3E, we need to have file number control by open/close files only when needed
 #endif //CMK_TRACE_LOGFILE_NUM_CONTROL
 
 #if CMK_HAS_COUNTER_PAPI
-int numPAPIEvents = 2;
-int papiEvents[] = { PAPI_L3_DCM, PAPI_FP_OPS };
-char *papiEventNames[] = {"PAPI_L3_DCM", "PAPI_FP_OPS"};
+int papiEvents[NUMPAPIEVENTS] = { PAPI_L2_DCM, PAPI_FP_OPS };
 #endif // CMK_HAS_COUNTER_PAPI
 
 /**
@@ -543,11 +541,13 @@ void LogPool::writeSts(void)
   fprintf(stsfp, "VERSION %s\n", PROJECTION_VERSION);
   fprintf(stsfp, "TOTAL_PHASES %d\n", numPhases);
 #if CMK_HAS_COUNTER_PAPI
-  fprintf(stsfp, "TOTAL_PAPI_EVENTS %d\n", numPAPIEvents);
+  fprintf(stsfp, "TOTAL_PAPI_EVENTS %d\n", NUMPAPIEVENTS);
   // for now, use i, next time use papiEvents[i].
   // **CW** papi event names is a hack.
-  for (i=0;i<numPAPIEvents;i++) {
-    fprintf(stsfp, "PAPI_EVENT %d %s\n", i, papiEventNames[i]);
+  char eventName[PAPI_MAX_STR_LEN];
+  for (i=0;i<NUMPAPIEVENTS;i++) {
+    PAPI_event_code_to_name(papiEvents[i], eventName);
+    fprintf(stsfp, "PAPI_EVENT %d %s\n", i, eventName);
   }
 #endif
   traceWriteSTS(stsfp,CkpvAccess(usrEvents)->length());
@@ -779,20 +779,12 @@ void LogPool::modLastEntryTimestamp(double ts)
 //     }
 // }
 
-void LogEntry::addPapi(int numPapiEvts, int *papi_ids, LONG_LONG_PAPI *papiVals)
-{
-#if CMK_HAS_COUNTER_PAPI
-  numPapiEvents = numPapiEvts;
-  if (papiVals != NULL) {
-    papiIDs = new int[numPapiEvents];
-    papiValues = new LONG_LONG_PAPI[numPapiEvents];
-    for (int i=0; i<numPapiEvents; i++) {
-      papiIDs[i] = papi_ids[i];
-      papiValues[i] = papiVals[i];
-    }
-  }
-#endif
-}
+//void LogEntry::addPapi(LONG_LONG_PAPI *papiVals)
+//{
+//#if CMK_HAS_COUNTER_PAPI
+//   memcpy(papiValues, papiVals, sizeof(LONG_LONG_PAPI)*NUMPAPIEVENTS);
+//#endif
+//}
 
 
 
@@ -829,15 +821,15 @@ void LogEntry::pup(PUP::er &p)
       p|id.id[0]; p|id.id[1]; p|id.id[2]; p|id.id[3];
       p|icputime;
 #if CMK_HAS_COUNTER_PAPI
-      p|numPapiEvents;
-      for (i=0; i<numPapiEvents; i++) {
+      //p|numPapiEvents;
+      for (i=0; i<NUMPAPIEVENTS; i++) {
        // not yet!!!
        //      p|papiIDs[i]; 
        p|papiValues[i];
        
       }
 #else
-      p|numPapiEvents;     // non papi version has value 0
+      //p|numPapiEvents;     // non papi version has value 0
 #endif
       if (p.isUnpacking()) {
        recvTime = irecvtime/1.0e6;
@@ -848,14 +840,14 @@ void LogEntry::pup(PUP::er &p)
       if (p.isPacking()) icputime = (CMK_TYPEDEF_UINT8)(1.0e6*cputime);
       p|mIdx; p|eIdx; p|itime; p|event; p|pe; p|msglen; p|icputime;
 #if CMK_HAS_COUNTER_PAPI
-      p|numPapiEvents;
-      for (i=0; i<numPapiEvents; i++) {
+      //p|numPapiEvents;
+      for (i=0; i<NUMPAPIEVENTS; i++) {
        // not yet!!!
        //      p|papiIDs[i];
        p|papiValues[i];
       }
 #else
-      p|numPapiEvents;  // non papi version has value 0
+      //p|numPapiEvents;  // non papi version has value 0
 #endif
       if (p.isUnpacking()) cputime = icputime/1.0e6;
       break;
@@ -1042,7 +1034,7 @@ TraceProjections::TraceProjections(char **argv):
   if (PAPI_create_eventset(&papiEventSet) != PAPI_OK) {
     CmiAbort("PAPI failed to create event set!\n");
   }
-  papiRetValue = PAPI_add_events(papiEventSet, papiEvents, numPAPIEvents);
+  papiRetValue = PAPI_add_events(papiEventSet, papiEvents, NUMPAPIEVENTS);
   if (papiRetValue != PAPI_OK) {
     if (papiRetValue == PAPI_ECNFLCT) {
       CmiAbort("PAPI events conflict! Please re-assign event types!\n");
@@ -1050,8 +1042,7 @@ TraceProjections::TraceProjections(char **argv):
       CmiAbort("PAPI failed to add designated events!\n");
     }
   }
-  papiValues = new long_long[numPAPIEvents];
-  memset(papiValues, 0, numPAPIEvents*sizeof(long_long));
+  memset(papiValues, 0, NUMPAPIEVENTS*sizeof(LONG_LONG_PAPI));
 #endif
 }
 
@@ -1314,7 +1305,7 @@ void TraceProjections::beginExecute(CmiObjId *tid)
   _logPool->add(BEGIN_PROCESSING,ForChareMsg,_threadEP,TraceTimer(),
                execEvent,CkMyPe(), 0, tid);
 #if CMK_HAS_COUNTER_PAPI
-  _logPool->addPapi(numPAPIEvents, papiEvents, papiValues);
+  _logPool->addPapi(papiValues);
 #endif
   inEntry = 1;
 }
@@ -1333,7 +1324,7 @@ void TraceProjections::beginExecute(envelope *e)
     _logPool->add(BEGIN_PROCESSING,ForChareMsg,_threadEP,TraceTimer(),
                  execEvent,CkMyPe(), 0, NULL, 0.0, TraceCpuTimer());
 #if CMK_HAS_COUNTER_PAPI
-    _logPool->addPapi(numPAPIEvents, papiEvents, papiValues);
+    _logPool->addPapi(papiValues);
 #endif
     inEntry = 1;
   } else {
@@ -1386,7 +1377,7 @@ void TraceProjections::beginExecuteLocal(int event, int msgType, int ep, int src
   _logPool->add(BEGIN_PROCESSING,msgType,ep,TraceTimer(),event,
                srcPe, mlen, idx, 0.0, TraceCpuTimer());
 #if CMK_HAS_COUNTER_PAPI
-  _logPool->addPapi(numPAPIEvents, papiEvents, papiValues);
+  _logPool->addPapi(papiValues);
 #endif
   inEntry = 1;
 }
@@ -1433,7 +1424,7 @@ void TraceProjections::endExecuteLocal(void)
                  execEvent, execPe, 0, NULL, 0.0, cputime);
   }
 #if CMK_HAS_COUNTER_PAPI
-  _logPool->addPapi(numPAPIEvents, papiEvents, papiValues);
+  _logPool->addPapi(papiValues);
 #endif
   inEntry = 0;
 }
index b6f9fad990dd54bcee194bff8916371e8df5ded6..58cb71ac62313d265fb2d8b902ceb40ca2ee1585 100644 (file)
@@ -16,6 +16,7 @@
 
 #if CMK_HAS_COUNTER_PAPI
 #include <papi.h>
+#define NUMPAPIEVENTS 2
 #endif
 
 #if CMK_PROJECTIONS_USE_ZLIB
@@ -58,10 +59,9 @@ class LogEntry {
 
     // this is taken out so as to provide a placeholder value for non-PAPI
     // versions (whose value is *always* zero).
-    int numPapiEvents;
+    //int numPapiEvents;
 #if CMK_HAS_COUNTER_PAPI
-    int *papiIDs;
-    LONG_LONG_PAPI *papiValues;
+    LONG_LONG_PAPI papiValues[NUMPAPIEVENTS];
 #endif
     unsigned char type; 
     char *fName;
@@ -81,12 +81,12 @@ class LogEntry {
       if (d) id = *d; else {id.id[0]=id.id[1]=id.id[2]=id.id[3]=0; };
       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;
+      //numPapiEvents = NUMPAPIEVENTS;
+#else
+      //numPapiEvents = 0;
 #endif
+      userSuppliedNote = NULL;
       fName = NULL;
       flen=0;
       pes=NULL;
@@ -183,10 +183,12 @@ class LogEntry {
       }        
     }
 
-
-
     // complementary function for adding papi data
-    void addPapi( int numPapiEvts, int *papi_ids, LONG_LONG_PAPI *papiVals);
+    void addPapi(LONG_LONG_PAPI *papiVals){
+#if CMK_HAS_COUNTER_PAPI
+       memcpy(papiValues, papiVals, sizeof(LONG_LONG_PAPI)*NUMPAPIEVENTS);
+#endif
+    }
    
     void setUserSuppliedData(int data){
       userSuppliedData = data;
@@ -323,8 +325,8 @@ class LogPool {
 
     // complementary function to set papi info to current log entry
     // must be called after an add()
-    void addPapi(int numPap, int *pap_ids, LONG_LONG_PAPI *papVals) {
-      pool[numEntries-1].addPapi(numPap, pap_ids, papVals);
+    void addPapi(LONG_LONG_PAPI *papVals) {
+      pool[numEntries-1].addPapi(papVals);
     }
 
        /** add a record for a user supplied piece of data */
@@ -450,7 +452,7 @@ class TraceProjections : public Trace {
     int idxRegistered(int idx);    
 #if CMK_HAS_COUNTER_PAPI
     int papiEventSet;
-    LONG_LONG_PAPI *papiValues;
+    LONG_LONG_PAPI papiValues[NUMPAPIEVENTS];
 #endif
 
   public:
index 17f108ed47ba54b97c926df2b230b3156139cf9d..2ad1f65d12ba7feb79ca3d41a19a802349cf3e1d 100755 (executable)
@@ -3624,8 +3624,7 @@ cat > $t <<EOT
 #include <papi.h>
 
 int main() {
-    int Events[1] = { PAPI_TOT_CYC };
-    if (PAPI_start_counters(Events, 1) != PAPI_OK) return 1;
+    if (PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT) return 1;
     return 0;
 }
 EOT
index 782c285959a0524a220b8b13d2ee0fd7dba10be9..1d1ee50b7dbd6e521fe301c978d0bd0b80a4ff58 100644 (file)
@@ -1534,8 +1534,7 @@ cat > $t <<EOT
 #include <papi.h>
                                                                                 
 int main() {
-    int Events[[1]] = { PAPI_TOT_CYC };
-    if (PAPI_start_counters(Events, 1) != PAPI_OK) return 1;
+    if (PAPI_library_init(PAPI_VER_CURRENT) != PAPI_VER_CURRENT) return 1;
     return 0;
 }
 EOT