Added CkSendMsgBranchMulti, CldEnqueueMulti, and translator changes to support
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 14 Jul 2000 19:02:17 +0000 (19:02 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 14 Jul 2000 19:02:17 +0000 (19:02 +0000)
it.

src/ck-core/charm.h
src/ck-core/ck.C
src/ck-core/ckarray.C
src/conv-core/converse.h
src/conv-ldb/cldb.graph.c
src/conv-ldb/cldb.rand.c
src/conv-ldb/cldb.spray.c
src/conv-ldb/cldb.test.c
src/xlat-i/xi-symbol.C

index 206e4c155c70c58ed1ad582fbdcdd6f37e380053..74a3bcc97441ce2aad4bea125b4864be9090314b 100644 (file)
@@ -144,7 +144,10 @@ extern CkGroupID CkCreateNodeGroupSync(int cIdx, int consIdx, void *msg);
 
 extern void CkSendMsg(int entryIndex, void *msg, CkChareID *chare);
 extern void CkSendMsgBranch(int eIdx, void *msg, int destPE, CkGroupID gID);
-extern void CkSendMsgNodeBranch(int eIdx, void *msg, int destNode, CkGroupID gID);
+extern void CkSendMsgBranchMulti(int eIdx, void *msg, int npes, int *pes, 
+                                 CkGroupID gID);
+extern void CkSendMsgNodeBranch(int eIdx, void *msg, int destNode, 
+                                CkGroupID gID);
 extern void CkBroadcastMsgBranch(int eIdx, void *msg, CkGroupID gID);
 extern void CkBroadcastMsgNodeBranch(int eIdx, void *msg, CkGroupID gID);
 
@@ -163,8 +166,10 @@ extern void* CkRemoteCall(int eIdx, void *msg, CkChareID *chare);
 extern void* CkRemoteBranchCall(int eIdx, void *msg, CkGroupID gID, int pe);
 extern void* CkRemoteNodeBranchCall(int eIdx, void *msg, CkGroupID gID, int node);
 extern CkFutureID CkRemoteCallAsync(int eIdx, void *msg, CkChareID *chare);
-extern CkFutureID CkRemoteBranchCallAsync(int eIdx, void *msg, CkGroupID gID, int pe);
-extern CkFutureID CkRemoteNodeBranchCallAsync(int eIdx, void *msg, CkGroupID gID, int node);
+extern CkFutureID CkRemoteBranchCallAsync(int eIdx, void *msg, CkGroupID gID, 
+                                          int pe);
+extern CkFutureID CkRemoteNodeBranchCallAsync(int eIdx, void *msg, 
+                                              CkGroupID gID, int node);
 extern void* CkWaitFuture(CkFutureID futNum);
 extern void CkWaitVoidFuture(CkFutureID futNum);
 extern void CkReleaseFuture(CkFutureID futNum);
index 88466509d55689de5749bb987631c845deff6d80..7fafc1efd0b0dc8f88f71888f8a7da006303ca37 100644 (file)
@@ -670,6 +670,21 @@ static inline void _sendMsgBranch(int eIdx, void *msg, CkGroupID gID,
   CldEnqueue(pe, env, _infoIdx);
 }
 
+static inline void _sendMsgBranchMulti(int eIdx, void *msg, CkGroupID gID, 
+                           int npes, int *pes)
+{
+  register envelope *env = UsrToEnv(msg);
+  _CHECK_USED(env);
+  _SET_USED(env, 1);
+  env->setMsgtype(ForBocMsg);
+  env->setEpIdx(eIdx);
+  env->setGroupNum(gID);
+  env->setSrcPe(CkMyPe());
+  _TRACE_CREATION_N(env, npes);
+  CmiSetHandler(env, _charmHandlerIdx);
+  CldEnqueueMulti(npes, pes, env, _infoIdx);
+}
+
 extern "C"
 void CkSendMsgBranch(int eIdx, void *msg, int pe, CkGroupID gID)
 {
@@ -678,6 +693,14 @@ void CkSendMsgBranch(int eIdx, void *msg, int pe, CkGroupID gID)
   CpvAccess(_qd)->create();
 }
 
+extern "C"
+void CkSendMsgBranchMulti(int eIdx,void *msg,int npes,int *pes,CkGroupID gID)
+{
+  _sendMsgBranchMulti(eIdx, msg, gID, npes, pes);
+  _STATS_RECORD_SEND_BRANCH_N(npes);
+  CpvAccess(_qd)->create(npes);
+}
+
 extern "C"
 void CkBroadcastMsgBranch(int eIdx, void *msg, CkGroupID gID)
 {
index b7b9bf9acc3173920359c84a3774e849944ced56..4d294e203c152d91b79e346dec46584fd8e4c523 100644 (file)
@@ -1118,7 +1118,7 @@ CkArrayRec* CkArray::pupArrayRec(PUP::er &p, CkArrayRec *rec, CkArrayIndex *idx)
   ArrayElement *el;
   CkArrayRec_local *lrec;
   
-  rtypes = "0lrbmd";
+  rtypes = (char *) "0lrbmd";
   
   if (p.isPacking()) {
     type = rec->type();
index c61d973b592a2d01aebc54a38508c6038e360d3d..c18bd83ef219241c60a75934ddb37094161f98d2 100644 (file)
@@ -991,6 +991,7 @@ int CldEstimate(void);
 char *CldGetStrategy(void);
 
 void CldEnqueue(int pe, void *msg, int infofn);
+void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn);
 void CldNodeEnqueue(int node, void *msg, int infofn);
 
 /****** CMM: THE MESSAGE MANAGER ******/
index fb02d5c8494b876e3426cbac277d7ee2013db166..f67cf2db611186fb7f871358a4c55a4f8b442dd1 100644 (file)
@@ -135,6 +135,24 @@ void CldHandler(void *msg)
   CsdEnqueueGeneral(msg, CQS_QUEUEING_LIFO, priobits, prioptr);
 }
 
+void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
+{
+  int len, queueing, priobits,i; unsigned int *prioptr;
+  CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
+  CldPackFn pfn;
+  ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  if (pfn) {
+    pfn(&msg);
+    ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  }
+  CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
+  CmiSetInfo(msg,infofn);
+  for(i=0;i<npes;i++) {
+    CmiSyncSend(pes[i], len, msg);
+  }
+  CmiFree(msg);
+}
+
 void CldEnqueue(int pe, void *msg, int infofn)
 {
   int len, queueing, priobits, avg; unsigned int *prioptr;
index 9eb97bb492d53358265056b38b5a73fbfd4b66dd..8913738b3916f3d1c546e547127b97aa4e2d2bb5 100644 (file)
@@ -36,6 +36,24 @@ void CldHandler(char *msg)
   CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
 }
 
+void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
+{
+  int len, queueing, priobits,i; unsigned int *prioptr;
+  CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
+  CldPackFn pfn;
+  ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  if (pfn) {
+    pfn(&msg);
+    ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  }
+  CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
+  CmiSetInfo(msg,infofn);
+  for(i=0;i<npes;i++) {
+    CmiSyncSend(pes[i], len, msg);
+  }
+  CmiFree(msg);
+}
+
 void CldEnqueue(int pe, void *msg, int infofn)
 {
   int len, queueing, priobits; unsigned int *prioptr;
index 7e9464fb0a821d77bd0fade67455c22426873a49..8a001899b77577e470eebd3f06274a8d06aba9bb 100644 (file)
@@ -148,6 +148,26 @@ void CldHopHandler(char *msg)
   }
 }
 
+void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
+{
+  int len, queueing, priobits,i; unsigned int *prioptr;
+  CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
+  peinfo *pinf = &(CpvAccess(peinf));
+  CldPackFn pfn;
+  ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  if (pfn) {
+    pfn(&msg);
+    ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  }
+  CmiSetInfo(msg,infofn);
+  CmiSetXHandler(msg, CmiGetHandler(msg));
+  CmiSetHandler(msg, pinf->EnqueueHandler);
+  for(i=0;i<npes;i++) {
+    CmiSyncSend(pes[i], len, msg);
+  }
+  CmiFree(msg);
+}
+
 void CldEnqueue(int pe, void *msg, int infofn)
 {
   int len, queueing, priobits; unsigned int *prioptr;
index 595f191c044e39347f5f21e05e0ac0131b705f70..8fad6bead133ffcbfe067be2681db1f77b010e91 100644 (file)
@@ -40,6 +40,24 @@ void CldHandler(char *msg)
   CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
 }
 
+void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
+{
+  int len, queueing, priobits,i; unsigned int *prioptr;
+  CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
+  CldPackFn pfn;
+  ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  if (pfn) {
+    pfn(&msg);
+    ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
+  }
+  CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
+  CmiSetInfo(msg,infofn);
+  for(i=0;i<npes;i++) {
+    CmiSyncSend(pes[i], len, msg);
+  }
+  CmiFree(msg);
+}
+
 void CldEnqueue(int pe, void *msg, int infofn)
 {
   int len, queueing, priobits; unsigned int *prioptr;
index b0a94c5bcddc73227bdbb909e4b3705df9002e62..03ce3dff546a82c18781ed6bac8f58cf31727ee7 100644 (file)
@@ -1455,6 +1455,15 @@ void Entry::genGroupDecl(XStr& str)
       str << "      CkSendMsg"<<node<<"Branch("<<epIdx()<<", msg, onPE, _ck_gid);\n";
       str << "    }\n";
     }
+    // entry method on multi PEs declaration
+    if(!isSync() && !container->isNodeGroup()) {
+      str << "    "<<Virtual()<<retType<<" "<<name<<"("<<paramComma();
+      str << "int npes, int *pes)";
+      str << " {\n"<<voidParamDecl();
+      str << "      CkSendMsg"<<node<<"BranchMulti(";
+      str <<epIdx()<<", msg, npes, pes, _ck_gid);\n";
+      str << "    }\n";
+    }
     // entry method onPE declaration with future
     if(isSync()) {
       str << "    "<<Virtual()<<"void "<<name<<"("<<paramComma()<<"int onPE, CkFutureID *fut)";