added initial section multicast.
authorGengbin Zheng <gzheng@illinois.edu>
Mon, 12 Sep 2011 20:20:38 +0000 (15:20 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Mon, 12 Sep 2011 20:20:38 +0000 (15:20 -0500)
examples/charm++/PMEMimic/PMEMimic_Parallel/Makefile
examples/charm++/PMEMimic/PMEMimic_Parallel/PMEMimic.C
examples/charm++/PMEMimic/PMEMimic_Parallel/PMEMimic.ci

index b694cdf9e3fb71a21bfa1ea094b4a22e0da09aac..b1d5851a3968ba444990974bc02ebf0c40e8d521 100644 (file)
@@ -5,10 +5,10 @@ OBJS = PMEMimic.o
 all: pgm pgm.prj
 
 pgm: $(OBJS)
-       $(CHARMC) -language charm++ -o pgm $(OBJS)
+       $(CHARMC) -language charm++ -o pgm $(OBJS) -module CkMulticast
 
 pgm.prj: $(OBJS)
-       $(CHARMC) -language charm++ -tracemode projections -o pgm.prj $(OBJS)
+       $(CHARMC) -language charm++ -tracemode projections -o pgm.prj $(OBJS) -module CkMulticast
 
 PMEMimic.decl.h: PMEMimic.ci
        $(CHARMC)  PMEMimic.ci
index 85629c60dc1378bcf4f74cd3820bb4a4cee29a52..e3706288711f92e027801b65a1fffe60f5e4d079 100644 (file)
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include "PMEMimic.decl.h"
+#include "ckmulticast.h"
 
 /*readonly*/ CProxy_Main mainProxy;
 /*readonly*/ 
@@ -15,7 +16,9 @@ CProxy_PMEPencil_X pme_x;
 CProxy_PMEPencil_Y pme_y;
 CProxy_PMEPencil_Z pme_z;
 
-class DataMsg : public CMessage_DataMsg
+CkGroupID mCastGrpId;
+
+class DataMsg : public CkMcastBaseMsg, public CMessage_DataMsg
 {
 public:
     int phrase;
@@ -86,6 +89,19 @@ public:
       pme_y = CProxy_PMEPencil_Y::ckNew(1, opts_y);
       pme_z = CProxy_PMEPencil_Z::ckNew(2, opts_z);
 
+      mCastGrpId = CProxy_CkMulticastMgr::ckNew();
+      CkMulticastMgr *mg = CProxy_CkMulticastMgr(mCastGrpId).ckLocalBranch();
+
+      CProxySection_PMEPencil_X mcp_x[grid_y][grid_z];
+
+      for (int i=0; i<grid_y; i++)
+        for (int j=0; j<grid_z; j++) {
+          mcp_x[i][j] = CProxySection_PMEPencil_X::ckNew(pme_x, i, i, 1, j, j, 1,  0, pes_per_node-1, 1);
+          mcp_x[i][j].ckSectionDelegate(mg);
+          CkCallback *cb = new CkCallback(CkIndex_PMEPencil_X::cb_client(NULL), CkArrayIndex3D(i,j,0), pme_x);
+          mg->setReductionClient(mcp_x[i][j], cb);
+      }
+
       done_pme=0;
       startTimer = CmiWallTimer();
       pme_x.start();
@@ -202,7 +218,10 @@ public:
     }
     delete msg_recv;
   }
+  void cb_client(CkReductionMsg *msg) {
+  }
 };
+
 /*array [1D]*/
 class PMEPencil_Y : public CBase_PMEPencil_Y
 {
@@ -299,6 +318,8 @@ public:
     }
     delete msg_recv;
   }
+  void cb_client(CkReductionMsg *msg) {
+  }
 };
 
 /*array [1D]*/
@@ -397,6 +418,8 @@ public:
     }
     delete msg_recv;
   }
+  void cb_client(CkReductionMsg *msg) {
+  }
 };
 
 
index 9aeb5850e0f4532428e49ec1cb19c92b32764b04..04db7cbc413ea4cc9e57a2bdff58590d1d60db90 100644 (file)
@@ -12,6 +12,8 @@ mainmodule PMEMimic {
   readonly CProxy_PMEPencil_Y pme_y;
   readonly CProxy_PMEPencil_Z pme_z;
 
+  readonly CkGroupID mCastGrpId;
+
   group PMEMap : CkArrayMap {
       entry PMEMap(int); 
   }
@@ -27,17 +29,21 @@ mainmodule PMEMimic {
     entry PMEPencil_X(int);
     entry void start();
     entry void recvTrans( DataMsg *m);
+    entry void cb_client(CkReductionMsg *msg);
   };        
  
   array [3D] PMEPencil_Y {
     entry PMEPencil_Y(int);
     entry void start();
     entry void recvTrans( DataMsg *m);
+    entry void cb_client(CkReductionMsg *msg);
   }; 
-array [3D] PMEPencil_Z {
+
+  array [3D] PMEPencil_Z {
     entry PMEPencil_Z(int);
     entry void start();
     entry void recvTrans( DataMsg *m);
+    entry void cb_client(CkReductionMsg *msg);
   };  
 
 };