Merge branch 'charm' into emenese2/liveVizBoundArray emenese2/liveVizBoundArray
authorEsteban Meneses <emenese2@illinois.edu>
Mon, 23 Jul 2012 16:29:31 +0000 (11:29 -0500)
committerEsteban Meneses <emenese2@illinois.edu>
Mon, 23 Jul 2012 16:29:31 +0000 (11:29 -0500)
src/libs/ck-libs/liveViz/liveViz.C
src/libs/ck-libs/liveViz/liveViz.ci
src/libs/ck-libs/liveViz/liveViz.h

index 68811823a1b40b82f63e5a852e5093f554a6bda6..8a77d8944d1c76a8e4cb7f2562b785ef50e91a84 100644 (file)
@@ -12,6 +12,8 @@ PUPbytes(liveVizConfig)
 liveVizConfig lv_config;
 CkReduction::reducerType image_combine_reducer;
 CProxy_liveVizGroup lvG;
+CProxy_LiveVizBoundElement lvBoundArray;
+bool usingBoundArray;
 CkCallback clientGetImageCallback;
 
 //Called by clients to start liveViz.
@@ -23,6 +25,30 @@ void liveVizInit(const liveVizConfig &cfg, CkArrayID a, CkCallback c)
   //  lv_config can't be a readonly because we may be called after
   //  main::main (because, e.g., communication is needed to find the
   //  bounding box inside cfg).
+  usingBoundArray = false;
+  lvG = CProxy_liveVizGroup::ckNew(cfg);
+}
+
+//Called by clients to start liveViz.
+void liveVizInit(const liveVizConfig &cfg, CkArrayID a, CkCallback c, CkArrayOptions &opts)
+{
+  if (CkMyPe()!=0) CkAbort("liveVizInit must be called only on processor 0!");
+  clientGetImageCallback=c;
+  //Broadcast the liveVizConfig object via our group:
+  //  lv_config can't be a readonly because we may be called after
+  //  main::main (because, e.g., communication is needed to find the
+  //  bounding box inside cfg).
+  usingBoundArray = true;
+  CkArrayOptions boundOpts;
+  int dimension = opts.getNumInitial().dimension;
+  switch(dimension){
+  case 1: boundOpts.setNumInitial(opts.getNumInitial().data()[0]); break;
+  case 2: boundOpts.setNumInitial(opts.getNumInitial().data()[0],opts.getNumInitial().data()[1]); break;
+  case 3: boundOpts.setNumInitial(opts.getNumInitial().data()[0],opts.getNumInitial().data()[1],opts.getNumInitial().data()[2]); break;
+  default: CmiAbort("Arrays with more than 3 dimensions are not currently supported by liveViz");
+  }
+  boundOpts.bindTo(a);
+  lvBoundArray = CProxy_LiveVizBoundElement::ckNew(boundOpts);
   lvG = CProxy_liveVizGroup::ckNew(cfg);
 }
 
@@ -91,8 +117,12 @@ void liveVizDeposit(const liveVizRequest &req,
 
   //Contribute this image to the reduction
   msg->setCallback(CkCallback(vizReductionHandler));
-  
-  client->contribute(msg);
+  if(usingBoundArray){
+    lvBoundArray[client->thisIndexMax].deposit(msg);
+  }else {
+    client->contribute(msg);
+  }
 }
 
 
@@ -215,6 +245,7 @@ void liveVizDeposit(const liveVizRequest &req,
 
 //Contribute this image to the reduction
   msg->setCallback(CkCallback(vizReductionHandler));
+
   client->contribute(msg);
 }
 
index 500741241024c7ebc32faa117992f42a38c746c6..b96c6229cb312ab2912166072206e0eae8795864 100644 (file)
@@ -1,14 +1,21 @@
 module liveViz {
-message liveVizRequestMsg {
-       char data[];
-};
-extern module liveVizPoll;
+       message liveVizRequestMsg {
+               char data[];
+       };
 
-initcall void liveVizNodeInit(void);
+       extern module liveVizPoll;
 
-readonly CProxy_liveVizGroup lvG;
-group [migratable] liveVizGroup {
-       entry liveVizGroup(const liveVizConfig &cfg);
-};
+       initcall void liveVizNodeInit(void);
 
+       readonly CProxy_liveVizGroup lvG;
+       group [migratable] liveVizGroup {
+               entry liveVizGroup(const liveVizConfig &cfg);
+       };
+
+       readonly CProxy_LiveVizBoundElement lvBoundArray;
+       readonly bool usingBoundArray;
+       array [Max] LiveVizBoundElement {
+               entry LiveVizBoundElement();
+               entry [local] void deposit(CkReductionMsg *msg);
+       }; 
 }
index 8dda5ad6281dc04d8a2f5b8a7618c4fee172f210..06215c59baf3537340a083ca997968e7a1d5457f 100644 (file)
@@ -31,6 +31,7 @@ typedef enum {
   The image parameters are passed in as a "liveVizRequestMsg *" message.
 */
 void liveVizInit(const liveVizConfig &cfg, CkArrayID a, CkCallback c);
+void liveVizInit(const liveVizConfig &cfg, CkArrayID a, CkCallback c, CkArrayOptions &opts);
 
 class liveVizRequestMsg : public CMessage_liveVizRequestMsg {
 public:
@@ -135,6 +136,17 @@ void liveVizPollDeposit(ArrayElement *from,
                                                );
 
 
+class LiveVizBoundElement : public CBase_LiveVizBoundElement {
+public:
+       LiveVizBoundElement(){}
+       LiveVizBoundElement(CkMigrateMessage *msg){}
+       ~LiveVizBoundElement(){}
+       
+       void deposit(CkReductionMsg *msg){
+               contribute(msg);
+       }
+};
+
 
 
 #endif /* def(thisHeader) */