typed redn: Update example program to also reduce an array of doubles
authorRamprasad Venkataraman <ramv@illinois.edu>
Fri, 21 Oct 2011 18:08:59 +0000 (13:08 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Fri, 21 Oct 2011 18:09:27 +0000 (13:09 -0500)
Intended as a sanity check to ensure recent bug fixes don't get unfixed

examples/charm++/typed_reduction/TypedReduction.cc
examples/charm++/typed_reduction/TypedReduction.ci
examples/charm++/typed_reduction/TypedReduction.h

index 767ece06a5e07810fd4df25cd05289d0220fd018..7fffd118a1c390e861cd04b859935c073766824d 100644 (file)
@@ -44,6 +44,17 @@ void Driver::typed_array_done(int* results, int n)
 void Driver::typed_array_done2(int x, int y, int z)
 {
     CkPrintf("Typed Sum: (x, y, z) = (%d, %d, %d)\n", x, y, z);
+    CkCallback *cb = new CkCallback(
+            CkReductionTarget(Driver, typed_array_done3), thisProxy);
+    w.ckSetReductionClient(cb);
+    w.reduce_array_doubles();
+}
+
+void Driver::typed_array_done3(int n, double* results)
+{
+    CkPrintf("Typed Sum: [ ");
+    for (int i=0; i<n; ++i) CkPrintf("%.5g ", results[i]);
+    CkPrintf("]\n");
     CkExit();
 }
 
@@ -59,4 +70,9 @@ void Worker::reduce_array() {
     contribute(3*sizeof(int), &contribution, CkReduction::sum_int); 
 }
 
+void Worker::reduce_array_doubles() {
+    double contribution[3] = { 0.16180, 0.27182, 0.31415 };
+    contribute(3*sizeof(double), &contribution, CkReduction::sum_double);
+}
+
 #include "TypedReduction.def.h"
index 14df6e48d4d662fbe9d3fcd56b195731c41aacbd..004043ec9ac9eb0a138b1c6a9b0f21bbbf30a3a3 100644 (file)
@@ -5,11 +5,13 @@ mainmodule TypedReduction {
         entry [reductiontarget] void typed_done(int x);
         entry [reductiontarget] void typed_array_done(int results[n], int n);
         entry [reductiontarget] void typed_array_done2(int x, int y, int z);
+        entry [reductiontarget] void typed_array_done3(int n, double results[n]);
     }
 
     array [1d] Worker {
         entry Worker(void);
         entry void reduce(void);
         entry void reduce_array(void);
+        entry void reduce_array_doubles(void);
     }
 }
index 87e4b74740e73dd4643f48f0b1706fbdb9aaa039..4056ce9be9a9337b5f4b13b5e1457c0d3cc13674 100644 (file)
@@ -6,6 +6,7 @@ class Driver : public CBase_Driver {
         void typed_done(int x);
         void typed_array_done(int* results, int n);
         void typed_array_done2(int x, int y, int z);
+        void typed_array_done3(int n, double* results);
     private:
         CProxy_Worker w;
 };
@@ -16,5 +17,6 @@ class Worker : public CBase_Worker {
         Worker(CkMigrateMessage* m) {}
         void reduce();
         void reduce_array();
+        void reduce_array_doubles();
 };