Merge branch 'charm' of charmgit:charm into pami-bgq-commthr-ready
authorNikhil Jain <nikhil@illinois.edu>
Mon, 8 Oct 2012 05:20:08 +0000 (00:20 -0500)
committerNikhil Jain <nikhil@illinois.edu>
Mon, 8 Oct 2012 05:20:08 +0000 (00:20 -0500)
src/ck-core/charm.h
src/ck-core/ckcausalmlog.C
src/ck-core/envelope.h
src/libs/ck-libs/multicast/ckmulticast.C
src/util/CrayNid.c
src/util/XTTorus.h
src/xlat-i/sdag/CSdagConstruct.C

index a16037cbbb566d8b00e2653623d8d327fac33fe4..76b4f436687d9a98518f56d220184ff337a42a3d 100644 (file)
@@ -107,6 +107,17 @@ extern int CkRegisterMsg(const char *name, CkPackFnPtr pack,
 #define CK_EP_MEMCRITICAL (1<<5)
 
 /** type of a chare */
+#if CMK_MESSAGE_LOGGING
+typedef enum{
+       TypeInvalid=0,
+       TypeChare,
+       TypeMainChare,
+       TypeGroup,
+       TypeNodeGroup,
+       TypeArray,
+       TypeSection
+} ChareType;
+#else
 typedef enum{
        TypeInvalid=0,
        TypeChare,
@@ -115,6 +126,7 @@ typedef enum{
        TypeNodeGroup,
        TypeArray
 } ChareType;
+#endif
 
 /** A "call function" to invoke a method on an object. See EntryInfo */
 typedef void  (*CkCallFnPtr) (void *msg, void *obj);
index 05c482017956ccae5f851c947195aa5668aed5e5..22cbc282a5bc39916de7a19e55dec5ec93a85626 100644 (file)
@@ -24,7 +24,7 @@
 #define COLLECT_STATS_DETS 0
 #define COLLECT_STATS_DETS_DUP 0
 #define COLLECT_STATS_MEMORY 0
-#define COLLECT_STATS_TEAM 0
+#define COLLECT_STATS_LOGGING 0
 
 #define RECOVERY_SEND "SEND"
 #define RECOVERY_PROCESS "PROCESS"
@@ -156,9 +156,10 @@ int bufferedDetsSize;
 int storedDetsSize;
 #endif
 //TML: variables for measuring savings with teams in message logging
-#if COLLECT_STATS_TEAM
+#if COLLECT_STATS_LOGGING
 float MLOGFT_totalLogSize = 0.0;
 float MLOGFT_totalMessages = 0.0;
+float MLOGFT_totalMcastLogSize = 0.0;
 #endif
 
 static double adjustChkptPeriod=0.0; //in ms
@@ -722,7 +723,7 @@ void sendMsg(CkObjID &sender,CkObjID &recver,int destPE,MlogEntry *entry,MCount
        int totalSize;
 
        envelope *env = entry->env;
-       DEBUG_PE(3,printf("[%d] Sending message to %s from %s PE %d SN %d time %.6lf \n",CkMyPe(),env->recver.toString(recverString),env->sender.toString(senderString),destPE,env->SN,CkWallTimer()));
+       DEBUG(printf("[%d] Sending message to %s from %s PE %d SN %d time %.6lf \n",CkMyPe(),env->recver.toString(recverString),env->sender.toString(senderString),destPE,env->SN,CkWallTimer()));
 
        // setting all the information
        Chare *obj = (Chare *)entry->env->sender.getObject();
@@ -733,9 +734,13 @@ void sendMsg(CkObjID &sender,CkObjID &recver,int destPE,MlogEntry *entry,MCount
                //TML: only stores message if either it goes to this processor or to a processor in a different group
                if(!isTeamLocal(entry->destPE)){
                        obj->mlogData->addLogEntry(entry);
-#if COLLECT_STATS_TEAM
+#if COLLECT_STATS_LOGGING
                        MLOGFT_totalMessages += 1.0;
                        MLOGFT_totalLogSize += entry->env->getTotalsize();
+                       if(entry->env->flags & CK_MULTICAST_MSG_MLOG){
+                               MLOGFT_totalMcastLogSize += entry->env->getTotalsize(); 
+                               CkPrintf("[%d] Adding %f to the log\n",CkMyPe(),entry->env->getTotalsize());
+                       }
 #endif
                }else{
                        // the message has to be deleted after it has been sent
@@ -3614,10 +3619,10 @@ void _messageLoggingExit(){
        if(CkMyPe() == 0)
                printf("[%d] _causalMessageLoggingExit \n",CmiMyPe());
 
-       //TML: printing some statistics for group approach
-#if COLLECT_STATS_TEAM
+#if COLLECT_STATS_LOGGING
        printf("[%d] LOGGED MESSAGES: %.0f\n",CkMyPe(),MLOGFT_totalMessages);
        printf("[%d] MESSAGE LOG SIZE: %.2f MB\n",CkMyPe(),MLOGFT_totalLogSize/(float)MEGABYTE);
+       printf("[%d] MULTICAST MESSAGE LOG SIZE: %.2f MB\n",CkMyPe(),MLOGFT_totalMcastLogSize/(float)MEGABYTE);
 #endif
 
 #if COLLECT_STATS_MSGS
index ac2ec40a8dd98e84b385c1663301b006607aaaad..37c66721d05feacb4ece5a0c5e9a5528165d92bf 100644 (file)
 // silly ancient name: for backward compatability only.
 #define PW(x) CkPriobitsToInts(x) 
 
-#if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_))
+#if CMK_MESSAGE_LOGGING
 #define CK_FREE_MSG_MLOG       0x1
 #define CK_BYPASS_DET_MLOG     0x2
+#define CK_MULTICAST_MSG_MLOG  0x4
 #endif
 
 //#define USE_CRITICAL_PATH_HEADER_ARRAY
index f5501b174ac5750337c3f386bb1e841fead9e03d..70c01c206b1fbaeb47a0fb63fa4fc116bb40732b 100644 (file)
 #define DEBUGF(x)  // CkPrintf x;
 
 // turn on or off fragmentation in multicast
+#if CMK_MESSAGE_LOGGING
+#define SPLIT_MULTICAST  0
+#else
 #define SPLIT_MULTICAST  1
+#endif
 
 // maximum number of fragments into which a message can be broken
 #define MAXFRAGS 100
@@ -705,6 +709,11 @@ void CkMulticastMgr::SimpleSend(int ep,void *m, CkArrayID a, CkSectionID &sid, i
 
 void CkMulticastMgr::ArraySectionSend(CkDelegateData *pd,int ep,void *m, int nsid, CkSectionID *sid, int opts)
 {
+#if CMK_MESSAGE_LOGGING
+       envelope *env = UsrToEnv(m);
+       env->flags = env->flags | CK_MULTICAST_MSG_MLOG;
+#endif
+
     for (int snum = 0; snum < nsid; snum++) {
         void *msgCopy = m;
         if (nsid - snum > 1)
index 4bc2d97caa1be1c965d1d049072bc202d9c92664..4f7d3bec077ac7ce0894a18b6785b2642950868a 100644 (file)
@@ -94,7 +94,7 @@ int maxY = -1;
 int maxZ = -1;
 int maxNID = -1;
 #if CMK_HAS_RCALIB
-rca_mesh_coord_t  *coords = NULL;
+rca_mesh_coord_t  *rca_coords = NULL;
 #endif
 
 void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim);
@@ -105,7 +105,7 @@ void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim);
  */
 int getMeshCoord(int nid, int *x, int *y, int *z) {
 #if CMK_HAS_RCALIB
-  if (coords == NULL) {
+  if (rca_coords == NULL) {
   rca_mesh_coord_t xyz;
   int ret = -1;
   ret = rca_get_meshcoord(nid, &xyz);
@@ -116,9 +116,9 @@ int getMeshCoord(int nid, int *x, int *y, int *z) {
   return ret;
   }
   else {
-  *x = coords[nid].mesh_x;
-  *y = coords[nid].mesh_y;
-  *z = coords[nid].mesh_z;
+  *x = rca_coords[nid].mesh_x;
+  *y = rca_coords[nid].mesh_y;
+  *z = rca_coords[nid].mesh_z;
   return *x==-1?-1:0;
   }
 #else
@@ -185,16 +185,16 @@ void pidtonid(int numpes) {
 
 #elif XT4_TOPOLOGY || XT5_TOPOLOGY || XE6_TOPOLOGY
   int i, nid, ret;
-  CmiAssert(coords == NULL);
-  coords = (rca_mesh_coord_t *)malloc(sizeof(rca_mesh_coord_t)*(maxNID+1));
+  CmiAssert(rca_coords == NULL);
+  rca_coords = (rca_mesh_coord_t *)malloc(sizeof(rca_mesh_coord_t)*(maxNID+1));
   for (i=0; i<maxNID; i++) {
-    coords[i].mesh_x = coords[i].mesh_y = coords[i].mesh_z = -1;
+    rca_coords[i].mesh_x = rca_coords[i].mesh_y = rca_coords[i].mesh_z = -1;
   }
   for (i=0; i<numpes; i++) {
     PMI_Get_nid(CmiNodeOf(i), &nid);
     pid2nid[i] = nid;
     CmiAssert(nid < maxNID);
-    ret = rca_get_meshcoord(nid, &coords[nid]);
+    ret = rca_get_meshcoord(nid, &rca_coords[nid]);
     CmiAssert(ret != -1);
   }
 #endif
index a404334a0c5ae521fd34e4bc054c2b243efe1c55..4d5da9c7285afb1db71b3cd5e4f58f7c94349501 100644 (file)
@@ -80,7 +80,7 @@ extern "C" int pidtonid(int numpes);
 extern "C" int getMeshCoord(int nid, int *x, int *y, int *z);
 extern "C" void getDimension(int *,int *, int *, int *);
 #if CMK_HAS_RCALIB
-extern "C" rca_mesh_coord_t  *coords;
+extern "C" rca_mesh_coord_t  *rca_coords;
 #endif
 
 struct loc {
index cc24bcfd547f9056e4a82fa9062e2368594edb9f..33677893fb8ecee3636fc8c0224fb3dfb1d8cc6c 100644 (file)
@@ -11,7 +11,6 @@ using std::list;
 using std::for_each;
 #include <functional>
 using std::mem_fun;
-using std::bind2nd;
 
 namespace xi {
 
@@ -306,12 +305,12 @@ void SdagConstruct::generateConnectEntries(XStr& decls) {
    decls << "  }\n";
 }
 
-void SdagConstruct::generateConnectEntryList(std::list<SdagConstruct*>& ConnectEList) {
+void SdagConstruct::generateConnectEntryList(list<SdagConstruct*>& ConnectEList) {
   if (type == SCONNECT)
      ConnectEList.push_back(this);
   if (constructs != 0) {
-    for_each(constructs->begin(), constructs->end(),
-             bind2nd(mem_fun(&SdagConstruct::generateConnectEntryList), ConnectEList));
+    for (list<SdagConstruct*>::iterator iter = constructs->begin(); iter != constructs->end(); ++iter)
+      (*iter)->generateConnectEntryList(ConnectEList);
   }
 }
 
@@ -337,7 +336,7 @@ void SdagConstruct::propagateState(int uniqueVarNum)
 
 #if CMK_BIGSIM_CHARM
   // adding _bgParentLog as the last extra parameter for tracing
-  stateVarsChildren = new list<CStateVar*>(stateVars);
+  stateVarsChildren = new list<CStateVar*>(*stateVars);
   sv = new CStateVar(0, "void *", 0,"_bgParentLog", 0, NULL, 1);  
   stateVarsChildren->push_back(sv);
 #else
@@ -1562,8 +1561,8 @@ void SdagConstruct::generateRegisterEp(XStr& defs)
     defs << "    (void)_sdag_idx_" << traceName << "();\n";
   }
 
-  for_each(constructs->begin(), constructs->end(),
-           bind2nd(mem_fun(&SdagConstruct::generateRegisterEp), defs));
+  for (list<SdagConstruct*>::iterator iter = constructs->begin(); iter != constructs->end(); ++iter)
+    (*iter)->generateRegisterEp(defs);
   if (con1) con1->generateRegisterEp(defs);
   if (con2) con2->generateRegisterEp(defs);
   if (con3) con3->generateRegisterEp(defs);