Cleanup: remove unnecessary delegation of cross-array section to CkMulticast 65/4565/7
authorSam White <white67@illinois.edu>
Wed, 12 Sep 2018 02:12:35 +0000 (21:12 -0500)
committerSam White <white67@illinois.edu>
Sun, 16 Sep 2018 19:40:33 +0000 (14:40 -0500)
- Remove manual delegation from the xarraySection example code.

- Make the documentation about auto-delegation of cross-array sections
  more clear.

Change-Id: I2ed7721b21d482eacf519ff985ecb05c6f55bb6f

doc/charm++/sections.tex
examples/charm++/hello/xarraySection/Makefile
examples/charm++/hello/xarraySection/hello.C
examples/charm++/hello/xarraySection/hello.ci

index 0cc542f2da0fc3e291e4c2c0e9538ee13ba332a9..0b5d25c9d7335dc320d1ffd4978974c25ec08ce1 100644 (file)
@@ -106,9 +106,9 @@ safely invoke the entry functions on the section proxy.
 
 \subsection{Optimized multicast via CkMulticast}
 
-\charmpp{} has an inbuilt CkMulticast library that optimizes section communications.
-By default, charm RTS will use this library for array sections. For group sections,
-the user must manually delegate to CkMulticast (see \ref{Manual Delegation}).
+\charmpp{} has a built-in CkMulticast library that optimizes section communications.
+By default, the \charmpp{} runtime system will use this library for array and cross-array sections. For group sections,
+the user must manually delegate the section proxy to CkMulticast (see \ref{Manual Delegation}).
 
 By default, CkMulticast builds a spanning tree for multicast/reduction
 with a factor of 2 (binary tree). One can specify a different branching factor when creating the
index bea62a8ce8c8ac84c167d314d46d981d25d3c12a..5a8e7c1d3c58a3a550646b45a8e3332637a395d4 100644 (file)
@@ -20,11 +20,7 @@ ARGS      = 10 3 3
 # Specify the compilers, run script, flags etc.
 CXX       = $(CHARMBIN)/charmc
 CHARMC    = $(CHARMBIN)/charmc
-OPT       = -O0 -g
-CPPFLAGS +=
 CXXFLAGS += -language charm++ $(OPT)
-LDFLAGS  += -module CkMulticast
-LDLIBS   +=
 EXECFLAGS = +p$(NP)
 ifdef $(NODELIST)
   EXECFLAGS += ++nodelist $(NODELIST)
@@ -38,7 +34,7 @@ endif
 all: $(TARGET)
 
 $(TARGET): $(OBJ)
-       $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+       $(CXX) $(CXXFLAGS) -o $@ $^
 
 clean:
        $(RM) $(wildcard *.decl.h *.def.h *.d *.di *.o *.log *.projrc *.sts *.stamp) $(TARGET) charmrun
index 21cc5f94dfb9aa08b2ce05f140dc877d4529b6c3..1015a2c94292124327485cb8046ee83fbd2d5ee3 100644 (file)
@@ -34,10 +34,6 @@ public:
     CkPrintf("\tnum PEs = %d\n\tnum arrays = %d\n\tnum elements = %d\n\tsection size = %d\n\tnum iterations = %d\n",
              CkNumPes(), numArrays, numElements, sectionSize, maxIter);
 
-    // Create a multicast manager group
-    CkGroupID mcastMgrGID = CProxy_CkMulticastMgr::ckNew();
-    CkMulticastMgr *mcastMgr = CProxy_CkMulticastMgr(mcastMgrGID).ckLocalBranch();
-
     // Setup section member index bounds
     int afloor = 0, aceiling = sectionSize-1;
 
@@ -49,7 +45,7 @@ public:
     for(int k=0; k < numArrays; k++)
     {
         // Create the array
-        CProxy_Hello array = CProxy_Hello::ckNew(k, mcastMgrGID, numElements);
+        CProxy_Hello array = CProxy_Hello::ckNew(k, numElements);
         // Store the AID
         arrID[k]  = array.ckGetArrayID();
         // Create a list of section member indices in this array
@@ -57,12 +53,9 @@ public:
         for(int i=afloor,j=0; i <= aceiling; i++,j++)
             elems[k][j] = CkArrayIndex1D(i);
     }
-    // Create the x-array-section
+    // Create the x-array section, which is autodelegated to CkMulticast
     sectionProxy = CProxySection_Hello(arrID, elems);
 
-    // Delegate the section comm to the CkMulticast library
-    sectionProxy.ckSectionDelegate(mcastMgr);
-
     // Start the test by pinging the section
     pingMsg *msg = new pingMsg(numIter);
     sectionProxy.mcastPing(msg);
@@ -108,34 +101,24 @@ private:
 class Hello : public CBase_Hello
 {
 public:
-  Hello(int _aNum, CkGroupID mcastMgrGID): aNum(_aNum), mcastMgr(NULL), isCookieSet(false)
+  Hello(int _aNum): aNum(_aNum)
   {
     CkPrintf("Array %d, Element %d created on PE %d\n", aNum, thisIndex, CkMyPe());
-    mcastMgr = CProxy_CkMulticastMgr(mcastMgrGID).ckLocalBranch();
   }
 
-  Hello(CkMigrateMessage *m) {}
-
   void mcastPing(pingMsg *msg)
   {
     // Say hello world
     CkPrintf("Array %d, Element %d received ping number %d\n", aNum, thisIndex, msg->hiNo);
-    // Save the section cookie, the first time you get it
-    if (! isCookieSet)
-    {
-        sectionCookie = msg->_cookie;
-        isCookieSet = true;
-    }
+    CkGetSectionInfo(sectionCookie, msg);
     // Contribute to the section reduction
-    mcastMgr->contribute(sizeof(int), &(msg->hiNo), CkReduction::sum_int, sectionCookie, CkCallback(CkIndex_Main::rednPong(NULL), mainProxy));
+    CProxySection_Hello::contribute(sizeof(int), &(msg->hiNo), CkReduction::sum_int, sectionCookie, CkCallback(CkIndex_Main::rednPong(NULL), mainProxy));
     delete msg;
   }
 
 private:
   int aNum;
-  CkMulticastMgr *mcastMgr;
   CkSectionInfo sectionCookie;
-  bool isCookieSet;
 };
 
 #include "hello.def.h"
index b4d51c10f27be078fc184c3f5499522458af07e0..03f4191e2e9014c26312310f8f8a86ba74d4560d 100644 (file)
@@ -9,7 +9,7 @@ mainmodule hello {
   };
 
   array [1D] Hello {
-    entry Hello(int aNum, CkGroupID mcastMgrGID);
+    entry Hello(int aNum);
     entry void mcastPing(pingMsg *msg);
   };
 };