add checkpoint test for group, nodegroup and readonly variable. The data after restar...
authorXiang Ni <xiangni2@illinois.edu>
Wed, 28 Aug 2013 20:26:37 +0000 (15:26 -0500)
committerXiang Ni <xiangni2@illinois.edu>
Wed, 28 Aug 2013 20:26:37 +0000 (15:26 -0500)
tests/charm++/chkpt/hello.C
tests/charm++/chkpt/hello.ci

index 763d0e220c5a132407d72fa061d26f79de82dc5d..27e9741724fbb9cecc9c230268df98574026611d 100644 (file)
@@ -4,7 +4,10 @@
 CProxy_Main mainProxy;
 CProxy_Hello helloProxy;
 CProxy_CHello chelloProxy;
+CProxy_HelloGroup helloGroupProxy;
+CProxy_HelloNodeGroup helloNodeGroupProxy;
 int nElements;
+int chkpPENum;
 
 class Main : public CBase_Main {
   int step;
@@ -16,7 +19,8 @@ public:
     a=123;b[0]=456;b[1]=789;
     nElements=8;
     delete m;
-
+    
+    chkpPENum = CkNumPes();
     CkPrintf("Running Hello on %d processors for %d elements\n",CkNumPes(),nElements);
     mainProxy = thisProxy;
     helloProxy = CProxy_Hello::ckNew(nElements);
@@ -24,6 +28,9 @@ public:
 
     chelloProxy = CProxy_CHello::ckNew(0);
     chelloProxy.SayHi(0);
+  
+    helloGroupProxy = CProxy_HelloGroup::ckNew();
+    helloNodeGroupProxy = CProxy_HelloNodeGroup::ckNew();
   }
   
   Main(CkMigrateMessage *m) : CBase_Main(m) { 
@@ -41,7 +48,7 @@ public:
       // the object pointer inside it.
     mainProxy = thisProxy;
     a=987;b[0]=654;b[1]=321;
-    CkPrintf("Main's MigCtor. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
+    CkPrintf("Main's MigCtor. a=%d(%p), b[0]=%d(%p), b[1]=%d, old PE number %d\n",a,&a,b[0],b,b[1], chkpPENum);
   }
 
   void myClient(CkReductionMsg *m){
@@ -52,7 +59,7 @@ public:
 
     int stepInc = *((int *)m->getData());
     CkAssert(step == stepInc);
-    CkPrintf("myClient. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
+    CkPrintf("myClient. a=%d(%p), b[0]=%d(%p), b[1]=%d\n",a,&a,b[0],b,b[1]);
     if(step == 3){
       CkCallback cb(CkIndex_Hello::SayHi(),helloProxy);
       CkStartCheckpoint("log",cb);
@@ -66,7 +73,7 @@ public:
     CBase_Main::pup(p);
     p|step;
     p|a; p(b,2);
-    CkPrintf("Main's PUPer. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
+    CkPrintf("Main's PUPer. a=%d(%p), b[0]=%d(%p), b[1]=%d\n",a,&a,b[0],b,b[1]);
   }
 };
 
@@ -112,5 +119,53 @@ public:
   }
 };
 
+class HelloGroup: public CBase_HelloGroup
+{
+  int data;
+public:
+  HelloGroup(){data = CkMyPe();}
+  HelloGroup(CkMigrateMessage *m): CBase_HelloGroup(m) {}
+
+  void pup(PUP::er &p)
+  {
+    p|data;
+    if(p.isUnpacking())
+    {
+      CkPrintf("[%d] data on Group %d\n", CkMyPe(), data);
+      if(chkpPENum == CkNumPes())
+      {
+        if(data!=CkMyPe())
+        {
+          CkAbort("data not recovered for Group");
+        }
+      }
+    }
+  }
+};
+
+class HelloNodeGroup: public CBase_HelloNodeGroup
+{
+  int data;
+public:
+  HelloNodeGroup(){data = CkMyNode();}
+  HelloNodeGroup(CkMigrateMessage *m): CBase_HelloNodeGroup(m) {}
+
+  void pup(PUP::er &p)
+  {
+    p|data;
+    if(p.isUnpacking())
+    {
+      CkPrintf("[%d] data on NOdeGroup %d\n", CkMyNode(), data);
+      if(chkpPENum == CkNumPes())
+      {
+        if(data!=CkMyNode())
+        {
+          CkAbort("data not recovered for NodeGroup");
+        }
+      }
+    }
+  }
+};
+
 #include "hello.def.h"
 
index 7faff24006a71d801597f80368c1c112cb0c2404..ea5847ef5a49900982fc10ab3e43ca81b282931a 100644 (file)
@@ -1,7 +1,11 @@
 mainmodule hello {
   readonly CProxy_Main mainProxy;
   readonly CProxy_Hello helloProxy;
+  readonly CProxy_CHello chelloProxy;
+  readonly CProxy_HelloGroup helloGroupProxy;
+  readonly CProxy_HelloNodeGroup helloNodeGroupProxy;
   readonly int nElements;
+  readonly int chkpPENum;
 
   mainchare [migratable] Main {
     entry Main(CkArgMsg *m);
@@ -17,4 +21,13 @@ mainmodule hello {
     entry CHello(void);
     entry void SayHi(int);
   };
+
+  group [migratable] HelloGroup{
+    entry HelloGroup(void);
+  };
+
+  nodegroup [migratable] HelloNodeGroup{
+    entry HelloNodeGroup(void);
+  };
+
 };