docs chare array: Array example code
authorJonathan Lifflander <avunda@mobile-105-100.near.uiuc.edu>
Tue, 31 Jul 2012 15:40:24 +0000 (10:40 -0500)
committerJonathan Lifflander <avunda@mobile-105-100.near.uiuc.edu>
Tue, 31 Jul 2012 15:40:57 +0000 (10:40 -0500)
examples/charm++/array/Makefile [new file with mode: 0644]
examples/charm++/array/pgm.C [new file with mode: 0644]
examples/charm++/array/pgm.ci [new file with mode: 0644]

diff --git a/examples/charm++/array/Makefile b/examples/charm++/array/Makefile
new file mode 100644 (file)
index 0000000..4cdce42
--- /dev/null
@@ -0,0 +1,16 @@
+# modify the path of CHARMC
+CHARMC=../../../bin/charmc $(OPTS)
+
+all: pgm
+
+pgm: pgm.o
+       $(CHARMC) pgm.o  -o pgm -language charm++
+
+pgm.o : pgm.C pgm.def.h
+       $(CHARMC) -c pgm.C
+
+pgm.decl.h pgm.def.h: pgm.ci
+       $(CHARMC)  pgm.ci
+
+clean:
+       rm -f pgm pgm_prof *.o conv-host *.decl.h *.def.h *~ charmrun *.log *.sts core charmrun.exe pgm.exe pgm.pdb pgm.ilk
diff --git a/examples/charm++/array/pgm.C b/examples/charm++/array/pgm.C
new file mode 100644 (file)
index 0000000..7838c72
--- /dev/null
@@ -0,0 +1,75 @@
+#include "arr.decl.h"
+
+/*readonly*/ CProxy_Main mainProxy;
+
+struct Main : CBase_Main {
+  int numRecv;
+
+  Main(CkArgMsg* msg)
+    : numRecv(0)
+  {
+    delete msg;
+
+    mainProxy = thisProxy;
+
+    const int X = 3;
+    const int Y = 3;
+    const int Z = 3;
+    CProxy_ArrayA a1 = CProxy_ArrayA::ckNew(X);
+    CProxy_ArrayB b1 = CProxy_ArrayB::ckNew(X, Y);
+    CProxy_ArrayC c1 = CProxy_ArrayC::ckNew(X, Y, Z);
+
+    a1.e();
+    b1.e();
+    c1.e();
+  }
+
+  void finished() {
+    if (++numRecv == 3) CkExit();
+  }
+};
+
+struct ArrayA : CBase_ArrayA {
+  ArrayA() {
+    CkPrintf("ArrayA: created element %d\n", thisIndex);
+  }
+  ArrayA(CkMigrateMessage*) { }
+  void e() { contribute(CkCallback(CkReductionTarget(Main, finished), mainProxy)); }
+};
+
+struct ArrayB : CBase_ArrayB {
+  ArrayB() {
+    CkPrintf("ArrayB: created element (%d,%d)\n", thisIndex.x, thisIndex.y);
+  }
+  ArrayB(CkMigrateMessage*) { }
+  void e() { contribute(CkCallback(CkReductionTarget(Main, finished), mainProxy)); }
+};
+
+struct ArrayC : CBase_ArrayC {
+  ArrayC() {
+    CkPrintf("ArrayB: created element (%d,%d,%d)\n", thisIndex.x, thisIndex.y, thisIndex.z);
+  }
+  ArrayC(CkMigrateMessage*) { }
+  void e() { contribute(CkCallback(CkReductionTarget(Main, finished), mainProxy)); }
+};
+
+struct ArrayD : CBase_ArrayD {
+  ArrayD() {}
+  ArrayD(CkMigrateMessage*) { }
+  void e() { }
+};
+
+struct ArrayE : CBase_ArrayE {
+  ArrayE() {}
+  ArrayE(CkMigrateMessage*) { }
+  void e() { }
+};
+
+struct ArrayF : CBase_ArrayF {
+  ArrayF() {}
+  ArrayF(CkMigrateMessage*) { }
+  void e() { }
+};
+
+
+#include "arr.def.h"
diff --git a/examples/charm++/array/pgm.ci b/examples/charm++/array/pgm.ci
new file mode 100644 (file)
index 0000000..cca8582
--- /dev/null
@@ -0,0 +1,15 @@
+mainmodule arr {
+  readonly CProxy_Main mainProxy;
+
+  mainchare Main {
+    entry Main(CkArgMsg*);
+    entry [reductiontarget] void finished();
+  }
+
+  array [1D]  ArrayA { entry ArrayA(); entry void e(); }
+  array [2D]  ArrayB { entry ArrayB(); entry void e(); }
+  array [3D]  ArrayC { entry ArrayC(); entry void e(); }
+  array [4D]  ArrayD { entry ArrayD(); entry void e(); }
+  array [5D]  ArrayE { entry ArrayE(); entry void e(); }
+  array [6D]  ArrayF { entry ArrayF(); entry void e(); }
+}