New version with migration and forwarding always working. The test program also works.
authorSameer Kumar <skumar2@uiuc.edu>
Sun, 6 Jun 2004 21:55:17 +0000 (21:55 +0000)
committerSameer Kumar <skumar2@uiuc.edu>
Sun, 6 Jun 2004 21:55:17 +0000 (21:55 +0000)
16 files changed:
src/ck-com/ComlibManager.C
src/ck-com/DirectMulticastStrategy.C
src/ck-com/DirectMulticastStrategy.h
src/ck-com/EachToManyMulticastStrategy.C
src/ck-com/EachToManyMulticastStrategy.h
src/ck-com/MsgPacker.C
src/ck-com/MsgPacker.h
src/ck-com/RingMulticastStrategy.C
src/ck-core/ComlibStrategy.C
src/ck-core/ComlibStrategy.h
src/conv-com/convcomlibmanager.C
src/conv-com/convcomlibmanager.h
src/conv-com/gridrouter.C
src/conv-com/router.h
src/scripts/Make.depends
src/scripts/Makefile

index 64a70789a2a7dd3651307d52fc33155aacdfe92e..b39b7821ceed2463dadb92b1324ce38968bd4133 100644 (file)
@@ -293,21 +293,21 @@ void ComlibManager::resumeFromBarrier2(){
     
     ComlibPrintf("[%d] Barrier 2 reached\n", CkMyPe());
 
-    if(flushTable) {
-      for (int count = 0; count < nstrats; count ++) {
-          if (!(* strategyTable)[count].tmplist.isEmpty()) {
-              CharmMessageHolder *cptr;
-              while (!(* strategyTable)[count].tmplist.isEmpty())
-                  (* strategyTable)[count].strategy->insertMessage
-                      ((* strategyTable)[count].tmplist.deq());
-          }
-          
-          if ((* strategyTable)[count].call_doneInserting) {
-              ComlibPrintf("[%d] Calling done inserting \n", CkMyPe());
-              (* strategyTable)[count].strategy->doneInserting();
-          }
-      }
+    //    if(flushTable) {
+    for (int count = 0; count < nstrats; count ++) {
+        if (!(* strategyTable)[count].tmplist.isEmpty()) {
+            CharmMessageHolder *cptr;
+            while (!(* strategyTable)[count].tmplist.isEmpty())
+                (* strategyTable)[count].strategy->insertMessage
+                    ((* strategyTable)[count].tmplist.deq());
+        }
+        
+        if ((* strategyTable)[count].call_doneInserting) {
+            ComlibPrintf("[%d] Calling done inserting \n", CkMyPe());
+            (* strategyTable)[count].strategy->doneInserting();
+        }
     }
+    //}
     
     ComlibPrintf("[%d] After Barrier2\n", CkMyPe());
 }
@@ -648,6 +648,8 @@ void ComlibManager::receiveRemoteSend(CkQ<CharmMessageHolder *> &rq,
     
     int nmsgs = rq.length();
 
+    ComlibPrintf("%d: Receiving remote message\n", CkMyPe());
+
     for(int count = 0; count < nmsgs; count++) {
         char *msg = rq.deq()->getCharmMessage();
         envelope *env = UsrToEnv(msg);
@@ -663,8 +665,10 @@ void ComlibManager::sendRemote(){
     
     int nmsgs = remoteQ.length();
 
-    if(nmsgs == 0)
-        return;
+    //if(nmsgs == 0)
+    //  return;
+
+    ComlibPrintf("%d: Sending remote message \n", CkMyPe());
 
     CProxy_ComlibManager cgproxy(CkpvAccess(cmgrID)); 
     cgproxy[remotePe].receiveRemoteSend(remoteQ, curStratID);
index 695cb0c77bb4d4ea2305c1f6d3b62cae08d4acf0..03390567bab755ed0a1bdea7631242f12bd3e521 100644 (file)
@@ -1,31 +1,5 @@
 #include "DirectMulticastStrategy.h"
 
-int intCompare(void *a, void *b){
-    int a1 = *(int *) a;
-    int b1 = *(int *) b;
-
-    if(a1 < b1)
-        return -1;
-    
-    if(a1 == b1)
-        return 0;
-
-    if(a1 > b1)
-        return 1;
-
-    return 0;
-}    
-
-//ComlibSectionHashKey CODE
-int ComlibSectionHashKey::staticCompare(const void *k1,const void *k2,size_t ){
-    return ((const ComlibSectionHashKey *)k1)->
-                compare(*(const ComlibSectionHashKey *)k2);
-}
-
-CkHashCode ComlibSectionHashKey::staticHash(const void *v,size_t){
-    return ((const ComlibSectionHashKey *)v)->hash();
-}
-
 CkpvExtern(CkGroupID, cmgrID);
 
 void *DMHandler(void *msg){
@@ -47,9 +21,6 @@ void *DMHandler(void *msg){
 DirectMulticastStrategy::DirectMulticastStrategy(int ndest, int *pelist)
     : CharmStrategy() {
  
-    isDestinationArray = 0;
-    isDestinationGroup = 1;
-
     setType(GROUP_STRATEGY);
     
     ndestpes = ndest;
@@ -59,20 +30,17 @@ DirectMulticastStrategy::DirectMulticastStrategy(int ndest, int *pelist)
 }
 
 DirectMulticastStrategy::DirectMulticastStrategy(CkArrayID aid)
-    : destArrayID(aid), CharmStrategy() {
-
-    isDestinationArray = 1;
-    isDestinationGroup = 0;
+    :  CharmStrategy() {
 
+    ainfo.setDestinationArray(aid);
     setType(ARRAY_STRATEGY);
-
     ndestpes = 0;
     destpelist = 0;
-
     commonInit();
 }
 
 void DirectMulticastStrategy::commonInit(){
+
     if(ndestpes == 0) {
         ndestpes = CkNumPes();
         destpelist = new int[CkNumPes()];
@@ -91,23 +59,20 @@ void DirectMulticastStrategy::insertMessage(CharmMessageHolder *cmsg){
                  CkMyPe());   
    
     if(cmsg->dest_proc == IS_MULTICAST && cmsg->sec_id != NULL) {        
-        int cur_sec_id = cmsg->sec_id->_cookie.sInfo.cInfo.id;
+        int cur_sec_id = ComlibSectionInfo::getSectionID(*cmsg->sec_id);
 
         if(cur_sec_id > 0) {        
-            //Old section id, send the id with the message
-            CkMcastBaseMsg *cbmsg = (CkMcastBaseMsg *)cmsg->getCharmMessage();
-            cbmsg->_cookie.sInfo.cInfo.id = cur_sec_id;
-            cbmsg->_cookie.sInfo.cInfo.status = COMLIB_MULTICAST_OLD_SECTION;
+            sinfo.processOldSectionMessage(cmsg);
         }
         else {
             CkSectionID *sid = cmsg->sec_id;
 
             //New sec id, so send it along with the message
-            void *newmsg = (void *)getNewMulticastMessage(cmsg);
+            void *newmsg = sinfo.getNewMulticastMessage(cmsg);
             CkFreeMsg(cmsg->getCharmMessage());
             delete cmsg;
             
-            initSectionID(sid);
+            sinfo.initSectionID(sid);
 
             cmsg = new CharmMessageHolder((char *)newmsg, IS_MULTICAST); 
             cmsg->sec_id = sid;
@@ -131,7 +96,7 @@ void DirectMulticastStrategy::doneInserting(){
         char *msg = cmsg->getCharmMessage();
                
         if(cmsg->dest_proc == IS_MULTICAST) {      
-            if(isDestinationArray)
+            if(getType() == ARRAY_STRATEGY)
                 CmiSetHandler(UsrToEnv(msg), handlerId);
             
             int *cur_map = destpelist;
@@ -156,7 +121,8 @@ void DirectMulticastStrategy::doneInserting(){
         }
         else {
             //CkPrintf("SHOULD NOT BE HERE\n");
-            CmiSyncSendAndFree(cmsg->dest_proc, UsrToEnv(msg)->getTotalsize(), 
+            CmiSyncSendAndFree(cmsg->dest_proc, 
+                               UsrToEnv(msg)->getTotalsize(), 
                                (char *)UsrToEnv(msg));
         }        
         
@@ -169,12 +135,9 @@ void DirectMulticastStrategy::pup(PUP::er &p){
     CharmStrategy::pup(p);
 
     p | ndestpes;
-    p | destArrayID;
-    p | isDestinationArray;
-    p | isDestinationGroup;           
-
     if(p.isUnpacking())
         destpelist = new int[ndestpes];
+    
     p(destpelist, ndestpes);        
 }
 
@@ -183,13 +146,12 @@ void DirectMulticastStrategy::beginProcessing(int numElements){
     messageBuf = new CkQ<CharmMessageHolder *>;    
     handlerId = CkRegisterHandler((CmiHandler)DMHandler);    
     
-    if(isDestinationArray) {
-        CkArray *dest_array = CkArrayID::CkLocalBranch(destArrayID);
-        dest_array->getComlibArrayListener()->getLocalIndices
-            (localDestIndices);
-    }
+    CkArrayID dest;
+    int nidx;
+    CkArrayIndexMax *idx_list;
 
-    MaxSectionID = 1;
+    ainfo.getDestinationArray(dest, idx_list, nidx);
+    sinfo = ComlibSectionInfo(dest, myInstanceID);
 }
 
 void DirectMulticastStrategy::handleMulticastMessage(void *msg){
@@ -202,35 +164,13 @@ void DirectMulticastStrategy::handleMulticastMessage(void *msg){
     
     CkVec<CkArrayIndexMax> *dest_indices; 
     if(status == COMLIB_MULTICAST_ALL) {        
-        //Multicast to all destination elements on current processor        
-        ComlibPrintf("[%d] Local multicast sending all %d\n", CkMyPe(), 
-                     localDestIndices.size());
-
-        localMulticast(&localDestIndices, env);
+        ainfo.localBroadcast(env);
     }   
     else if(status == COMLIB_MULTICAST_NEW_SECTION){        
         CkUnpackMessage(&env);
-        dest_indices = new CkVec<CkArrayIndexMax>;
-
-        ComlibPrintf("[%d] Received message for new section %d %d\n", 
-                     CkMyPe(), cbmsg->_cookie.pe, 
-                     cbmsg->_cookie.sInfo.cInfo.id);
-
-        ComlibMulticastMsg *ccmsg = (ComlibMulticastMsg *)cbmsg;
-        for(int count = 0; count < ccmsg->nIndices; count++){
-            CkArrayIndexMax idx = ccmsg->indices[count];
-            //idx.print();
-            int dest_proc =CkArrayID::CkLocalBranch(destArrayID)
-                ->lastKnown(idx);
-            
-            if(dest_proc == CkMyPe())
-                dest_indices->insertAtEnd(idx);                        
-        }            
-        
-        envelope *usrenv = (envelope *) ccmsg->usrMsg;
-        envelope *newenv = (envelope *)CmiAlloc(usrenv->getTotalsize());
-        memcpy(newenv, ccmsg->usrMsg, usrenv->getTotalsize());
-        localMulticast(dest_indices, newenv);
+        envelope *newenv;
+        sinfo.unpack(env, dest_indices, newenv);
+        ComlibArrayInfo::localMulticast(dest_indices, newenv);
 
         CkVec<CkArrayIndexMax> *old_dest_indices;
         ComlibSectionHashKey key(cbmsg->_cookie.pe, 
@@ -252,134 +192,6 @@ void DirectMulticastStrategy::handleMulticastMessage(void *msg){
         if(dest_indices == NULL)
             CkAbort("Destination indices is NULL\n");
         
-        localMulticast(dest_indices, env);
-    }
-}
-
-#include "register.h"
-void DirectMulticastStrategy::localMulticast(CkVec<CkArrayIndexMax>*vec, 
-                                                 envelope *env){
-    
-    //Multicast the messages to all elements in vec
-    int nelements = vec->size();
-    if(nelements == 0) {
-        CmiFree(env);
-        return;
-    }
-    
-    void *msg = EnvToUsr(env);    
-    int ep = env->getsetArrayEp();
-    CkUnpackMessage(&env);
-
-    env->getsetArrayMgr() = destArrayID;
-    env->setPacked(0); 
-    env->getsetArrayHops()=1;  
-    env->setUsed(0);
-
-    for(int count = 0; count < nelements; count ++){        
-        CkArrayIndexMax idx = (*vec)[count];
-        
-        ComlibPrintf("[%d] Sending multicast message to ", CkMyPe());        
-        if(comm_debug) idx.print();     
-        /*
-        CProxyElement_ArrayBase ap(destArrayID, idx);
-        ArrayElement *elem = ap.ckLocal();
-        if(elem != NULL) {
-            CkDeliverMessageReadonly(ep, msg, elem);        
-        }
-        else { //Element migrated away?
-            void *newmsg = CkCopyMsg(&msg);
-            ap.ckSend((CkArrayMessage *)newmsg, ep);            
-        }        
-        */        
-
-        env->getsetArrayIndex() = idx;
-
-        CkArray *a=(CkArray *)_localBranch(destArrayID);
-        if(_entryTable[ep]->noKeep) 
-            a->deliver((CkArrayMessage *)msg, CkDeliver_inline, CmiFalse);        
-        else {
-            void *newmsg = CkCopyMsg(&msg);
-            a->deliver((CkArrayMessage *)newmsg, CkDeliver_queue, CmiTrue);             
-        }
-        
+        ComlibArrayInfo::localMulticast(dest_indices, env);
     }
-    
-    CmiFree(env);
 }
-
-void DirectMulticastStrategy::initSectionID(CkSectionID *sid){
-    
-    if(sid->npes > 0) 
-        return;
-    
-    //CkPrintf("NDESTPES = %d\n", ndestpes);
-
-    sid->pelist = new int[ndestpes];
-    sid->npes = 0;
-    
-    int count = 0, acount = 0;
-    for(acount = 0; acount < sid->_nElems; acount++){
-        int p = CkArrayID::CkLocalBranch(destArrayID)->
-            lastKnown(sid->_elems[acount]);
-        
-        for(count = 0; count < sid->npes; count ++)
-            if(sid->pelist[count] == p)
-                break;
-        
-        if(count == sid->npes) {
-            sid->pelist[sid->npes ++] = p;
-        }
-    } 
-    
-}
-
-
-ComlibMulticastMsg * DirectMulticastStrategy::getNewMulticastMessage
-(CharmMessageHolder *cmsg){
-    
-    if(cmsg->sec_id == NULL || cmsg->sec_id->_nElems == 0)
-        return NULL;
-
-    void *m = cmsg->getCharmMessage();
-    envelope *env = UsrToEnv(m);
-    
-    //if(cmsg->sec_id->_cookie.sInfo.cInfo.id == 0) {  //New Section ID;
-    CkPackMessage(&env);
-    int sizes[2];
-    sizes[0] = cmsg->sec_id->_nElems;
-    sizes[1] = env->getTotalsize();                
-    
-    cmsg->sec_id->_cookie.sInfo.cInfo.id = MaxSectionID ++;
-    
-    ComlibPrintf("Creating new comlib multicast message %d, %d\n", sizes[0], sizes[1]);
-    
-    ComlibMulticastMsg *msg = new(sizes, 0) ComlibMulticastMsg;
-    msg->nIndices = cmsg->sec_id->_nElems;
-    msg->_cookie.sInfo.cInfo.instId = myInstanceID;
-    msg->_cookie.sInfo.cInfo.id = MaxSectionID - 1;
-    msg->_cookie.sInfo.cInfo.status = COMLIB_MULTICAST_NEW_SECTION;
-    msg->_cookie.type = COMLIB_MULTICAST_MESSAGE;
-    msg->_cookie.pe = CkMyPe();
-    
-    memcpy(msg->indices, cmsg->sec_id->_elems, 
-           sizes[0] * sizeof(CkArrayIndexMax));
-    memcpy(msg->usrMsg, env, sizes[1] * sizeof(char));         
-    envelope *newenv = UsrToEnv(msg);
-    
-    newenv->getsetArrayMgr() = env->getsetArrayMgr();
-    newenv->getsetArraySrcPe() = env->getsetArraySrcPe();
-    newenv->getsetArrayEp() = env->getsetArrayEp();
-    newenv->getsetArrayHops() = env->getsetArrayHops();
-    newenv->getsetArrayIndex() = env->getsetArrayIndex();
-    // for trace projections
-    newenv->setEvent(env->getEvent());
-    newenv->setSrcPe(env->getSrcPe());
-    
-    CkPackMessage(&newenv);        
-    return (ComlibMulticastMsg *)EnvToUsr(newenv);
-    //}   
-
-    return NULL;
-}
-
index 7754ab99e6bf31ea20e98fe22017c08269681369..f23a802bbb02d0ad8150838766de34698648ff9e 100644 (file)
@@ -2,74 +2,26 @@
 #define DIRECT_MULTICAST_STRATEGY
 
 #include "ComlibManager.h"
+#include "ComlibSectionInfo.h"
 
 void *DMHandler(void *msg);
 
-class ComlibSectionHashKey{
- public:
-
-    int srcPe;
-    int id;
-    ComlibSectionHashKey(int _pe, int _id):srcPe(_pe), id(_id){};
-
-    //These routines allow ComlibSectionHashKey to be used in
-    //  a CkHashtableT
-    CkHashCode hash(void) const;
-    static CkHashCode staticHash(const void *a,size_t);
-    int compare(const ComlibSectionHashKey &ind) const;
-    static int staticCompare(const void *a,const void *b,size_t);
-};
-
-inline CkHashCode ComlibSectionHashKey::hash(void) const
-{
-    register int _id = id;
-    register int _pe = srcPe;
-    
-    register CkHashCode ret = (_id << 16) + _pe;
-    return ret;
-}
-
-inline int ComlibSectionHashKey::compare(const ComlibSectionHashKey &k2) const
-{
-    if(id == k2.id && srcPe == k2.srcPe)
-        return 1;
-    
-    return 0;
-}
-
-/*For calls to qsort*/
-int intCompare(void *a, void *b);
-
 class DirectMulticastStrategy: public CharmStrategy {
  protected:
     CkQ <CharmMessageHolder*> *messageBuf;
 
     int ndestpes, *destpelist; //Destination processors
     int handlerId;
-    int MaxSectionID;
-
-    int isDestinationArray, isDestinationGroup;
+    
+    ComlibSectionInfo sinfo;
 
-    //Array support
-    CkArrayID destArrayID;
-    CkVec<CkArrayIndexMax> localDestIndices;
     //Array section support
     CkHashtableT<ComlibSectionHashKey, void *> sec_ht; 
     
-    //Initialize and cache information in a section id which can be
-    //used the next time the section is multicast to.
-    virtual void initSectionID(CkSectionID *sid);
-    
     //Common Initializer for group and array constructors
     //Every substrategy should implement its own
     void commonInit();
     
-    //Called to multicast an array message locally
-    void localMulticast(CkVec<CkArrayIndexMax> *, envelope *env);
-
-    //Create a new multicast message with the array section in it
-    ComlibMulticastMsg * getNewMulticastMessage(CharmMessageHolder *cmsg);
-
  public:
     
     //Group constructor
@@ -90,7 +42,6 @@ class DirectMulticastStrategy: public CharmStrategy {
     virtual void beginProcessing(int nelements);
     
     PUPable_decl(DirectMulticastStrategy);
-
 };
 #endif
 
index 2d190e3a20fa4a958c0e8dac5b8cb906fd330f2a..7559469d5765c10d72d5de90808e8ed8e6d3538a 100644 (file)
@@ -24,7 +24,7 @@ void *itrDoneHandler(void *msg){
     int nexpected = sentry->numElements;
     
     if(nexpected == 0) {             
-        CkPrintf("[%d] Calling Dummy Done Inserting\n", CkMyPe());
+        //CkPrintf("[%d] Calling Dummy Done Inserting\n", CkMyPe());
         nm_mgr = (EachToManyMulticastStrategy *)sentry->strategy;    
         nm_mgr->doneInserting();
     }
@@ -139,7 +139,7 @@ EachToManyMulticastStrategy::EachToManyMulticastStrategy(int substrategy,
     //CkPrintf("%d, ", pelist[count]);
     //}    
     //CkPrintf("\n");
-
+    
     commonInit();
 }
 
@@ -173,17 +173,14 @@ void EachToManyMulticastStrategy::insertMessage(CharmMessageHolder *cmsg){
                  CkMyPe());   
 
     if(cmsg->dest_proc == IS_MULTICAST && cmsg->sec_id != NULL) {        
-        int cur_sec_id = cmsg->sec_id->_cookie.sInfo.cInfo.id;
+        int cur_sec_id = ComlibSectionInfo::getSectionID(*cmsg->sec_id);
 
         if(cur_sec_id > 0) {        
-            //Old section id, send the id with the message
-            CkMcastBaseMsg *cbmsg = (CkMcastBaseMsg *)cmsg->getCharmMessage();
-            cbmsg->_cookie.sInfo.cInfo.id = cur_sec_id;
-            cbmsg->_cookie.sInfo.cInfo.status = COMLIB_MULTICAST_OLD_SECTION;
+            sinfo.processOldSectionMessage(cmsg);
         }
         else {
             //New sec id, so send it along with the message
-            void *newmsg = (void *)getNewMulticastMessage(cmsg);
+            void *newmsg = sinfo.getNewMulticastMessage(cmsg);
             CkFreeMsg(cmsg->getCharmMessage());
             CkSectionID *sid = cmsg->sec_id;
             delete cmsg;
@@ -250,6 +247,8 @@ void EachToManyMulticastStrategy::pup(PUP::er &p){
 
 void EachToManyMulticastStrategy::beginProcessing(int numElements){
 
+    ComlibPrintf("Begin processing %d\n", numElements);
+
     int expectedDeposits = 0;
     MaxSectionID = 0;
 
@@ -278,11 +277,19 @@ void EachToManyMulticastStrategy::beginProcessing(int numElements){
         sentry->numElements = expectedDeposits;
     }
     
+    CkArrayID dest;
+    int nidx;
+    CkArrayIndexMax *idx_list;
+    
+    ainfo.getDestinationArray(dest, idx_list, nidx);
+    sinfo = ComlibSectionInfo(dest, myInstanceID);
+    
     if(expectedDeposits > 0)
         return;
     
     if(expectedDeposits == 0 && MyPe >= 0)
-        doneInserting();
+        //doneInserting();
+        ConvComlibScheduleDoneInserting(myInstanceID);
 }
 
 void EachToManyMulticastStrategy::localMulticast(void *msg){
@@ -295,38 +302,15 @@ void EachToManyMulticastStrategy::localMulticast(void *msg){
     ComlibPrintf("[%d] In local multicast %d\n", CkMyPe(), status);
         
     if(status == COMLIB_MULTICAST_ALL) {        
-        ainfo.localMulticast(env);
+        ainfo.localBroadcast(env);
         return;
     }   
 
     CkVec<CkArrayIndexMax> *dest_indices;    
     if(status == COMLIB_MULTICAST_NEW_SECTION){        
-
-        dest_indices = new CkVec<CkArrayIndexMax>;
-
-        //CkPrintf("[%d] Received message for new section\n", CkMyPe());
-
-        CkArrayID destArrayID;
-        int nDestElements;
-        CkArrayIndexMax *destelements;
-        ainfo.getSourceArray(destArrayID, destelements, nDestElements);
-
-        ComlibMulticastMsg *ccmsg = (ComlibMulticastMsg *)cbmsg;
-        for(int count = 0; count < ccmsg->nIndices; count++){
-            CkArrayIndexMax idx = ccmsg->indices[count];
-            //idx.print();
-            int dest_proc =CkArrayID::CkLocalBranch(destArrayID)
-                ->lastKnown(idx);
-            
-            if(dest_proc == CkMyPe())
-                dest_indices->insertAtEnd(idx);                        
-        }            
-
-        envelope *usrenv = (envelope *) ccmsg->usrMsg;
-        envelope *newenv = (envelope *)CmiAlloc(usrenv->getTotalsize());
-        memcpy(newenv, ccmsg->usrMsg, usrenv->getTotalsize());
-
-        ainfo.localMulticast(dest_indices, newenv);
+        envelope *newenv;
+        sinfo.unpack(env, dest_indices, newenv);        
+        ComlibArrayInfo::localMulticast(dest_indices, newenv);
 
         CkVec<CkArrayIndexMax> *old_dest_indices;
         ComlibSectionHashKey key(cbmsg->_cookie.pe, 
@@ -349,61 +333,12 @@ void EachToManyMulticastStrategy::localMulticast(void *msg){
     if(dest_indices == NULL)
         CkAbort("Destination indices is NULL\n");
 
-    ainfo.localMulticast(dest_indices, env);
+    ComlibArrayInfo::localMulticast(dest_indices, env);
 }
 
-ComlibMulticastMsg * EachToManyMulticastStrategy::getNewMulticastMessage
-(CharmMessageHolder *cmsg){
-    
-    if(cmsg->sec_id == NULL || cmsg->sec_id->_nElems == 0)
-        return NULL;
-
-    void *m = cmsg->getCharmMessage();
-    envelope *env = UsrToEnv(m);
-    
-    if(cmsg->sec_id->_cookie.sInfo.cInfo.id == 0) {  //New Section ID;
-        CkPackMessage(&env);
-        int sizes[2];
-        sizes[0] = cmsg->sec_id->_nElems;
-        sizes[1] = env->getTotalsize();                
-
-        cmsg->sec_id->_cookie.sInfo.cInfo.id = MaxSectionID ++;
-
-        ComlibPrintf("Creating new comlib multicast message %d, %d\n", sizes[0], sizes[1]);
-
-        ComlibMulticastMsg *msg = new(sizes, 0) ComlibMulticastMsg;
-        msg->nIndices = cmsg->sec_id->_nElems;
-        msg->_cookie.sInfo.cInfo.instId = myInstanceID;
-        msg->_cookie.type = COMLIB_MULTICAST_MESSAGE;
-        msg->_cookie.sInfo.cInfo.id = MaxSectionID - 1;
-        msg->_cookie.sInfo.cInfo.status = COMLIB_MULTICAST_NEW_SECTION;
-        msg->_cookie.pe = CkMyPe();
-
-        memcpy(msg->indices, cmsg->sec_id->_elems, 
-               sizes[0] * sizeof(CkArrayIndexMax));
-        memcpy(msg->usrMsg, env, sizes[1] * sizeof(char));         
-        envelope *newenv = UsrToEnv(msg);
-        
-        newenv->getsetArrayMgr() = env->getsetArrayMgr();
-        newenv->getsetArraySrcPe() = env->getsetArraySrcPe();
-        newenv->getsetArrayEp() = env->getsetArrayEp();
-        newenv->getsetArrayHops() = env->getsetArrayHops();
-        newenv->getsetArrayIndex() = env->getsetArrayIndex();
-       // for trace projections
-        newenv->setEvent(env->getEvent());
-        newenv->setSrcPe(env->getSrcPe());
-
-        CkPackMessage(&newenv);        
-        return (ComlibMulticastMsg *)EnvToUsr(newenv);
-    }   
-
-    return NULL;
-}
-
-
 void EachToManyMulticastStrategy::initSectionID(CkSectionID *sid){
 
-    ainfo.initSectionID(sid);    
+    sinfo.initSectionID(sid);    
 
     //Convert real processor numbers to virtual processors in the all
     //to all multicast group
index a6ada90e0e4c002196c5775eed1dd2220afe26c4..c50869d7a47f6ab60e9d41753519770f12e77880 100644 (file)
@@ -2,15 +2,12 @@
 #define EACH_TO_MANY_MULTICAST_STRATEGY
 
 #include "ComlibManager.h"
-#include "DirectMulticastStrategy.h"
+#include "ComlibSectionInfo.h"
 #include "routerstrategy.h"
 
 class EachToManyMulticastStrategy: public CharmStrategy {
  protected:
-    //CkQ <CharmMessageHolder*> *messageBuf;
     int routerID;      //Which topology
-    //comID comid;
-    
     int npes, *pelist; //Domain of the topology
     int MyPe;          //My id in that domain
 
@@ -18,16 +15,9 @@ class EachToManyMulticastStrategy: public CharmStrategy {
 
     int handlerId;
     
-    //CkVec<CkArrayIndexMax> localDestIndices;
-    
     //Dynamically set by the application
     CkHashtableT<ComlibSectionHashKey, void *> sec_ht;
 
-    //void localMulticast(CkVec<CkArrayIndexMax> *vec, envelope *env);
-    
-    ComlibMulticastMsg *getPackedMulticastMessage(CharmMessageHolder *cmsg);
-    //void setReverseMap();    
-    
     //Executes common code just after array and group constructors
     virtual void commonInit();
     virtual void initSectionID(CkSectionID *sid);
@@ -35,6 +25,7 @@ class EachToManyMulticastStrategy: public CharmStrategy {
     int MaxSectionID;
 
     RouterStrategy *rstrat;
+    ComlibSectionInfo sinfo;
 
  public:
     //Group constructor
@@ -59,10 +50,6 @@ class EachToManyMulticastStrategy: public CharmStrategy {
     virtual void beginProcessing(int nelements);
     virtual void localMulticast(void *msg);
     
-    //virtual void setDestArray(CkArrayID dest) {destArrayID=dest;}
-    
-    ComlibMulticastMsg *getNewMulticastMessage(CharmMessageHolder *m);
-
     PUPable_decl(EachToManyMulticastStrategy);
 
 };
index 8d938a466f00e5185151878d60cf7586a5f18b21..ff7384c29164d03260e0dc61ac96cfc1087e43f3 100644 (file)
@@ -1,6 +1,7 @@
 #include "ComlibManager.h"
 #include "MsgPacker.h"
 #include "register.h"
+#include "pup_cmialloc.h"
 
 CkpvExtern(int, RecvCombinedShortMsgHdlrIdx);
 
@@ -9,9 +10,10 @@ void short_envelope::pup(PUP::er &p){
     p | epIdx;
     p | size;
     
-    if(p.isUnpacking()) 
-        data = new char[size];    
-    p(data, size);
+    //if(p.isUnpacking()) 
+    //  data = new char[size];
+
+    p.pupCmiAllocBuf((void **)&data, size);
 }
 
 short_envelope::short_envelope(){
@@ -22,7 +24,7 @@ short_envelope::short_envelope(){
 short_envelope::~short_envelope(){
     /*
       if(data) 
-      delete [] data;        
+      CmiFree(data);        
       data = NULL;
     */
 }
@@ -47,7 +49,8 @@ MsgPacker::MsgPacker(CkQ<CharmMessageHolder *> &msgq, int n_msgs){
 
         if(count == 0) {
             aid = env->getsetArrayMgr();
-            if(aid.isZero()) CkAbort("Array packing set and ArrayID is zero");
+            if(aid.isZero()) 
+                CkAbort("Array packing set and ArrayID is zero");
         }        
         
         msgList[count].epIdx = env->getsetArrayEp();
@@ -73,40 +76,45 @@ MsgPacker::~MsgPacker(){
 
 void MsgPacker::getMessage(CombinedMessage *&cmb_msg, int &total_size){
     int count;
-    PUP::sizer sp;
+    PUP_cmiAllocSizer sp;
+
+    CombinedMessage cmb_hdr;
+    cmb_hdr.aid = aid;
+    cmb_hdr.srcPE = CkMyPe();
+    cmb_hdr.nmsgs = nShortMsgs;
+
+    sp | cmb_hdr;
     for(count = 0; count < nShortMsgs; count ++)
         sp | msgList[count];
-
-    int size = sp.size();  
-    total_size = ALIGN8(sizeof(CombinedMessage)) + size;
     
-    //CkPrintf("In MsgPacker with %d bytes and %d messages\n", total_size, 
-    //           nShortMsgs);
+    total_size = sp.size();
+    ComlibPrintf("In MsgPacker with %d bytes and %d messages\n", total_size, 
+                 nShortMsgs);
+
+    cmb_msg = (CombinedMessage *)CmiAlloc(sp.size());
 
-    cmb_msg = (CombinedMessage *)CmiAlloc(total_size);
+    PUP_toCmiAllocMem mp(cmb_msg);
+    mp | cmb_hdr;
 
-    PUP::toMem mp((char *)cmb_msg + ALIGN8(sizeof(CombinedMessage)));
     for(count = 0; count < nShortMsgs; count ++)
         mp | msgList[count];
 
-    cmb_msg->aid = aid;
-    cmb_msg->srcPE = CkMyPe();
-    cmb_msg->nmsgs = nShortMsgs;
-
     CmiSetHandler(cmb_msg, CkpvAccess(RecvCombinedShortMsgHdlrIdx));
 }
 
 
 void MsgPacker::deliver(CombinedMessage *cmb_msg){
-    int nmsgs = cmb_msg->nmsgs;
 
-    ComlibPrintf("In MsgPacker::deliver\n");
+    CombinedMessage cmb_hdr;
 
-    char *from_addr = (char *)cmb_msg + ALIGN8(sizeof(CombinedMessage));
-    PUP::fromMem fp(from_addr);
-    CkArrayID aid = cmb_msg->aid;
+    PUP_fromCmiAllocMem fp(cmb_msg);
+    fp | cmb_hdr;
 
-    int src_pe = cmb_msg->srcPE;
+    int nmsgs = cmb_hdr.nmsgs;
+
+    ComlibPrintf("In MsgPacker::deliver\n");
+    CkArrayID aid = cmb_hdr.aid;
+    int src_pe = cmb_hdr.srcPE;
 
     for(int count = 0; count < nmsgs; count ++){
         short_envelope senv;
@@ -125,11 +133,12 @@ void MsgPacker::deliver(CombinedMessage *cmb_msg){
             //Unpack the message
             senv.data = (char *)_msgTable[msgIdx]->unpack(senv.data); 
             CkDeliverMessageReadonly(ep, senv.data, a_elem);            
-            delete[] senv.data;
+            CmiFree(senv.data);
         }
         else {
             //envelope *env = (envelope *)CmiAlloc(sizeof(envelope) + size);
-            envelope *env = _allocEnv(ForArrayEltMsg, sizeof(envelope) + size);
+            envelope *env = _allocEnv(ForArrayEltMsg, 
+                                      sizeof(envelope) + size);
 
             void *data = EnvToUsr(env);
             memcpy(data, senv.data, size);
@@ -156,7 +165,7 @@ void MsgPacker::deliver(CombinedMessage *cmb_msg){
             
             a->deliver((CkArrayMessage *)data, CkDeliver_queue, CmiTrue);
 
-            delete[] senv.data;
+            CmiFree(senv.data);
         }        
     }      
         
index ebe74a4091622a14f7881b9300d804809aa8db88..47f42349c96144f663c7559f1a0ef008176d1614 100644 (file)
@@ -19,6 +19,7 @@ class short_envelope {
     
     void pup(PUP::er &p);
 };
+
 PUPmarshall(short_envelope);
 
 struct CombinedMessage{
@@ -29,6 +30,8 @@ struct CombinedMessage{
     int nmsgs;
 };
 
+PUPbytes(CombinedMessage);
+
 class MsgPacker {        
     CkArrayID aid;
     short_envelope * msgList;
index b73165ddfb201a81b61f347b097baeb3eeab8416..6c11630f32958cd81c3f27f962c877d6c54d94f4 100644 (file)
@@ -56,13 +56,7 @@ void RingMulticastStrategy::doneInserting(){
             if(dest_pe != -1)
                 CmiSyncSend(dest_pe, env->getTotalsize(), (char *)env); 
             
-            if(isDestinationArray) {
-                /*
-                if(robj != NULL)
-                    localMulticast(&robj->indices, env);
-                else
-                    localMulticast(&localDestIndices, env);
-                */
+            if(getType() == ARRAY_STRATEGY) {
                 CmiSyncSendAndFree(CkMyPe(), env->getTotalsize(), (char *)env);
             }
             else {
@@ -106,7 +100,7 @@ void RingMulticastStrategy::handleMulticastMessage(void *msg){
        
     CkMcastBaseMsg *cbmsg = (CkMcastBaseMsg *)EnvToUsr(env);
     int src_pe = cbmsg->_cookie.pe;
-    if(isDestinationGroup){               
+    if(getType() == GROUP_STRATEGY){               
 
         if(!isEndOfRing(nextPE, src_pe)) {
             ComlibPrintf("[%d] Forwarding Message to %d\n", CkMyPe(), nextPE);
@@ -127,11 +121,7 @@ void RingMulticastStrategy::handleMulticastMessage(void *msg){
             CmiSyncSend(nextPE, env->getTotalsize(), (char *)env); 
         }
 
-        //Multicast to all destination elements on current processor        
-        ComlibPrintf("[%d] Local multicast sending all %d\n", CkMyPe(), 
-                     localDestIndices.size());
-        
-        localMulticast(&localDestIndices, env);
+        ainfo.localBroadcast(env);
     }   
     else if(status == COMLIB_MULTICAST_NEW_SECTION){        
         CkUnpackMessage(&env);
@@ -148,7 +138,7 @@ void RingMulticastStrategy::handleMulticastMessage(void *msg){
         envelope *newenv = (envelope *)CmiAlloc(usrenv->getTotalsize());
         memcpy(newenv, usrenv, usrenv->getTotalsize());
 
-        localMulticast(&robj->indices, newenv);
+        ComlibArrayInfo::localMulticast(&robj->indices, newenv);
 
         ComlibSectionHashKey key(cbmsg->_cookie.pe, 
                                  cbmsg->_cookie.sInfo.cInfo.id);
@@ -186,7 +176,7 @@ void RingMulticastStrategy::handleMulticastMessage(void *msg){
                          robj->nextPE);
         }
         
-        localMulticast(&robj->indices, env);
+        ComlibArrayInfo::localMulticast(&robj->indices, env);
     }
 }
 
@@ -213,8 +203,13 @@ RingMulticastHashObject *RingMulticastStrategy::createHashObject
     int min_dest = CkNumPes();
     for(acount = 0; acount < nelements; acount++){
         //elements[acount].print();
-        int p = CkArrayID::CkLocalBranch(destArrayID)->
-            lastKnown(elements[acount]);
+        
+        CkArrayID dest;
+        int nidx;
+        CkArrayIndexMax *idx_list;        
+        ainfo.getDestinationArray(dest, idx_list, nidx);
+
+        int p = CkArrayID::CkLocalBranch(dest)->lastKnown(elements[acount]);
         
         if(p < min_dest)
             min_dest = p;
index fc9fb416b5d7b85c5ced17ff9518f481693cf061..df2692e2a2ae028ad379426f69b44a4a0488c10c 100644 (file)
@@ -317,11 +317,19 @@ void ComlibArrayInfo::getCombinedPeList(int *&pelist, int &npes) {
     }
 }
 
-
-void ComlibArrayInfo::localMulticast(envelope *env){
-    localMulticast(&localDestIndexVec, env);
+void ComlibArrayInfo::localBroadcast(envelope *env) {
+    ComlibArrayInfo::localMulticast(&localDestIndexVec, env);
 }
 
+/*
+  This method multicasts the message to all the indices in vec.  It
+  also takes care to check if the entry method is readonly or not? If
+  readonly (nokeep) the message is not copied.
+
+  It also makes sure that the entry methods are logged in projections
+  and that the array manager is notified about array element
+  migrations.  Hence this function should be used extensively in the
+  communication library strategies */
 
 #include "register.h"
 void ComlibArrayInfo::localMulticast(CkVec<CkArrayIndexMax>*vec,
@@ -338,7 +346,7 @@ void ComlibArrayInfo::localMulticast(CkVec<CkArrayIndexMax>*vec,
     int ep = env->getsetArrayEp();
     CkUnpackMessage(&env);
 
-    env->getsetArrayMgr() = dest_aid;
+    CkArrayID dest_aid = env->getsetArrayMgr();
     env->setPacked(0);
     env->getsetArrayHops()=1;
     env->setUsed(0);
@@ -363,80 +371,14 @@ void ComlibArrayInfo::localMulticast(CkVec<CkArrayIndexMax>*vec,
     CmiFree(env);
 }
 
-void ComlibArrayInfo::initSectionID(CkSectionID *sid){
-    
-    if(sid->npes > 0) 
-        return;
-
-    sid->pelist = new int[CkNumPes()];
-    sid->npes = 0;
-    
-    int count = 0, acount = 0;
-
-    for(acount = 0; acount < sid->_nElems; acount++){
-        int p = CkArrayID::CkLocalBranch(dest_aid)->
-            lastKnown(sid->_elems[acount]);
-        
-        //p = procMap[p];
-        if(p == -1) CkAbort("Invalid Section\n");
-        
-        for(count = 0; count < sid->npes; count ++)
-            if(sid->pelist[count] == p)
-                break;
-        
-        if(count == sid->npes) {
-            sid->pelist[sid->npes ++] = p;
-        }
-    }   
-}
-
-/*
-int MaxSectionID;
-
-ComlibMulticastMsg * ComlibArrayInfo::getNewMulticastMessage
-(CharmMessageHolder *cmsg){
+/* Delivers a message to an array element, making sure that
+   projections is notified */
+void ComlibArrayInfo::deliver(envelope *env){
     
-    if(cmsg->sec_id == NULL || cmsg->sec_id->_nElems == 0)
-        return NULL;
-
-    void *m = cmsg->getCharmMessage();
-    envelope *env = UsrToEnv(m);
+    env->setUsed(0);
+    env->getsetArrayHops()=1;
+    CkUnpackMessage(&env);
     
-    if(cmsg->sec_id->_cookie.sInfo.cInfo.id == 0) {  //New Section ID;
-        CkPackMessage(&env);
-        int sizes[2];
-        sizes[0] = cmsg->sec_id->_nElems;
-        sizes[1] = env->getTotalsize();                
-
-        cmsg->sec_id->_cookie.sInfo.cInfo.id = MaxSectionID ++;
-
-        ComlibMulticastMsg *msg = new(sizes, 0) ComlibMulticastMsg;
-        msg->nIndices = cmsg->sec_id->_nElems;
-        msg->_cookie.sInfo.cInfo.instId = myInstanceID;
-        msg->_cookie.type = COMLIB_MULTICAST_MESSAGE;
-        msg->_cookie.sInfo.cInfo.id = MaxSectionID - 1;
-        msg->_cookie.sInfo.cInfo.status = COMLIB_MULTICAST_NEW_SECTION;
-        msg->_cookie.pe = CkMyPe();
-
-        memcpy(msg->indices, cmsg->sec_id->_elems, 
-               sizes[0] * sizeof(CkArrayIndexMax));
-        memcpy(msg->usrMsg, env, sizes[1] * sizeof(char));         
-        envelope *newenv = UsrToEnv(msg);
-        
-        newenv->getsetArrayMgr() = env->getsetArrayMgr();
-        newenv->getsetArraySrcPe() = env->getsetArraySrcPe();
-        newenv->getsetArrayEp() = env->getsetArrayEp();
-        newenv->getsetArrayHops() = env->getsetArrayHops();
-        newenv->getsetArrayIndex() = env->getsetArrayIndex();
-       // for trace projections
-        newenv->setEvent(env->getEvent());
-        newenv->setSrcPe(env->getSrcPe());
-
-        CkPackMessage(&newenv);        
-        return (ComlibMulticastMsg *)EnvToUsr(newenv);
-    }   
-
-    return NULL;
+    CkArray *a=(CkArray *)_localBranch(env->getsetArrayMgr());
+    a->deliver((CkArrayMessage *)EnvToUsr(env), CkDeliver_queue, CmiTrue);    
 }
-*/
-
index e33722880e9b5fa45e1898f987f89d068159d594..b03a425c1ab2532b25d0364d8b189657e22f9ecb 100644 (file)
@@ -96,16 +96,14 @@ class ComlibArrayInfo {
     int isDestinationArray(){return isDestArray;}
     void getDestinationArray(CkArrayID &aid, CkArrayIndexMax *&e, int &nind);
 
-    void localMulticast(envelope *env);
-    void localMulticast(CkVec<CkArrayIndexMax> *idx_vec,envelope *env);
+    void localBroadcast(envelope *env);
+    static void localMulticast(CkVec<CkArrayIndexMax> *idx_vec,envelope *env);
+    static void deliver(envelope *env);
 
     void getSourcePeList(int *&pelist, int &npes);
     void getDestinationPeList(int *&pelist, int &npes);
     void getCombinedPeList(int *&pelist, int &npes);
     
-    void initSectionID(CkSectionID *sid);
-    ComlibMulticastMsg * getNewMulticastMessage(CharmMessageHolder *cmsg);
-
     void pup(PUP::er &p);
 };
 
index 5cce549e064fd441befc8b08738636d267ddb448..524cc793a3378762e5f9ef5bab63005c3525a7a7 100644 (file)
@@ -78,3 +78,8 @@ Strategy *ConvComlibGetStrategy(int loc) {
 void ConvComlibRegisterStrategy(Strategy *s) {
     (CkpvAccess(conv_comm_ptr))->insertStrategy(s);    
 }
+
+void ConvComlibScheduleDoneInserting(int loc) {
+    (* (CkpvAccess(conv_comm_ptr))->getStrategyTable())[loc].
+        call_doneInserting++;
+}
index d79a76bfd732c2cfec81d5fbbdf346cf1f23a17b..7436ec39ff1cb7901edfa85a1c05a38edcd199a1 100644 (file)
@@ -33,5 +33,6 @@ class ConvComlibManager {
 void initComlibManager();
 Strategy *ConvComlibGetStrategy(int loc);
 void ConvComlibRegisterStrategy(Strategy *s);
+void ConvComlibScheduleDoneInserting(int loc);
 
 #endif
index 19d0ac5e7e70d10aa5a4d388c7fd615240ec42f1..3b4c073fbd589833065d282017e9c6d4ae541568 100644 (file)
@@ -196,9 +196,11 @@ void GridRouter::EachToManyMulticast(comID id, int size, void *msg, int numpes,
           onerow[j]=j * COLLEN + i;
       }
       
+      gmap(nextpe);
+
       ComlibPrintf("%d: before gmap sending to %d of column %d\n",
                    MyPe, nextpe, i);
-      gmap(nextpe);
+
       ComlibPrintf("%d:sending to %d of column %d\n", MyPe, nextpe, i);
       
       GRIDSENDFN(id, 0, 0, length, onerow, CkpvAccess(RecvHandle), nextpe); 
index 853c239b53c37135a42b63bf8b956fc9614e0523..71a9e84ab9680fb0f95df9ca96c7ffaf4b432d89 100644 (file)
@@ -53,7 +53,7 @@ class Router
     //Utility function
     void SendDummyMsg(comID id, int pe, int magic) {
         
-        ComlibPrintf("[%d] Send Dummy to %d\n", pe);
+        ComlibPrintf("[%d] Send Dummy to %d\n", CkMyPe(), pe);
 
         DummyMsg *m=(DummyMsg *)CmiAlloc(sizeof(DummyMsg));
         CmiSetHandler(m, CkpvAccess(DummyHandle));
@@ -67,6 +67,9 @@ class Router
     }
 
     void Done(comID id) {
+
+        ComlibPrintf("Router Iteration Finished %d", CkMyPe());
+
         if(doneHandle == 0)
             return;
 
index cc3ba32b34eb81f5720211462f883304f7762ce0..4c419c79dc4243d2b33a4de637305bf9bb06b4f3 100644 (file)
@@ -1343,11 +1343,11 @@ ComlibManager.o: ComlibManager.C ComlibManager.h charm++.h charm.h \
   CkCheckpoint.decl.h ckarrayreductionmgr.h trace.h trace-bluegene.h \
   envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h \
   EachToManyMulticastStrategy.h DirectMulticastStrategy.h \
-  routerstrategy.h gridrouter.h petable.h graphrouter.h de.h treerouter.h \
-  3dgridrouter.h StreamingStrategy.h DummyStrategy.h MPIStrategy.h \
-  NodeMulticast.h MsgPacker.h RingMulticastStrategy.h \
-  PipeBroadcastStrategy.h BroadcastStrategy.h MeshStreamingStrategy.h \
-  PrioStreaming.h qd.h comlib.def.h
+  ComlibSectionInfo.h routerstrategy.h gridrouter.h petable.h \
+  graphrouter.h de.h treerouter.h 3dgridrouter.h StreamingStrategy.h \
+  DummyStrategy.h MPIStrategy.h NodeMulticast.h MsgPacker.h \
+  RingMulticastStrategy.h PipeBroadcastStrategy.h BroadcastStrategy.h \
+  MeshStreamingStrategy.h PrioStreaming.h qd.h comlib.def.h
        $(CHARMC) -c -I. ComlibManager.C
 
 MPIStrategy.o: MPIStrategy.C MPIStrategy.h ComlibManager.h charm++.h \
@@ -1439,10 +1439,28 @@ EachToManyMulticastStrategy.o: EachToManyMulticastStrategy.C \
   tempo.h tempo.decl.h waitqd.h waitqd.decl.h sdag.h ckcheckpoint.h \
   CkCheckpoint.decl.h ckarrayreductionmgr.h trace.h trace-bluegene.h \
   envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h \
-  DirectMulticastStrategy.h routerstrategy.h gridrouter.h petable.h \
-  graphrouter.h de.h treerouter.h 3dgridrouter.h
+  DirectMulticastStrategy.h ComlibSectionInfo.h routerstrategy.h \
+  gridrouter.h petable.h graphrouter.h de.h treerouter.h 3dgridrouter.h
        $(CHARMC) -c -I. EachToManyMulticastStrategy.C
 
+ComlibSectionInfo.o: ComlibSectionInfo.C ComlibManager.h charm++.h \
+  charm.h converse.h conv-config.h conv-common.h conv-mach.h \
+  conv-autoconfig.h conv-mach-opt.h pup_c.h conv-cpm.h conv-cpath.h \
+  conv-qd.h conv-random.h conv-lists.h conv-trace.h persistent.h \
+  debug-conv.h pup.h middle.h middle-conv.h cklists.h ckbitvector.h \
+  ckstream.h init.h ckhashtable.h debug-charm.h CkMarshall.decl.h \
+  cksection.h ckcallback.h conv-ccs.h sockRoutines.h ccs-server.h \
+  ckobjQ.h ckreduction.h CkReduction.decl.h cknodegroupreduction.h \
+  CkArrayReductionMgr.decl.h ckmemcheckpoint.h CkMemCheckpoint.decl.h \
+  readonly.h ckarray.h cklocation.h LBDatabase.h lbdb.h LBDatabase.decl.h \
+  NullLB.decl.h BaseLB.decl.h CkLocation.decl.h CkArray.decl.h \
+  ComlibArrayListener.h ComlibStrategy.h convcomlibstrategy.h \
+  CkFutures.decl.h charisma.h charisma.decl.h tempo.h tempo.decl.h \
+  waitqd.h waitqd.decl.h sdag.h ckcheckpoint.h CkCheckpoint.decl.h \
+  ckarrayreductionmgr.h trace.h trace-bluegene.h envelope.h comlib.h \
+  router.h convcomlibmanager.h comlib.decl.h ComlibSectionInfo.h
+       $(CHARMC) -c -I. ComlibSectionInfo.C
+
 MsgPacker.o: MsgPacker.C ComlibManager.h charm++.h charm.h converse.h \
   conv-config.h conv-common.h conv-mach.h conv-autoconfig.h \
   conv-mach-opt.h pup_c.h conv-cpm.h conv-cpath.h conv-qd.h conv-random.h \
@@ -1458,7 +1476,7 @@ MsgPacker.o: MsgPacker.C ComlibManager.h charm++.h charm.h converse.h \
   tempo.h tempo.decl.h waitqd.h waitqd.decl.h sdag.h ckcheckpoint.h \
   CkCheckpoint.decl.h ckarrayreductionmgr.h trace.h trace-bluegene.h \
   envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h \
-  MsgPacker.h register.h
+  MsgPacker.h register.h pup_cmialloc.h
        $(CHARMC) -c -I. MsgPacker.C
 
 DirectMulticastStrategy.o: DirectMulticastStrategy.C \
@@ -1477,7 +1495,7 @@ DirectMulticastStrategy.o: DirectMulticastStrategy.C \
   tempo.h tempo.decl.h waitqd.h waitqd.decl.h sdag.h ckcheckpoint.h \
   CkCheckpoint.decl.h ckarrayreductionmgr.h trace.h trace-bluegene.h \
   envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h \
-  register.h
+  ComlibSectionInfo.h
        $(CHARMC) -c -I. DirectMulticastStrategy.C
 
 RingMulticastStrategy.o: RingMulticastStrategy.C RingMulticastStrategy.h \
@@ -1495,7 +1513,8 @@ RingMulticastStrategy.o: RingMulticastStrategy.C RingMulticastStrategy.h \
   convcomlibstrategy.h CkFutures.decl.h charisma.h charisma.decl.h \
   tempo.h tempo.decl.h waitqd.h waitqd.decl.h sdag.h ckcheckpoint.h \
   CkCheckpoint.decl.h ckarrayreductionmgr.h trace.h trace-bluegene.h \
-  envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h
+  envelope.h comlib.h router.h convcomlibmanager.h comlib.decl.h \
+  ComlibSectionInfo.h
        $(CHARMC) -c -I. RingMulticastStrategy.C
 
 PipeBroadcastStrategy.o: PipeBroadcastStrategy.C PipeBroadcastStrategy.h \
index be6b7f71cd8a3c9c9323629e0f39641f01b0bc32..c786fb31fe03561d7ef50433f6e8c6f7e23d4e18 100644 (file)
@@ -195,7 +195,7 @@ CKHEADERS=ck.h ckstream.h envelope.h init.h qd.h charm.h charm++.h \
          EachToManyMulticastStrategy.h MsgPacker.h StreamingStrategy.h \
          NodeMulticast.h PipeBroadcastStrategy.h MeshStreamingStrategy.h \
           PrioStreaming.h MPIStrategy.h MsgPacker.h StreamingStrategy.h \
-         BroadcastStrategy.h $(CVHEADERS)
+         BroadcastStrategy.h ComlibSectionInfo.h $(CVHEADERS)
 
 ALLHEADERS=$(CKHEADERS) \
     simplemsg.h sm.h pvmc.h pvm3.h sdag.h \
@@ -880,7 +880,7 @@ loadbalancers: $(LOADBALANCERS) $(L)/libmoduleEveryLB.a
 
 STRATEGY_OBJS = MPIStrategy.o StreamingStrategy.o \
                 DummyStrategy.o NodeMulticast.o \
-               EachToManyMulticastStrategy.o \
+               EachToManyMulticastStrategy.o ComlibSectionInfo.o \
                 MsgPacker.o DirectMulticastStrategy.o \
                RingMulticastStrategy.o \
                 PipeBroadcastStrategy.o MeshStreamingStrategy.o \