Merge branch 'ramv/exorcise-arrayindex-bug' into charm
authorRamprasad Venkataraman <ramv@illinois.edu>
Tue, 31 May 2011 16:00:45 +0000 (11:00 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Tue, 31 May 2011 16:00:45 +0000 (11:00 -0500)
Eliminate CkArrayIndexStruct and consolidate array index data
structures into one class hierarchy. The base class CkArrayIndex
now participates in unions and has shed its constructors.

src/arch/mpi-bluegeneq/cc-xlc.sh
src/arch/mpi-bluegeneq/conv-mach.sh
src/ck-ldb/ckgraph.C
src/ck-ldb/ckgraph.h
src/conv-core/convcore.c
src/conv-ldb/cldb.c
src/conv-ldb/cldb.h
src/libs/ck-libs/pose/stats.C
src/libs/ck-libs/pose/stats.h

index ff2ab1312bb4aa4be2f7edb438326dd18a8dac51..dea2c659e9320861029e536f6c12338775eb16a6 100644 (file)
@@ -11,15 +11,15 @@ then
 fi
 
 XLC_F=$XLC_PRE/xlf/bg/11.1/
-CMK_CC="$XLC_PRE/${XLC_POST}xlc -qcpluscmt -qhalt=e $BGQ_INC -qminimaltoc"
-CMK_CXX="$XLC_PRE/${XLC_POST}xlC -qhalt=e $BGQ_INC -qminimaltoc"
+CMK_CC="$XLC_PRE/${XLC_POST}xlc -qcpluscmt -qhalt=e $BGQ_INC"
+CMK_CXX="$XLC_PRE/${XLC_POST}xlC -qhalt=e $BGQ_INC"
 CMK_LD="$CMK_CC"
 CMK_LDXX="$CMK_CXX"
 CMK_CF77="$XLC_F/${XLC_POST}xlf "
 CMK_CF90="$XLC_F/${XLC_POST}xlf90  -qsuffix=f=f90" 
 CMK_CF90_FIXED="$XLC_PRE/xlf/8.1/${XLC_POST}xlf90 " 
-CMK_C_OPTIMIZE='-O3 -Q  -qminimaltoc'
-CMK_CXX_OPTIMIZE='-O3 -Q -qminimaltoc'
+CMK_C_OPTIMIZE='-O3 -Q'
+CMK_CXX_OPTIMIZE='-O3 -Q'
 CMK_AR='ar cq'
 CMK_NM='nm '
 CMK_QT="aix"
index f0f9256fd12a3c25d4ffc37f714fd7b2e0b4d8a0..7a484c143685896d39ef092b21afba13c0424678 100644 (file)
@@ -15,7 +15,7 @@ fi
 BGQ_BIN=$BGQ_FLOOR/gnu-linux/bin
 BGQ_INC="-I$BGQ_INSTALL/comm/gcc/include -I$BGQ_INSTALL/spi/include -I$BGQ_INSTALL -I$BGQ_INSTALL/spi/include/kernel/cnk/"
 
-BGQ_LIB="-L$BGQ_INSTALL/comm/gcc/lib -lmpich -lopa -lmpl -ldl -L$BGQ_INSTALL/comm/sys/lib -lpami -L$BGQ_INSTALL/spi/lib -lSPI -lSPI_cnk -lpthread -lrt"
+BGQ_LIB="-L$BGQ_INSTALL/comm/xl.fast/lib -lmpich -lopa -lmpl -ldl -L$BGQ_INSTALL/comm/sys-fast/lib -lpami -L$BGQ_INSTALL/spi/lib -lSPI -lSPI_cnk -lpthread -lrt"
 
 # test if compiler binary present
 if test ! -x $BGQ_BIN/powerpc64-bgq-linux-g++
index 3f74816319050aa1d2a4979c383926ea88af29e2..95b5a8b59cd5aa499a47585dc31eef00efafa61c 100644 (file)
@@ -65,6 +65,23 @@ ObjGraph::ObjGraph(BaseLB::LDStats *stats) {
 
       vertices[from].sendToList.push_back(Edge(to, commData.messages, commData.bytes));
       vertices[to].recvFromList.push_back(Edge(from, commData.messages, commData.bytes));
+    } //else if a multicast list
+    else if((!commData.from_proc()) && (commData.recv_type() == LD_OBJLIST_MSG)) {
+      int nobjs, offset;
+      LDObjKey *objs = commData.receiver.get_destObjs(nobjs);
+      McastSrc sender(nobjs, commData.messages, commData.bytes);
+
+      from = stats->getHash(commData.sender);
+      offset = vertices[from].mcastToList.size();
+
+      for(int i = 0; i < nobjs; i++) {
+        int idx = stats->getHash(objs[i]);
+        CmiAssert(idx != -1);
+        vertices[idx].mcastFromList.push_back(McastDest(from, offset,
+        commData.messages, commData.bytes));
+        sender.destList.push_back(idx);
+      }
+      vertices[from].mcastToList.push_back(sender);
     }
   } // end for
 }
index bc8875f776a17960bb99a79af3217421698a0f6a..403945d0deed5739256750906d1ab2ee88bf78f2 100644 (file)
@@ -68,6 +68,50 @@ class Edge {
     int bytes;         // total number of bytes exchanged
 };
 
+class McastSrc {
+  friend class ObjGraph;
+
+  public:
+    McastSrc(int _numDest, int _msgs, int _bytes) : numDest(_numDest), msgs(_msgs),
+    bytes(_bytes) {
+    }
+
+    ~McastSrc() { }
+
+    inline int getNumMsgs() { return msgs; }
+    inline int getNumBytes() { return bytes; }
+    inline void setNumBytes(int _bytes) { bytes = _bytes; }
+
+    std::vector<int> destList;
+
+  private:
+    int numDest; //number of destination for this multicast
+    int msgs; // number of messages exchanged
+    int bytes; // total number of bytes exchanged
+};
+
+class McastDest {
+  friend class ObjGraph;
+
+  public:
+    McastDest(int _src, int _offset, int _msgs, int _bytes) : src(_src),
+    offset(_offset), msgs(_msgs), bytes(_bytes) {
+    }
+
+    ~McastDest() { }
+
+    inline int getSrc() { return src; }
+    inline int getOffset() { return offset; }
+    inline int getNumMsgs() { return msgs; }
+    inline int getNumBytes() { return bytes; }
+    inline void setNumBytes(int _bytes) { bytes = _bytes; }
+
+  private:
+    int src; // src of multicast being received
+    int offset; //multicast list which this message belongs to
+    int msgs; // number of messages exchanged
+    int bytes; // total number of bytes exchanged
+};
 
 class Vertex {
   friend class ObjGraph;
@@ -83,6 +127,8 @@ class Vertex {
     // list of vertices this vertex sends messages to and receives from
     std::vector<Edge> sendToList;
     std::vector<Edge> recvFromList;
+    std::vector<McastSrc> mcastToList;
+    std::vector<McastDest> mcastFromList;
 
   private:
     int id;            // index in the LDStats array
index 0a93295bc040a9865c2f7b2629d8241dfb76f322..1a49c01b096007741ff24ce27724b7741298d9e4 100644 (file)
@@ -129,7 +129,7 @@ extern void CldModuleInit(char **);
 #endif
 
 #include "quiescence.h"
-
+extern unsigned int    _printCS;
 //int cur_restart_phase = 1;      /* checkpointing/restarting phase counter */
 CpvDeclare(int,_curRestartPhase);
 static int CsdLocalMax = CSD_LOCAL_MAX_DEFAULT;
@@ -3428,10 +3428,8 @@ void ConverseCommonInit(char **argv)
 #if ! CMK_CMIPRINTF_IS_A_BUILTIN
   CmiIOInit(argv);
 #endif
-
   if (CmiMyPe() == 0)
-    CmiPrintf("Converse/Charm++ Commit ID: %s\n", CmiCommitID);
-
+      CmiPrintf("Converse/Charm++ Commit ID: %s\n", CmiCommitID);
 /* #if CONVERSE_POOL */
   CmiPoolAllocInit(30);  
 /* #endif */
@@ -3516,7 +3514,8 @@ void ConverseCommonExit(void)
 #if CMK_CUDA
   exitHybridAPI(); 
 #endif
-
+  if(_printCS)
+      seedBalancerExit();
   EmergencyExit();
 }
 
index 482e4c72166311bda6dda70531c1548199e32c1e..da6cccfd4553e9d39890dcb373676d2aabe6ed8a 100644 (file)
@@ -525,3 +525,8 @@ void CldSimpleMultipleSend(int pe, int numToSend, int rank)
     }
   }
 }
+
+void seedBalancerExit()
+{
+    CmiPrintf("Relocate message number is %d\n", CpvAccess(CldRelocatedMessages));
+}
index 350663aa3f891d11060ef4b74f64805de7dca6bf..3b364bed0da9bc60b592015764d338a13d3069d8 100644 (file)
@@ -27,3 +27,4 @@ void CldRestoreHandler(char *);
 void CldSwitchHandler(char *, int);
 void CldModuleGeneralInit();
 int  CldPresentPE(int pe);
+void seedBalancerExit();
index b1b6ab128aee70825555e326fd28956e0a923e58..4342d465bed2c894ef5ed599dfd7f3c563addd2b 100644 (file)
@@ -184,7 +184,7 @@ void globalStat::DOPcalc(POSE_TimeType gvt, double grt)
   for (i=0; i<gvtp; i++) gvtDOP[i] = 0;
   for (i=0; i<grtp; i++) grtDOP[i] = 0;
   for (i=0; i<CkNumPes(); i++) { // read each processor's log
-    sprintf(filename, "dop%d.log\0", i);
+    sprintf(filename, "dop%ld.log\0", i);
     fp = fopen(filename, "r");
     if (!fp) {
       CkPrintf("Cannot open file %s... exiting.\n", filename);
@@ -192,12 +192,13 @@ void globalStat::DOPcalc(POSE_TimeType gvt, double grt)
       return;
     }
     CkPrintf("Reading file %s...\n", filename);
-    while (fgets(line, 80, fp)) {
 #if USE_LONG_TIMESTAMPS
-      if (sscanf(line, "%lf %lf %lld %lld\n", &rinStart, &rinEnd, &vinStart, &vinEnd) == 4) {
+    const char* format = "%lf %lf %ld %ld\n";
 #else
-      if (sscanf(line, "%lf %lf %d %d\n", &rinStart, &rinEnd, &vinStart, &vinEnd) == 4) {
+    const char* format = "%lf %lf %d %d\n";
 #endif
+    while (fgets(line, 80, fp)) {
+      if (sscanf(line, format, &rinStart, &rinEnd, &vinStart, &vinEnd) == 4) {
        usStart = (unsigned long int)(rinStart * 1000000.0);
        usEnd = (unsigned long int)(rinEnd * 1000000.0);
        for (j=usStart; j<usEnd; j++) grtDOP[j]++;
@@ -214,7 +215,7 @@ void globalStat::DOPcalc(POSE_TimeType gvt, double grt)
   fp = fopen("dop_mod.out", "w");
   for (i=0; i<gvtp; i++) {
     if ((gvtDOP[i] != 0) || (zed == 0))
-      fprintf(fp, "%d %d\n", i, gvtDOP[i]);
+      fprintf(fp, "%ld %d\n", i, gvtDOP[i]);
     if (gvtDOP[i] == 0) zed = 1;
     else zed = 0;
     avgPEs += gvtDOP[i];
@@ -224,7 +225,7 @@ void globalStat::DOPcalc(POSE_TimeType gvt, double grt)
   fclose(fp);
   fp = fopen("dop_sim.out", "w");
   for (i=0; i<grtp; i++) {
-    fprintf(fp, "%d %d\n", i, grtDOP[i]);
+    fprintf(fp, "%ld %d\n", i, grtDOP[i]);
     if (grtDOP[i] > simulationPEs) simulationPEs = grtDOP[i];
   } 
   fclose(fp);
index e509e6f3a62e027b6b1a0cbb8c9ac7c4a9745e3e..9f4ed5df3bb8c25d121418488b8b9919f059d112 100644 (file)
@@ -121,7 +121,7 @@ public:
   /// Write data to this PE's DOP log file
   inline void WriteDopData(double srt, double ert, POSE_TimeType svt, POSE_TimeType evt) {
 #if USE_LONG_TIMESTAMPS
-    const char* format = "%f %f %lld %lld\n";
+    const char* format = "%f %f %ld %ld\n";
 #else
     const char* format = "%f %f %d %d\n";
 #endif