charm4py: support setting usesAtSync at array element creation 89/4889/2
authorJuan Galvez <jjgalvez@illinois.edu>
Fri, 11 Jan 2019 17:43:41 +0000 (11:43 -0600)
committerJuan Galvez <juanjo.glvz@gmail.com>
Fri, 11 Jan 2019 18:29:50 +0000 (12:29 -0600)
Change-Id: Id538896acc0bb84e5215dc23a46289cc9c65c701

src/ck-core/charm.h
src/ck-core/ck.C
src/ck-core/ckarray.C
src/ck-core/ckarray.h

index edfd575f6ccf451e455f46f84173506bb5c6e70d..b27c7b0ebc4f84b244ce497cdc740066c1cf6373 100644 (file)
@@ -289,8 +289,8 @@ extern void CkCreateLocalGroup(CkGroupID groupID, int constructorIdx, envelope *
 extern void CkCreateLocalNodeGroup(CkGroupID groupID, int constructorIdx, envelope *env);
 
 extern int CkCreateGroupExt(int cIdx, int eIdx, int num_bufs, char **bufs, int *buf_sizes);
-extern int CkCreateArrayExt(int cIdx, int ndims, int *dims, int eIdx, int num_bufs, char **bufs, int *buf_sizes, int map_gid);
-extern void CkInsertArrayExt(int aid, int ndims, int *index, int epIdx, int onPE, int num_bufs, char **bufs, int *buf_sizes);
+extern int CkCreateArrayExt(int cIdx, int ndims, int *dims, int eIdx, int num_bufs, char **bufs, int *buf_sizes, int map_gid, char useAtSync);
+extern void CkInsertArrayExt(int aid, int ndims, int *index, int epIdx, int onPE, int num_bufs, char **bufs, int *buf_sizes, char useAtSync);
 extern void CkArrayDoneInsertingExt(int aid);
 extern void CkMigrateExt(int aid, int ndims, int *index, int toPe);
 
index c56dbd72ac2474e87a2dfcb8783889b27e826da6..e4e4a959c2a74e8565d80670ef27196cc0ab63ac 100644 (file)
@@ -2344,14 +2344,16 @@ int CkCreateGroupExt(int cIdx, int eIdx, int num_bufs, char **bufs, int *buf_siz
 
 // TODO options
 extern "C"
-int CkCreateArrayExt(int cIdx, int ndims, int *dims, int eIdx, int num_bufs, char **bufs, int *buf_sizes, int map_gid) {
+int CkCreateArrayExt(int cIdx, int ndims, int *dims, int eIdx, int num_bufs,
+                     char **bufs, int *buf_sizes, int map_gid, char useAtSync) {
   //static_cast<void>(impl_e_opts);
   CkAssert(num_bufs >= 1);
   int totalSize = 0;
   for (int i=0; i < num_bufs; i++) totalSize += buf_sizes[i];
-  int marshall_msg_size = (sizeof(char)*totalSize + sizeof(int)*2);
+  int marshall_msg_size = (sizeof(char)*totalSize + sizeof(int)*2 + sizeof(char));
   CkMarshallMsg *impl_msg = CkAllocateMarshallMsg(marshall_msg_size, NULL);
   PUP::toMem implP((void *)impl_msg->msgBuf);
+  implP|useAtSync;
   implP|totalSize;
   implP|buf_sizes[0];
   for (int i=0; i < num_bufs; i++) implP(bufs[i], buf_sizes[i]);
@@ -2371,13 +2373,15 @@ int CkCreateArrayExt(int cIdx, int ndims, int *dims, int eIdx, int num_bufs, cha
 
 // TODO options
 extern "C"
-void CkInsertArrayExt(int aid, int ndims, int *index, int epIdx, int onPE, int num_bufs, char **bufs, int *buf_sizes) {
+void CkInsertArrayExt(int aid, int ndims, int *index, int epIdx, int onPE, int num_bufs,
+                      char **bufs, int *buf_sizes, char useAtSync) {
   CkAssert(num_bufs >= 1);
   int totalSize = 0;
   for (int i=0; i < num_bufs; i++) totalSize += buf_sizes[i];
-  int marshall_msg_size = (sizeof(char)*totalSize + sizeof(int)*2);
+  int marshall_msg_size = (sizeof(char)*totalSize + sizeof(int)*2 + sizeof(char));
   CkMarshallMsg *impl_msg = CkAllocateMarshallMsg(marshall_msg_size, NULL);
   PUP::toMem implP((void *)impl_msg->msgBuf);
+  implP|useAtSync;
   implP|totalSize;
   implP|buf_sizes[0];
   for (int i=0; i < num_bufs; i++) implP(bufs[i], buf_sizes[i]);
index 64845aa41f3627c3243954c5c22c595a00a88b81..349a905aa7564cd7ad12c38305b1d155789c1b98 100644 (file)
@@ -505,20 +505,21 @@ void ArrayElement::recvBroadcast(CkMessage *m){
 #endif
 }
 
-ArrayElemExt::ArrayElemExt(void *impl_msg) {
-  // TODO make this configurable?
-  usesAtSync = true;
-
+ArrayElemExt::ArrayElemExt(void *impl_msg)
+{
   int chareIdx = ckGetChareType();
   ctorEpIdx = _chareTable[chareIdx]->getDefaultCtor();
   //printf("Constructor of ArrayElemExt, aid=%d, chareIdx=%d, ctorEpIdx=%d\n", ((CkGroupID)thisArrayID).idx, chareIdx, ctorEpIdx);
   CkMarshallMsg *impl_msg_typed = (CkMarshallMsg *)impl_msg;
   char *impl_buf = impl_msg_typed->msgBuf;
   PUP::fromMem implP(impl_buf);
+  implP|usesAtSync;
   int msgSize; implP|msgSize;
   int dcopy_start; implP|dcopy_start;
 
-  ArrayMsgRecvExtCallback(((CkGroupID)thisArrayID).idx, int(thisIndexMax.getDimension()), thisIndexMax.data(), ctorEpIdx, msgSize, impl_buf+(2*sizeof(int)), dcopy_start);
+  ArrayMsgRecvExtCallback(((CkGroupID)thisArrayID).idx, int(thisIndexMax.getDimension()),
+                          thisIndexMax.data(), ctorEpIdx,
+                          msgSize, impl_buf+(2*sizeof(int))+sizeof(char), dcopy_start);
 }
 
 /*********************** Spring Cleaning *****************
index 19b5838de1f86ff66d85efd2848af6ef08f0dea3..20f5e56f1ce65b1661393d65e58d2a458fce7361 100644 (file)
@@ -501,6 +501,15 @@ public:
   }
 
   void ResumeFromSync() {
+    if (!usesAtSync) {
+      // not sure in which cases it is useful to receive resumeFromSync if
+      // usesAtSync=false, but for now I'm disabling it because it is
+      // unnecessary overhead. In non-lb scenarios with NullLB, every LBPeriod
+      // (which is 0.5 s by default), the lb infrastructure calls atsync and
+      // resumefromsync on every chare array element, even if usesAtSync=false.
+      // that part of the lb infrastructure should be fixed first.
+      return;
+    }
     ArrayResumeFromSyncExtCallback(((CkGroupID)thisArrayID).idx,
                             int(thisIndexMax.getDimension()),
                             thisIndexMax.data());