add section callback
authorXiang Ni <xiangni2@illinois.edu>
Thu, 30 Jun 2011 03:02:29 +0000 (22:02 -0500)
committerXiang Ni <xiangni2@illinois.edu>
Thu, 30 Jun 2011 03:02:29 +0000 (22:02 -0500)
src/ck-core/ckarray.C
src/ck-core/ckarray.h
src/ck-core/ckcallback.C
src/ck-core/ckcallback.h

index 12124811d2e59a3b04c3be5848dce2a0e041894b..895d4be18ac161be53f4112b5de2af6e91ee50f6 100644 (file)
@@ -993,6 +993,12 @@ void *CProxyElement_ArrayBase::ckSendSync(CkArrayMessage *msg, int ep) const
        return CkWaitReleaseFuture(f);
 }
 
        return CkWaitReleaseFuture(f);
 }
 
+void CkBroadcastMsgSection(int entryIndex, void *msg, CkSectionID sID, int opts     )
+{
+       CProxySection_ArrayBase sp(sID);
+       sp.ckSend((CkArrayMessage *)msg,entryIndex,opts);
+}
+
 void CProxySection_ArrayBase::ckSend(CkArrayMessage *msg, int ep, int opts)
 {
        if (ckIsDelegated()) //Just call our delegateMgr
 void CProxySection_ArrayBase::ckSend(CkArrayMessage *msg, int ep, int opts)
 {
        if (ckIsDelegated()) //Just call our delegateMgr
index 3153e4b92944ede3ddaf4461b1b860f277451355..3f60a3059085b430641e29de9f69f1fe440ef118 100644 (file)
@@ -459,7 +459,7 @@ PUPmarshall(CProxySection_ArrayBase)
 void CkSendMsgArray(int entryIndex, void *msg, CkArrayID aID, const CkArrayIndex &idx, int opts=0);
 void CkSendMsgArrayInline(int entryIndex, void *msg, CkArrayID aID, const CkArrayIndex &idx, int opts=0);
 void CkBroadcastMsgArray(int entryIndex, void *msg, CkArrayID aID, int opts=0);
 void CkSendMsgArray(int entryIndex, void *msg, CkArrayID aID, const CkArrayIndex &idx, int opts=0);
 void CkSendMsgArrayInline(int entryIndex, void *msg, CkArrayID aID, const CkArrayIndex &idx, int opts=0);
 void CkBroadcastMsgArray(int entryIndex, void *msg, CkArrayID aID, int opts=0);
-
+void CkBroadcastMsgSection(int entryIndex, void *msg, CkSectionID sID, int opts=    0);
 /************************ Array Element *********************/
 /**
  *An array element is a chare that lives inside the array.
 /************************ Array Element *********************/
 /**
  *An array element is a chare that lives inside the array.
index fa41dcc5e95a3a83d999142b3c62841ae0c44dfa..0288be1dc6bc984466b8fdc4fe41aafd4ed12888 100644 (file)
@@ -13,7 +13,6 @@ Initial version by Orion Sky Lawlor, olawlor@acm.org, 2/8/2002
 #include "ckcallback-ccs.h"
 #include "CkCallback.decl.h"
 #include "envelope.h"
 #include "ckcallback-ccs.h"
 #include "CkCallback.decl.h"
 #include "envelope.h"
-
 /*readonly*/ CProxy_ckcallback_group _ckcallbackgroup;
 
 typedef CkHashtableT<CkHashtableAdaptorT<unsigned int>, CkCallback*> threadCB_t;
 /*readonly*/ CProxy_ckcallback_group _ckcallbackgroup;
 
 typedef CkHashtableT<CkHashtableAdaptorT<unsigned int>, CkCallback*> threadCB_t;
@@ -143,6 +142,15 @@ CkCallback::CkCallback(int ep,const CProxyElement_ArrayBase &arrElt,CmiBool doIn
        d.array.idx = arrElt.ckGetIndex();
 }
 
        d.array.idx = arrElt.ckGetIndex();
 }
 
+CkCallback::CkCallback(int ep,CProxySection_ArrayBase &sectElt,CmiBool doInline) {
+#ifndef CMK_OPTIMIZE
+      bzero(this, sizeof(CkCallback));
+#endif
+      type=bcastSection;
+       d.array.ep=ep; 
+       secID=sectElt.ckGetSectionID(0); 
+}
+
 CkCallback::CkCallback(ArrayElement *p, int ep,CmiBool doInline) {
 #ifndef CMK_OPTIMIZE
       bzero(this, sizeof(CkCallback));
 CkCallback::CkCallback(ArrayElement *p, int ep,CmiBool doInline) {
 #ifndef CMK_OPTIMIZE
       bzero(this, sizeof(CkCallback));
@@ -153,6 +161,7 @@ CkCallback::CkCallback(ArrayElement *p, int ep,CmiBool doInline) {
        d.array.idx = p->ckGetArrayIndex();
 }
 
        d.array.idx = p->ckGetArrayIndex();
 }
 
+
 void CkCallback::send(int length,const void *data) const
 {
        send(CkDataMsg::buildNew(length,data));
 void CkCallback::send(int length,const void *data) const
 {
        send(CkDataMsg::buildNew(length,data));
@@ -165,6 +174,7 @@ void CkCallback::send(int length,const void *data) const
 void CkCallback::send(void *msg) const
 {
        switch(type) {
 void CkCallback::send(void *msg) const
 {
        switch(type) {
+       CkPrintf("type:%d\n",type);
        case ignore: //Just ignore the callback
                if (msg) CkFreeMsg(msg);
                break;
        case ignore: //Just ignore the callback
                if (msg) CkFreeMsg(msg);
                break;
@@ -237,6 +247,12 @@ void CkCallback::send(void *msg) const
                if (!msg) msg=CkAllocSysMsg();
                CkBroadcastMsgArray(d.array.ep,msg,d.array.id);
                break;
                if (!msg) msg=CkAllocSysMsg();
                CkBroadcastMsgArray(d.array.ep,msg,d.array.id);
                break;
+       /* Xiang begin*/
+       case bcastSection:
+               if(!msg)msg=CkAllocSysMsg();
+               CkBroadcastMsgSection(d.section.ep,msg,secID);
+               break;
+       /* Xiang end */
        case replyCCS: { /* Send CkDataMsg as a CCS reply */
                void *data=NULL;
                int length=0;
        case replyCCS: { /* Send CkDataMsg as a CCS reply */
                void *data=NULL;
                int length=0;
@@ -257,7 +273,14 @@ void CkCallback::send(void *msg) const
                break;
        };
 }
                break;
        };
 }
-
+/* Xiang begin */
+CkCallback::CkCallback(int ep, CkSectionID &id)
+       {
+               type=bcastSection;
+               d.section.ep=ep;
+               secID=id;
+       }
+/* Xiang end */
 void CkCallback::pup(PUP::er &p) {
   //p((char*)this, sizeof(CkCallback));
   int t = (int)type;
 void CkCallback::pup(PUP::er &p) {
   //p((char*)this, sizeof(CkCallback));
   int t = (int)type;
index 2d8764e0a7bce5880f5be6874f06746a1586cc80..8a30d244d5eb3dbdc4881d7ff4daa4c01450f075 100644 (file)
@@ -13,25 +13,21 @@ Initial version by Orion Sky Lawlor, olawlor@acm.org, 2/8/2002
 #define _CKCALLBACK_H_
 
 #include "conv-ccs.h" /*for CcsDelayedReply struct*/
 #define _CKCALLBACK_H_
 
 #include "conv-ccs.h" /*for CcsDelayedReply struct*/
-
 typedef void (*CkCallbackFn)(void *param,void *message);
 typedef void (*Ck1CallbackFn)(void *message);
 
 class CProxyElement_ArrayBase; /*forward declaration*/
 typedef void (*CkCallbackFn)(void *param,void *message);
 typedef void (*Ck1CallbackFn)(void *message);
 
 class CProxyElement_ArrayBase; /*forward declaration*/
+class CProxySection_ArrayBase;/*forward declaration*/
 class CProxyElement_Group; /*forward declaration*/
 class CProxy_NodeGroup;
 class Chare;
 class Group;
 class NodeGroup;
 class ArrayElement;
 class CProxyElement_Group; /*forward declaration*/
 class CProxy_NodeGroup;
 class Chare;
 class Group;
 class NodeGroup;
 class ArrayElement;
-
 #define CkSelfCallback(ep)  CkCallback(this, ep)
 
 class CkCallback {
 public:
 #define CkSelfCallback(ep)  CkCallback(this, ep)
 
 class CkCallback {
 public:
-#ifdef _PIPELINED_ALLREDUCE_
-       friend class ArrayElement;
-#endif
        typedef enum {
        invalid=0, //Invalid callback
        ignore, //Do nothing
        typedef enum {
        invalid=0, //Invalid callback
        ignore, //Do nothing
@@ -50,6 +46,9 @@ public:
        bcastGroup, //Broadcast to a group (d.group)
        bcastNodeGroup, //Broadcast to a nodegroup (d.group)
        bcastArray, //Broadcast to an array (d.array)
        bcastGroup, //Broadcast to a group (d.group)
        bcastNodeGroup, //Broadcast to a nodegroup (d.group)
        bcastArray, //Broadcast to an array (d.array)
+       /* Xiang Ni begin*/
+       bcastSection,//Broadcast to a section(d.section)
+       /* Xiang Ni end*/
        replyCCS // Reply to a CCS message (d.ccsReply)
        } callbackType;
 private:
        replyCCS // Reply to a CCS message (d.ccsReply)
        } callbackType;
 private:
@@ -82,14 +81,24 @@ private:
                CkGroupID id; //Array ID to call it on
                CkArrayIndexBase idx; //Index to send to (if any)
        } array;
                CkGroupID id; //Array ID to call it on
                CkArrayIndexBase idx; //Index to send to (if any)
        } array;
+       /* Xiang begin*/
+       struct s_section{
+               int ep;
+       } section;
+       /* Xiang end*/
+
        struct s_ccsReply {
                CcsDelayedReply reply;
        } ccsReply;
        struct s_ccsReply {
                CcsDelayedReply reply;
        } ccsReply;
+       //callbackData(){memset(this,0,sizeof(callbackData));}
+       //callbackData()=default;
+       //constructor()=default;
        };
        };
+
 public:        
        callbackType type;
        callbackData d;
 public:        
        callbackType type;
        callbackData d;
-       
+       CkSectionID secID;
        void impl_thread_init(void);
        void *impl_thread_delay(void) const;
 
        void impl_thread_init(void);
        void *impl_thread_delay(void) const;
 
@@ -182,8 +191,14 @@ public:
 
     // Bcast to array
        CkCallback(int ep,const CProxyElement_ArrayBase &arrElt,CmiBool doInline=CmiFalse);
 
     // Bcast to array
        CkCallback(int ep,const CProxyElement_ArrayBase &arrElt,CmiBool doInline=CmiFalse);
-
-    // Send to chare
+       
+       /* Xiang begin*/
+       //Bcast to section
+       CkCallback(int ep,CProxySection_ArrayBase &sectElt,CmiBool doInline=CmiFalse);
+       CkCallback(int ep, CkSectionID &sid);
+    /* Xiang end*/
+       
+       // Send to chare
        CkCallback(Chare *p, int ep, CmiBool doInline=CmiFalse);
 
     // Send to group element on current PE
        CkCallback(Chare *p, int ep, CmiBool doInline=CmiFalse);
 
     // Send to group element on current PE