Zero copy direct API - Refactor and Cleanup 21/4121/12
authorNitin Bhat <nbhat4@illinois.edu>
Thu, 3 May 2018 19:15:11 +0000 (12:15 -0700)
committerNitin Bhat <nbhat4@illinois.edu>
Tue, 22 May 2018 17:47:54 +0000 (12:47 -0500)
Replaced CkNcpySource and CkNcpyDestination with a single class,
CkNcpyBuffer. Renamed the methods rget and rput to get and put
respectively. Merged source and destination functions into a single
function. Renamed releaseResource method to deregisterMem.

Change-Id: I9ea9b22dc7eaf40be7e978fe46a36f80c9aef7f2

54 files changed:
examples/charm++/zerocopy/direct_api/prereg/Makefile
examples/charm++/zerocopy/direct_api/prereg/get_put_pingpong/get_put_pingpong.C
examples/charm++/zerocopy/direct_api/prereg/get_put_pingpong/get_put_pingpong.ci
examples/charm++/zerocopy/direct_api/prereg/pingpong/pingpong.C
examples/charm++/zerocopy/direct_api/prereg/pingpong/pingpong.ci
examples/charm++/zerocopy/direct_api/prereg/simple_get/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/prereg/simple_get/simple_get.C [moved from examples/charm++/zerocopy/direct_api/prereg/simple_rget/simple_rget.C with 69% similarity]
examples/charm++/zerocopy/direct_api/prereg/simple_get/simple_get.ci [moved from examples/charm++/zerocopy/direct_api/reg/simple_rget/simple_rget.ci with 79% similarity]
examples/charm++/zerocopy/direct_api/prereg/simple_put/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/prereg/simple_put/simple_put.C [moved from examples/charm++/zerocopy/direct_api/prereg/simple_rput/simple_rput.C with 68% similarity]
examples/charm++/zerocopy/direct_api/prereg/simple_put/simple_put.ci [moved from examples/charm++/zerocopy/direct_api/unreg/simple_rput/simple_rput.ci with 76% similarity]
examples/charm++/zerocopy/direct_api/prereg/simple_rget/Makefile [deleted file]
examples/charm++/zerocopy/direct_api/prereg/simple_rput/Makefile [deleted file]
examples/charm++/zerocopy/direct_api/reg/Makefile
examples/charm++/zerocopy/direct_api/reg/get_put_pingpong/get_put_pingpong.C
examples/charm++/zerocopy/direct_api/reg/get_put_pingpong/get_put_pingpong.ci
examples/charm++/zerocopy/direct_api/reg/pingpong/pingpong.C
examples/charm++/zerocopy/direct_api/reg/pingpong/pingpong.ci
examples/charm++/zerocopy/direct_api/reg/simple_get/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/reg/simple_get/simple_get.C [moved from examples/charm++/zerocopy/direct_api/reg/simple_rget/simple_rget.C with 67% similarity]
examples/charm++/zerocopy/direct_api/reg/simple_get/simple_get.ci [moved from examples/charm++/zerocopy/direct_api/unreg/simple_rget/simple_rget.ci with 79% similarity]
examples/charm++/zerocopy/direct_api/reg/simple_put/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/reg/simple_put/simple_put.C [moved from examples/charm++/zerocopy/direct_api/reg/simple_rput/simple_rput.C with 66% similarity]
examples/charm++/zerocopy/direct_api/reg/simple_put/simple_put.ci [moved from examples/charm++/zerocopy/direct_api/prereg/simple_rput/simple_rput.ci with 76% similarity]
examples/charm++/zerocopy/direct_api/reg/simple_rget/Makefile [deleted file]
examples/charm++/zerocopy/direct_api/reg/simple_rput/Makefile [deleted file]
examples/charm++/zerocopy/direct_api/unreg/Makefile
examples/charm++/zerocopy/direct_api/unreg/get_put_pingpong/get_put_pingpong.C
examples/charm++/zerocopy/direct_api/unreg/get_put_pingpong/get_put_pingpong.ci
examples/charm++/zerocopy/direct_api/unreg/pingpong/pingpong.C
examples/charm++/zerocopy/direct_api/unreg/pingpong/pingpong.ci
examples/charm++/zerocopy/direct_api/unreg/simple_get/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/unreg/simple_get/simple_get.C [moved from examples/charm++/zerocopy/direct_api/unreg/simple_rget/simple_rget.C with 68% similarity]
examples/charm++/zerocopy/direct_api/unreg/simple_get/simple_get.ci [moved from examples/charm++/zerocopy/direct_api/prereg/simple_rget/simple_rget.ci with 79% similarity]
examples/charm++/zerocopy/direct_api/unreg/simple_put/Makefile [new file with mode: 0644]
examples/charm++/zerocopy/direct_api/unreg/simple_put/simple_put.C [moved from examples/charm++/zerocopy/direct_api/unreg/simple_rput/simple_rput.C with 67% similarity]
examples/charm++/zerocopy/direct_api/unreg/simple_put/simple_put.ci [moved from examples/charm++/zerocopy/direct_api/reg/simple_rput/simple_rput.ci with 76% similarity]
examples/charm++/zerocopy/direct_api/unreg/simple_rget/Makefile [deleted file]
examples/charm++/zerocopy/direct_api/unreg/simple_rput/Makefile [deleted file]
src/arch/gni/machine-onesided.c
src/arch/gni/machine-onesided.h
src/arch/gni/machine.C
src/arch/mpi/machine-onesided.c
src/arch/mpi/machine-onesided.h
src/arch/ofi/machine-onesided.c
src/arch/ofi/machine-onesided.h
src/arch/util/machine-broadcast.c
src/arch/util/machine-rdma.h
src/arch/verbs/machine-onesided.c
src/arch/verbs/machine-onesided.h
src/ck-core/ckrdma.C
src/ck-core/ckrdma.h
src/conv-core/conv-rdma.c
src/conv-core/conv-rdma.h

index e32d5abba65e84a17e6417abad4d274ad8a7da7d..b4e4b665d4244f302c59f49da9f90a7a2124c33a 100644 (file)
@@ -1,4 +1,4 @@
-DIRS   = simple_rget simple_rput get_put_pingpong pingpong
+DIRS   = simple_get simple_put get_put_pingpong pingpong
 
 all:
        for d in $(DIRS); do \
index a47cd6ad810b9e3bcc88c484f3e2ead03431f297..62edffb029549a3f310e274eee92e527fb79bcb3 100644 (file)
@@ -62,9 +62,9 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, recvCbCounter, sendCbCounter;
   CkCallback sendCb, recvCb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
-  CkNcpyDestination otherDest1, otherDest2, otherDest3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer otherDest1, otherDest2, otherDest3;
 
 public:
   Ping1(int size)
@@ -89,17 +89,17 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), sendCb, CK_BUFFER_PREREG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), sendCb, CK_BUFFER_PREREG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), sendCb, CK_BUFFER_PREREG);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), sendCb, CK_BUFFER_PREREG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), sendCb, CK_BUFFER_PREREG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), sendCb, CK_BUFFER_PREREG);
 
     iArr2 = (int *)CkRdmaAlloc(size*sizeof(int));
     dArr2 = (double *)CkRdmaAlloc(size*sizeof(double));
     cArr2 = (char *)CkRdmaAlloc(size*sizeof(char));
 
-    myDest1 = CkNcpyDestination(iArr2, size*sizeof(int), recvCb, CK_BUFFER_PREREG);
-    myDest2 = CkNcpyDestination(dArr2, size*sizeof(double), recvCb, CK_BUFFER_PREREG);
-    myDest3 = CkNcpyDestination(cArr2, size*sizeof(char), recvCb, CK_BUFFER_PREREG);
+    myDest1 = CkNcpyBuffer(iArr2, size*sizeof(int), recvCb, CK_BUFFER_PREREG);
+    myDest2 = CkNcpyBuffer(dArr2, size*sizeof(double), recvCb, CK_BUFFER_PREREG);
+    myDest3 = CkNcpyBuffer(cArr2, size*sizeof(char), recvCb, CK_BUFFER_PREREG);
 
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3, myDest1, myDest2, myDest3);
   }
@@ -108,9 +108,9 @@ public:
     sendCbCounter++;
     if(sendCbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
 
       if(thisIndex == 1){
         CmiRdmaFree(iArr1);
@@ -127,25 +127,25 @@ public:
     if(recvCbCounter == 3) {
 
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
 
       if(thisIndex == 1){
-        CkPrintf("[%d][%d][%d] Rget call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Get call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
-        // Create a nocopy sources for me to Rput from into destinations received
-        mySrc1 = CkNcpySource(iArr1, sizeof(int)*size, sendCb, CK_BUFFER_PREREG);
-        mySrc2 = CkNcpySource(dArr1, sizeof(double)*size, sendCb, CK_BUFFER_PREREG);
-        mySrc3 = CkNcpySource(cArr1, sizeof(char)*size, sendCb, CK_BUFFER_PREREG);
+        // Create a nocopy sources for me to Put from into destinations received
+        mySrc1 = CkNcpyBuffer(iArr1, sizeof(int)*size, sendCb, CK_BUFFER_PREREG);
+        mySrc2 = CkNcpyBuffer(dArr1, sizeof(double)*size, sendCb, CK_BUFFER_PREREG);
+        mySrc3 = CkNcpyBuffer(cArr1, sizeof(char)*size, sendCb, CK_BUFFER_PREREG);
 
-        // Index 1 Rputting to 0
-        mySrc1.rput(otherDest1);
-        mySrc2.rput(otherDest2);
-        mySrc3.rput(otherDest3);
+        // Index 1 Putting to 0
+        mySrc1.put(otherDest1);
+        mySrc2.put(otherDest2);
+        mySrc3.put(otherDest3);
 
       } else {
-        CkPrintf("[%d][%d][%d] Rput call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Put call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
         compareArray(iArr1, iArr2, size);
         compareArray(dArr1, dArr2, size);
@@ -159,22 +159,22 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 1);
     otherDest1 = dest1;
     otherDest2 = dest2;
     otherDest3 = dest3;
 
-    // Create nocopy destinations for me to Rget from sources received
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), recvCb, CK_BUFFER_PREREG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), recvCb, CK_BUFFER_PREREG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), recvCb, CK_BUFFER_PREREG);
+    // Create nocopy destinations for me to Get from sources received
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), recvCb, CK_BUFFER_PREREG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), recvCb, CK_BUFFER_PREREG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), recvCb, CK_BUFFER_PREREG);
 
-    // Index 1 Rgetting from 0
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Index 1 Getting from 0
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 };
 
index 6f93c891db073722f2f0a69a2bc7891e65c745ca..dd6c5eb94d2bd79feeed4dc14bcf5be2947f4451 100644 (file)
@@ -12,7 +12,7 @@ mainmodule simple_direct {
     entry void start();
     entry void senderCallback(CkDataMsg *m);
     entry void receiverCallback(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
   };
 
 };
index c762388eec2da4611a69b38896b675c8c9210994..4ff7b23db8748878b9879e5b6a40bf77641dde33 100644 (file)
@@ -56,8 +56,8 @@ class Ping1 : public CBase_Ping1
   int counter;
   int otherIndex;
   double start_time, end_time, reg_time, zcpy_time1, zcpy_time2;
-  CkNcpySource mySrc;
-  CkNcpyDestination myDest;
+  CkNcpyBuffer mySrc;
+  CkNcpyBuffer myDest;
   char *nocopyMsg, *otherMsg;
 
   public:
@@ -81,7 +81,7 @@ class Ping1 : public CBase_Ping1
       iterations = smallIter;
 
     start_time = CkWallTimer();
-    // send CkNcpySource to 1
+    // send CkNcpyBuffer to 1
     thisProxy[1].recv(nocopyMsg, size);
   }
 
@@ -105,11 +105,11 @@ class Ping1 : public CBase_Ping1
   void setupGetGetPingpong(int size) {
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_PREREG);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_PREREG);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackGetGetPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_PREREG);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_PREREG);
 
     thisProxy[0].beginGetGetPingpong();
   }
@@ -123,8 +123,8 @@ class Ping1 : public CBase_Ping1
     }
   }
 
-  void recvNcpySrcInfo(CkNcpySource otherSrc) {
-    myDest.rget(otherSrc);
+  void recvNcpySrcInfo(CkNcpyBuffer otherSrc) {
+    myDest.get(otherSrc);
   }
 
   void callbackGetGetPingpong(CkDataMsg *m) {
@@ -146,8 +146,8 @@ class Ping1 : public CBase_Ping1
 
   void endGetGetPingpong() {
     counter = 0;
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].doneGetGetPingpong();
   }
 
@@ -163,11 +163,11 @@ class Ping1 : public CBase_Ping1
 
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_PREREG);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_PREREG);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackPutPutPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_PREREG);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_PREREG);
 
     thisProxy[0].beginPutPutPingpong();
   }
@@ -186,8 +186,8 @@ class Ping1 : public CBase_Ping1
     thisProxy[otherIndex].recvNcpyDestInfo(myDest);
   }
 
-  void recvNcpyDestInfo(CkNcpyDestination otherDest) {
-    mySrc.rput(otherDest);
+  void recvNcpyDestInfo(CkNcpyBuffer otherDest) {
+    mySrc.put(otherDest);
   }
 
   void callbackPutPutPingpong(CkDataMsg *m) {
@@ -216,8 +216,8 @@ class Ping1 : public CBase_Ping1
   }
 
   void endPutPutPingpong() {
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].donePutPutPingpong();
   }
 
index e1de15b5033091f337f7278a10fcab2e1b18014f..8a84d4f786994098f346d2d9d7129233d392f350 100644 (file)
@@ -23,7 +23,7 @@ mainmodule pingpong {
     entry void setupGetGetPingpong(int size);
     entry void beginGetGetPingpong();
     entry void callbackGetGetPingpong(CkDataMsg *m);
-    entry void recvNcpySrcInfo(CkNcpySource src);
+    entry void recvNcpySrcInfo(CkNcpyBuffer src);
     entry void endGetGetPingpong();
     entry void doneGetGetPingpong();
 
@@ -32,7 +32,7 @@ mainmodule pingpong {
     entry void beginPutPutPingpong();
     entry void callbackPutPutPingpong(CkDataMsg *m);
     entry void askNcpyDestInfo();
-    entry void recvNcpyDestInfo(CkNcpyDestination dest);
+    entry void recvNcpyDestInfo(CkNcpyBuffer dest);
     entry void endPutPutPingpong();
     entry void donePutPutPingpong();
 
diff --git a/examples/charm++/zerocopy/direct_api/prereg/simple_get/Makefile b/examples/charm++/zerocopy/direct_api/prereg/simple_get/Makefile
new file mode 100644 (file)
index 0000000..8b54d3a
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_get
+
+OBJS = simple_get.o
+
+simple_get: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_get $(OBJS)
+
+cifiles: simple_get.ci
+       $(CHARMC)  simple_get.ci
+       touch cifiles
+
+simple_get.o: simple_get.C cifiles
+       $(CHARMC) -c simple_get.C
+
+test: all
+       $(call run, +p1 ./simple_get 20 )
+       $(call run, +p2 ./simple_get 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_get charmrun cifiles
similarity index 69%
rename from examples/charm++/zerocopy/direct_api/prereg/simple_rget/simple_rget.C
rename to examples/charm++/zerocopy/direct_api/prereg/simple_get/simple_get.C
index 153ecc6fab90cfdeb0a5b8f6dcfacc71570624e2..3b885c906a692035bc65f85b6dbf03714c61a5a0 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rget.decl.h"
+#include "simple_get.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rget <array size>\n");
+      CkAbort("Usage: ./simple_get <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -61,8 +61,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -94,11 +94,11 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
 
-    // Send my sources to Index 1; Index 1 performs Rgets from these sources
+    // Send my sources to Index 1; Index 1 performs Gets from these sources
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3);
   }
 
@@ -108,25 +108,25 @@ public:
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rget)
+  // Executed on Index 1 (which receives data from get)
   void getReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -146,18 +146,18 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3)
   {
     CkAssert(thisIndex == 1);
-    // Create nocopy destination for me to Rget into
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
-
-    // Perform Rget from Index 0's sources into my destinations
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Create nocopy destination for me to Get into
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
+
+    // Perform Get from Index 0's sources into my destinations
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 
   // Executed on Index 1
@@ -167,7 +167,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rget Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Get Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     CmiRdmaFree(iArr1);
     CmiRdmaFree(dArr1);
     CmiRdmaFree(cArr1);
@@ -176,4 +176,4 @@ public:
 
 };
 
-#include "simple_rget.def.h"
+#include "simple_get.def.h"
similarity index 79%
rename from examples/charm++/zerocopy/direct_api/reg/simple_rget/simple_rget.ci
rename to examples/charm++/zerocopy/direct_api/prereg/simple_get/simple_get.ci
index 06db1f4c8257421df3ae3d15f5d1b3ac552ec39c..354820eeff3d3ebbfae9500dcf6872a5805cd177 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rget {
+mainmodule simple_get {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rget {
     entry void start();
     entry void getSenderDone(CkDataMsg *m);
     entry void getReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3);
     entry void sendValidationData();
     entry void validateGetData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/prereg/simple_put/Makefile b/examples/charm++/zerocopy/direct_api/prereg/simple_put/Makefile
new file mode 100644 (file)
index 0000000..f59a954
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_put
+
+OBJS = simple_put.o
+
+simple_put: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_put $(OBJS)
+
+cifiles: simple_put.ci
+       $(CHARMC)  simple_put.ci
+       touch cifiles
+
+simple_put.o: simple_put.C cifiles
+       $(CHARMC) -c simple_put.C
+
+test: all
+       $(call run, +p1 ./simple_put 20 )
+       $(call run, +p2 ./simple_put 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_put charmrun cifiles
similarity index 68%
rename from examples/charm++/zerocopy/direct_api/prereg/simple_rput/simple_rput.C
rename to examples/charm++/zerocopy/direct_api/prereg/simple_put/simple_put.C
index 7c6eea45bfdf9b7e6971c89ded3765d64ac69133..6565eacb934aec81d1f28fc53e4d1a0aea62c6f2 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rput.decl.h"
+#include "simple_put.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rput <array size>\n");
+      CkAbort("Usage: ./simple_put <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -61,8 +61,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -94,39 +94,39 @@ public:
   void start()
   {
     CkAssert(thisIndex == 1);
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
 
-    // Send my destinations to Index 0; Index 0 performs Rputs into these destinations
+    // Send my destinations to Index 0; Index 0 performs Puts into these destinations
     thisProxy[otherIndex].recvNcpyInfo(myDest1, myDest2, myDest3);
   }
 
-  // Executed on Index 0 (which calls rput)
+  // Executed on Index 0 (which calls put)
   void putSenderDone(CkDataMsg *m){
     CkAssert(thisIndex == 0);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rput)
+  // Executed on Index 1 (which receives data from put)
   void putReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -146,18 +146,18 @@ public:
   }
 
   // Executed on Index 0
-  void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 0);
-    // Create nocopy sources for me to Rput into
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
-
-    // Perform Rputs from my sources into Index 1's destinations
-    mySrc1.rput(dest1);
-    mySrc2.rput(dest2);
-    mySrc3.rput(dest3);
+    // Create nocopy sources for me to Put into
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_PREREG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_PREREG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_PREREG);
+
+    // Perform Puts from my sources into Index 1's destinations
+    mySrc1.put(dest1);
+    mySrc2.put(dest2);
+    mySrc3.put(dest3);
   }
 
   // Executed on Index 1
@@ -167,7 +167,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rput Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Put Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     CmiRdmaFree(iArr1);
     CmiRdmaFree(dArr1);
     CmiRdmaFree(cArr1);
@@ -176,4 +176,4 @@ public:
 
 };
 
-#include "simple_rput.def.h"
+#include "simple_put.def.h"
similarity index 76%
rename from examples/charm++/zerocopy/direct_api/unreg/simple_rput/simple_rput.ci
rename to examples/charm++/zerocopy/direct_api/prereg/simple_put/simple_put.ci
index a9f37b816d63e2b944d8ae8c3ff2d74ea5e0db7a..1ebd4b40d390cdff1b56b236df2fa77c03a57d0e 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rput {
+mainmodule simple_put {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rput {
     entry void start();
     entry void putSenderDone(CkDataMsg *m);
     entry void putReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
     entry void sendValidationData();
     entry void validatePutData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/prereg/simple_rget/Makefile b/examples/charm++/zerocopy/direct_api/prereg/simple_rget/Makefile
deleted file mode 100644 (file)
index 072c4ce..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rget
-
-OBJS = simple_rget.o
-
-simple_rget: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rget $(OBJS)
-
-cifiles: simple_rget.ci
-       $(CHARMC)  simple_rget.ci
-       touch cifiles
-
-simple_rget.o: simple_rget.C cifiles
-       $(CHARMC) -c simple_rget.C
-
-test: all
-       $(call run, +p1 ./simple_rget 20 )
-       $(call run, +p2 ./simple_rget 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rget charmrun cifiles
diff --git a/examples/charm++/zerocopy/direct_api/prereg/simple_rput/Makefile b/examples/charm++/zerocopy/direct_api/prereg/simple_rput/Makefile
deleted file mode 100644 (file)
index 47e9ea4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rput
-
-OBJS = simple_rput.o
-
-simple_rput: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rput $(OBJS)
-
-cifiles: simple_rput.ci
-       $(CHARMC)  simple_rput.ci
-       touch cifiles
-
-simple_rput.o: simple_rput.C cifiles
-       $(CHARMC) -c simple_rput.C
-
-test: all
-       $(call run, +p1 ./simple_rput 20 )
-       $(call run, +p2 ./simple_rput 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rput charmrun cifiles
index e32d5abba65e84a17e6417abad4d274ad8a7da7d..b4e4b665d4244f302c59f49da9f90a7a2124c33a 100644 (file)
@@ -1,4 +1,4 @@
-DIRS   = simple_rget simple_rput get_put_pingpong pingpong
+DIRS   = simple_get simple_put get_put_pingpong pingpong
 
 all:
        for d in $(DIRS); do \
index f7586a73a6c5a5f08ae782208efa6cfa03d98898..649f33241419c4590e2929a9323f2c706b4baeff 100644 (file)
@@ -60,9 +60,9 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, recvCbCounter, sendCbCounter;
   CkCallback sendCb, recvCb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
-  CkNcpyDestination otherDest1, otherDest2, otherDest3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer otherDest1, otherDest2, otherDest3;
 
 public:
   Ping1(int size)
@@ -87,17 +87,17 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), sendCb, CK_BUFFER_REG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), sendCb, CK_BUFFER_REG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), sendCb, CK_BUFFER_REG);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), sendCb, CK_BUFFER_REG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), sendCb, CK_BUFFER_REG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), sendCb, CK_BUFFER_REG);
 
     iArr2 = new int[size];
     dArr2 = new double[size];
     cArr2 = new char[size];
 
-    myDest1 = CkNcpyDestination(iArr2, size*sizeof(int), recvCb, CK_BUFFER_REG);
-    myDest2 = CkNcpyDestination(dArr2, size*sizeof(double), recvCb, CK_BUFFER_REG);
-    myDest3 = CkNcpyDestination(cArr2, size*sizeof(char), recvCb, CK_BUFFER_REG);
+    myDest1 = CkNcpyBuffer(iArr2, size*sizeof(int), recvCb, CK_BUFFER_REG);
+    myDest2 = CkNcpyBuffer(dArr2, size*sizeof(double), recvCb, CK_BUFFER_REG);
+    myDest3 = CkNcpyBuffer(cArr2, size*sizeof(char), recvCb, CK_BUFFER_REG);
 
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3, myDest1, myDest2, myDest3);
   }
@@ -106,9 +106,9 @@ public:
     sendCbCounter++;
     if(sendCbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
 
       if(thisIndex == 1){
         delete [] iArr1;
@@ -125,25 +125,25 @@ public:
     if(recvCbCounter == 3) {
 
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
 
       if(thisIndex == 1){
-        CkPrintf("[%d][%d][%d] Rget call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Get call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
-        // Create a nocopy sources for me to Rput from into destinations received
-        mySrc1 = CkNcpySource(iArr1, sizeof(int)*size, sendCb, CK_BUFFER_REG);
-        mySrc2 = CkNcpySource(dArr1, sizeof(double)*size, sendCb, CK_BUFFER_REG);
-        mySrc3 = CkNcpySource(cArr1, sizeof(char)*size, sendCb, CK_BUFFER_REG);
+        // Create a nocopy sources for me to Put from into destinations received
+        mySrc1 = CkNcpyBuffer(iArr1, sizeof(int)*size, sendCb, CK_BUFFER_REG);
+        mySrc2 = CkNcpyBuffer(dArr1, sizeof(double)*size, sendCb, CK_BUFFER_REG);
+        mySrc3 = CkNcpyBuffer(cArr1, sizeof(char)*size, sendCb, CK_BUFFER_REG);
 
-        // Index 1 Rputting to 0
-        mySrc1.rput(otherDest1);
-        mySrc2.rput(otherDest2);
-        mySrc3.rput(otherDest3);
+        // Index 1 Putting to 0
+        mySrc1.put(otherDest1);
+        mySrc2.put(otherDest2);
+        mySrc3.put(otherDest3);
 
       } else {
-        CkPrintf("[%d][%d][%d] Rput call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Put call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
         compareArray(iArr1, iArr2, size);
         compareArray(dArr1, dArr2, size);
@@ -157,22 +157,22 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 1);
     otherDest1 = dest1;
     otherDest2 = dest2;
     otherDest3 = dest3;
 
-    // Create nocopy destinations for me to Rget from sources received
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), recvCb, CK_BUFFER_REG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), recvCb, CK_BUFFER_REG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), recvCb, CK_BUFFER_REG);
+    // Create nocopy destinations for me to Get from sources received
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), recvCb, CK_BUFFER_REG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), recvCb, CK_BUFFER_REG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), recvCb, CK_BUFFER_REG);
 
-    // Index 1 Rgetting from 0
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Index 1 Getting from 0
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 };
 
index 6f93c891db073722f2f0a69a2bc7891e65c745ca..dd6c5eb94d2bd79feeed4dc14bcf5be2947f4451 100644 (file)
@@ -12,7 +12,7 @@ mainmodule simple_direct {
     entry void start();
     entry void senderCallback(CkDataMsg *m);
     entry void receiverCallback(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
   };
 
 };
index 1834e2a2a0657eda534046a0daccc15581418eec..82341b8b0c010100a5664de54c20480e69aa85c9 100644 (file)
@@ -56,8 +56,8 @@ class Ping1 : public CBase_Ping1
   int counter;
   int otherIndex;
   double start_time, end_time, reg_time, zcpy_time1, zcpy_time2;
-  CkNcpySource mySrc;
-  CkNcpyDestination myDest;
+  CkNcpyBuffer mySrc;
+  CkNcpyBuffer myDest;
   char *nocopyMsg, *otherMsg;
 
   public:
@@ -81,7 +81,7 @@ class Ping1 : public CBase_Ping1
       iterations = smallIter;
 
     start_time = CkWallTimer();
-    // send CkNcpySource to 1
+    // send CkNcpyBuffer to 1
     thisProxy[1].recv(nocopyMsg, size);
   }
 
@@ -105,11 +105,11 @@ class Ping1 : public CBase_Ping1
   void setupGetGetPingpong(int size) {
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_REG);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_REG);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackGetGetPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_REG);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_REG);
 
     thisProxy[0].beginGetGetPingpong();
   }
@@ -123,8 +123,8 @@ class Ping1 : public CBase_Ping1
     }
   }
 
-  void recvNcpySrcInfo(CkNcpySource otherSrc) {
-    myDest.rget(otherSrc);
+  void recvNcpySrcInfo(CkNcpyBuffer otherSrc) {
+    myDest.get(otherSrc);
   }
 
   void callbackGetGetPingpong(CkDataMsg *m) {
@@ -146,8 +146,8 @@ class Ping1 : public CBase_Ping1
 
   void endGetGetPingpong() {
     counter = 0;
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].doneGetGetPingpong();
   }
 
@@ -163,11 +163,11 @@ class Ping1 : public CBase_Ping1
 
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_REG);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb, CK_BUFFER_REG);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackPutPutPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_REG);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb, CK_BUFFER_REG);
 
     thisProxy[0].beginPutPutPingpong();
   }
@@ -186,8 +186,8 @@ class Ping1 : public CBase_Ping1
     thisProxy[otherIndex].recvNcpyDestInfo(myDest);
   }
 
-  void recvNcpyDestInfo(CkNcpyDestination otherDest) {
-    mySrc.rput(otherDest);
+  void recvNcpyDestInfo(CkNcpyBuffer otherDest) {
+    mySrc.put(otherDest);
   }
 
   void callbackPutPutPingpong(CkDataMsg *m) {
@@ -216,8 +216,8 @@ class Ping1 : public CBase_Ping1
   }
 
   void endPutPutPingpong() {
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].donePutPutPingpong();
   }
 
index e1de15b5033091f337f7278a10fcab2e1b18014f..8a84d4f786994098f346d2d9d7129233d392f350 100644 (file)
@@ -23,7 +23,7 @@ mainmodule pingpong {
     entry void setupGetGetPingpong(int size);
     entry void beginGetGetPingpong();
     entry void callbackGetGetPingpong(CkDataMsg *m);
-    entry void recvNcpySrcInfo(CkNcpySource src);
+    entry void recvNcpySrcInfo(CkNcpyBuffer src);
     entry void endGetGetPingpong();
     entry void doneGetGetPingpong();
 
@@ -32,7 +32,7 @@ mainmodule pingpong {
     entry void beginPutPutPingpong();
     entry void callbackPutPutPingpong(CkDataMsg *m);
     entry void askNcpyDestInfo();
-    entry void recvNcpyDestInfo(CkNcpyDestination dest);
+    entry void recvNcpyDestInfo(CkNcpyBuffer dest);
     entry void endPutPutPingpong();
     entry void donePutPutPingpong();
 
diff --git a/examples/charm++/zerocopy/direct_api/reg/simple_get/Makefile b/examples/charm++/zerocopy/direct_api/reg/simple_get/Makefile
new file mode 100644 (file)
index 0000000..8b54d3a
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_get
+
+OBJS = simple_get.o
+
+simple_get: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_get $(OBJS)
+
+cifiles: simple_get.ci
+       $(CHARMC)  simple_get.ci
+       touch cifiles
+
+simple_get.o: simple_get.C cifiles
+       $(CHARMC) -c simple_get.C
+
+test: all
+       $(call run, +p1 ./simple_get 20 )
+       $(call run, +p2 ./simple_get 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_get charmrun cifiles
similarity index 67%
rename from examples/charm++/zerocopy/direct_api/reg/simple_rget/simple_rget.C
rename to examples/charm++/zerocopy/direct_api/reg/simple_get/simple_get.C
index 7ee31183375c12703cf025e2cf6d8b3063661935..4a499751d6c7cb5b4e218359c572c1044e9d761f 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rget.decl.h"
+#include "simple_get.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rget <array size>\n");
+      CkAbort("Usage: ./simple_get <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -59,8 +59,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -92,11 +92,11 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
 
-    // Send my sources to Index 1; Index 1 performs Rgets from these sources
+    // Send my sources to Index 1; Index 1 performs Gets from these sources
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3);
   }
 
@@ -106,25 +106,25 @@ public:
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rget)
+  // Executed on Index 1 (which receives data from get)
   void getReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -144,18 +144,18 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3)
   {
     CkAssert(thisIndex == 1);
-    // Create nocopy destination for me to Rget into
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
-
-    // Perform Rget from Index 0's sources into my destinations
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Create nocopy destination for me to Get into
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
+
+    // Perform Get from Index 0's sources into my destinations
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 
   // Executed on Index 1
@@ -165,7 +165,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rget Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Get Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     delete [] iArr1;
     delete [] dArr1;
     delete [] cArr1;
@@ -174,4 +174,4 @@ public:
 
 };
 
-#include "simple_rget.def.h"
+#include "simple_get.def.h"
similarity index 79%
rename from examples/charm++/zerocopy/direct_api/unreg/simple_rget/simple_rget.ci
rename to examples/charm++/zerocopy/direct_api/reg/simple_get/simple_get.ci
index 06db1f4c8257421df3ae3d15f5d1b3ac552ec39c..354820eeff3d3ebbfae9500dcf6872a5805cd177 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rget {
+mainmodule simple_get {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rget {
     entry void start();
     entry void getSenderDone(CkDataMsg *m);
     entry void getReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3);
     entry void sendValidationData();
     entry void validateGetData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/reg/simple_put/Makefile b/examples/charm++/zerocopy/direct_api/reg/simple_put/Makefile
new file mode 100644 (file)
index 0000000..f59a954
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_put
+
+OBJS = simple_put.o
+
+simple_put: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_put $(OBJS)
+
+cifiles: simple_put.ci
+       $(CHARMC)  simple_put.ci
+       touch cifiles
+
+simple_put.o: simple_put.C cifiles
+       $(CHARMC) -c simple_put.C
+
+test: all
+       $(call run, +p1 ./simple_put 20 )
+       $(call run, +p2 ./simple_put 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_put charmrun cifiles
similarity index 66%
rename from examples/charm++/zerocopy/direct_api/reg/simple_rput/simple_rput.C
rename to examples/charm++/zerocopy/direct_api/reg/simple_put/simple_put.C
index db676dc62200edfab28a86045b1d7a5684f32d5f..a286cd8198606cf8449e034a18e8196ab65cd1d1 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rput.decl.h"
+#include "simple_put.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rput <array size>\n");
+      CkAbort("Usage: ./simple_put <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -59,8 +59,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -92,39 +92,39 @@ public:
   void start()
   {
     CkAssert(thisIndex == 1);
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
 
-    // Send my destinations to Index 0; Index 0 performs Rputs into these destinations
+    // Send my destinations to Index 0; Index 0 performs Puts into these destinations
     thisProxy[otherIndex].recvNcpyInfo(myDest1, myDest2, myDest3);
   }
 
-  // Executed on Index 0 (which calls rput)
+  // Executed on Index 0 (which calls put)
   void putSenderDone(CkDataMsg *m){
     CkAssert(thisIndex == 0);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rput)
+  // Executed on Index 1 (which receives data from put)
   void putReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -144,18 +144,18 @@ public:
   }
 
   // Executed on Index 0
-  void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 0);
-    // Create nocopy sources for me to Rput into
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
-
-    // Perform Rputs from my sources into Index 1's destinations
-    mySrc1.rput(dest1);
-    mySrc2.rput(dest2);
-    mySrc3.rput(dest3);
+    // Create nocopy sources for me to Put into
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb, CK_BUFFER_REG);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb, CK_BUFFER_REG);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb, CK_BUFFER_REG);
+
+    // Perform Puts from my sources into Index 1's destinations
+    mySrc1.put(dest1);
+    mySrc2.put(dest2);
+    mySrc3.put(dest3);
   }
 
   // Executed on Index 1
@@ -165,7 +165,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rput Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Put Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     delete [] iArr1;
     delete [] dArr1;
     delete [] cArr1;
@@ -174,4 +174,4 @@ public:
 
 };
 
-#include "simple_rput.def.h"
+#include "simple_put.def.h"
similarity index 76%
rename from examples/charm++/zerocopy/direct_api/prereg/simple_rput/simple_rput.ci
rename to examples/charm++/zerocopy/direct_api/reg/simple_put/simple_put.ci
index a9f37b816d63e2b944d8ae8c3ff2d74ea5e0db7a..1ebd4b40d390cdff1b56b236df2fa77c03a57d0e 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rput {
+mainmodule simple_put {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rput {
     entry void start();
     entry void putSenderDone(CkDataMsg *m);
     entry void putReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
     entry void sendValidationData();
     entry void validatePutData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/reg/simple_rget/Makefile b/examples/charm++/zerocopy/direct_api/reg/simple_rget/Makefile
deleted file mode 100644 (file)
index 072c4ce..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rget
-
-OBJS = simple_rget.o
-
-simple_rget: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rget $(OBJS)
-
-cifiles: simple_rget.ci
-       $(CHARMC)  simple_rget.ci
-       touch cifiles
-
-simple_rget.o: simple_rget.C cifiles
-       $(CHARMC) -c simple_rget.C
-
-test: all
-       $(call run, +p1 ./simple_rget 20 )
-       $(call run, +p2 ./simple_rget 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rget charmrun cifiles
diff --git a/examples/charm++/zerocopy/direct_api/reg/simple_rput/Makefile b/examples/charm++/zerocopy/direct_api/reg/simple_rput/Makefile
deleted file mode 100644 (file)
index 47e9ea4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rput
-
-OBJS = simple_rput.o
-
-simple_rput: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rput $(OBJS)
-
-cifiles: simple_rput.ci
-       $(CHARMC)  simple_rput.ci
-       touch cifiles
-
-simple_rput.o: simple_rput.C cifiles
-       $(CHARMC) -c simple_rput.C
-
-test: all
-       $(call run, +p1 ./simple_rput 20 )
-       $(call run, +p2 ./simple_rput 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rput charmrun cifiles
index e32d5abba65e84a17e6417abad4d274ad8a7da7d..b4e4b665d4244f302c59f49da9f90a7a2124c33a 100644 (file)
@@ -1,4 +1,4 @@
-DIRS   = simple_rget simple_rput get_put_pingpong pingpong
+DIRS   = simple_get simple_put get_put_pingpong pingpong
 
 all:
        for d in $(DIRS); do \
index 8544cb2a57c5278a92aa0618ae717925daa750a4..a31dbfd81485a311c16227673f789eea4dddd0f1 100644 (file)
@@ -60,9 +60,9 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, recvCbCounter, sendCbCounter;
   CkCallback sendCb, recvCb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
-  CkNcpyDestination otherDest1, otherDest2, otherDest3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer otherDest1, otherDest2, otherDest3;
 
 public:
   Ping1(int size)
@@ -87,17 +87,17 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), sendCb);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), sendCb);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), sendCb);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), sendCb);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), sendCb);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), sendCb);
 
     iArr2 = new int[size];
     dArr2 = new double[size];
     cArr2 = new char[size];
 
-    myDest1 = CkNcpyDestination(iArr2, size*sizeof(int), recvCb);
-    myDest2 = CkNcpyDestination(dArr2, size*sizeof(double), recvCb);
-    myDest3 = CkNcpyDestination(cArr2, size*sizeof(char), recvCb);
+    myDest1 = CkNcpyBuffer(iArr2, size*sizeof(int), recvCb);
+    myDest2 = CkNcpyBuffer(dArr2, size*sizeof(double), recvCb);
+    myDest3 = CkNcpyBuffer(cArr2, size*sizeof(char), recvCb);
 
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3, myDest1, myDest2, myDest3);
   }
@@ -106,9 +106,9 @@ public:
     sendCbCounter++;
     if(sendCbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
 
       if(thisIndex == 1){
         delete [] iArr1;
@@ -125,25 +125,25 @@ public:
     if(recvCbCounter == 3) {
 
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
 
       if(thisIndex == 1){
-        CkPrintf("[%d][%d][%d] Rget call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Get call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
-        // Create a nocopy sources for me to Rput from into destinations received
-        mySrc1 = CkNcpySource(iArr1, sizeof(int)*size, sendCb);
-        mySrc2 = CkNcpySource(dArr1, sizeof(double)*size, sendCb);
-        mySrc3 = CkNcpySource(cArr1, sizeof(char)*size, sendCb);
+        // Create a nocopy sources for me to Put from into destinations received
+        mySrc1 = CkNcpyBuffer(iArr1, sizeof(int)*size, sendCb);
+        mySrc2 = CkNcpyBuffer(dArr1, sizeof(double)*size, sendCb);
+        mySrc3 = CkNcpyBuffer(cArr1, sizeof(char)*size, sendCb);
 
-        // Index 1 Rputting to 0
-        mySrc1.rput(otherDest1);
-        mySrc2.rput(otherDest2);
-        mySrc3.rput(otherDest3);
+        // Index 1 Putting to 0
+        mySrc1.put(otherDest1);
+        mySrc2.put(otherDest2);
+        mySrc3.put(otherDest3);
 
       } else {
-        CkPrintf("[%d][%d][%d] Rput call completed\n", thisIndex, CkMyPe(), CkMyNode());
+        CkPrintf("[%d][%d][%d] Put call completed\n", thisIndex, CkMyPe(), CkMyNode());
 
         compareArray(iArr1, iArr2, size);
         compareArray(dArr1, dArr2, size);
@@ -157,22 +157,22 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 1);
     otherDest1 = dest1;
     otherDest2 = dest2;
     otherDest3 = dest3;
 
-    // Create nocopy destinations for me to Rget from sources received
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), recvCb);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), recvCb);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), recvCb);
+    // Create nocopy destinations for me to Get from sources received
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), recvCb);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), recvCb);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), recvCb);
 
-    // Index 1 Rgetting from 0
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Index 1 Getting from 0
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 };
 
index 6f93c891db073722f2f0a69a2bc7891e65c745ca..dd6c5eb94d2bd79feeed4dc14bcf5be2947f4451 100644 (file)
@@ -12,7 +12,7 @@ mainmodule simple_direct {
     entry void start();
     entry void senderCallback(CkDataMsg *m);
     entry void receiverCallback(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3, CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3, CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
   };
 
 };
index 1b4764e694e24c1cc82c0a0251735268c0482d9b..f4ec8494f61915fc94d8def728c1ef81ccf590a6 100644 (file)
@@ -56,8 +56,8 @@ class Ping1 : public CBase_Ping1
   int counter;
   int otherIndex;
   double start_time, end_time, reg_time, zcpy_time1, zcpy_time2;
-  CkNcpySource mySrc;
-  CkNcpyDestination myDest;
+  CkNcpyBuffer mySrc;
+  CkNcpyBuffer myDest;
   char *nocopyMsg, *otherMsg;
 
   public:
@@ -81,7 +81,7 @@ class Ping1 : public CBase_Ping1
       iterations = smallIter;
 
     start_time = CkWallTimer();
-    // send CkNcpySource to 1
+    // send CkNcpyBuffer to 1
     thisProxy[1].recv(nocopyMsg, size);
   }
 
@@ -105,11 +105,11 @@ class Ping1 : public CBase_Ping1
   void setupGetGetPingpong(int size) {
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackGetGetPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb);
 
     thisProxy[0].beginGetGetPingpong();
   }
@@ -123,8 +123,8 @@ class Ping1 : public CBase_Ping1
     }
   }
 
-  void recvNcpySrcInfo(CkNcpySource otherSrc) {
-    myDest.rget(otherSrc);
+  void recvNcpySrcInfo(CkNcpyBuffer otherSrc) {
+    myDest.get(otherSrc);
   }
 
   void callbackGetGetPingpong(CkDataMsg *m) {
@@ -146,8 +146,8 @@ class Ping1 : public CBase_Ping1
 
   void endGetGetPingpong() {
     counter = 0;
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].doneGetGetPingpong();
   }
 
@@ -163,11 +163,11 @@ class Ping1 : public CBase_Ping1
 
     // Source callback and Ncpy object
     CkCallback srcCb = CkCallback(CkCallback::ignore);
-    mySrc = CkNcpySource(nocopyMsg, sizeof(char)*size, srcCb);
+    mySrc = CkNcpyBuffer(nocopyMsg, sizeof(char)*size, srcCb);
 
     // Destination callback and Ncpy object
     CkCallback destCb = CkCallback(CkIndex_Ping1::callbackPutPutPingpong(NULL), thisProxy[thisIndex]);
-    myDest = CkNcpyDestination(otherMsg, sizeof(char)*size, destCb);
+    myDest = CkNcpyBuffer(otherMsg, sizeof(char)*size, destCb);
 
     thisProxy[0].beginPutPutPingpong();
   }
@@ -186,8 +186,8 @@ class Ping1 : public CBase_Ping1
     thisProxy[otherIndex].recvNcpyDestInfo(myDest);
   }
 
-  void recvNcpyDestInfo(CkNcpyDestination otherDest) {
-    mySrc.rput(otherDest);
+  void recvNcpyDestInfo(CkNcpyBuffer otherDest) {
+    mySrc.put(otherDest);
   }
 
   void callbackPutPutPingpong(CkDataMsg *m) {
@@ -216,8 +216,8 @@ class Ping1 : public CBase_Ping1
   }
 
   void endPutPutPingpong() {
-    mySrc.releaseResource();
-    myDest.releaseResource();
+    mySrc.deregisterMem();
+    myDest.deregisterMem();
     thisProxy[0].donePutPutPingpong();
   }
 
index e1de15b5033091f337f7278a10fcab2e1b18014f..8a84d4f786994098f346d2d9d7129233d392f350 100644 (file)
@@ -23,7 +23,7 @@ mainmodule pingpong {
     entry void setupGetGetPingpong(int size);
     entry void beginGetGetPingpong();
     entry void callbackGetGetPingpong(CkDataMsg *m);
-    entry void recvNcpySrcInfo(CkNcpySource src);
+    entry void recvNcpySrcInfo(CkNcpyBuffer src);
     entry void endGetGetPingpong();
     entry void doneGetGetPingpong();
 
@@ -32,7 +32,7 @@ mainmodule pingpong {
     entry void beginPutPutPingpong();
     entry void callbackPutPutPingpong(CkDataMsg *m);
     entry void askNcpyDestInfo();
-    entry void recvNcpyDestInfo(CkNcpyDestination dest);
+    entry void recvNcpyDestInfo(CkNcpyBuffer dest);
     entry void endPutPutPingpong();
     entry void donePutPutPingpong();
 
diff --git a/examples/charm++/zerocopy/direct_api/unreg/simple_get/Makefile b/examples/charm++/zerocopy/direct_api/unreg/simple_get/Makefile
new file mode 100644 (file)
index 0000000..8b54d3a
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_get
+
+OBJS = simple_get.o
+
+simple_get: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_get $(OBJS)
+
+cifiles: simple_get.ci
+       $(CHARMC)  simple_get.ci
+       touch cifiles
+
+simple_get.o: simple_get.C cifiles
+       $(CHARMC) -c simple_get.C
+
+test: all
+       $(call run, +p1 ./simple_get 20 )
+       $(call run, +p2 ./simple_get 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_get charmrun cifiles
similarity index 68%
rename from examples/charm++/zerocopy/direct_api/unreg/simple_rget/simple_rget.C
rename to examples/charm++/zerocopy/direct_api/unreg/simple_get/simple_get.C
index 7ba8ae232f38d80697d0bac3aa20b3411a506f18..dc621812baf771c4706ddcf24ed8a05954afc6cb 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rget.decl.h"
+#include "simple_get.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rget <array size>\n");
+      CkAbort("Usage: ./simple_get <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -59,8 +59,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -92,11 +92,11 @@ public:
   void start()
   {
     CkAssert(thisIndex == 0);
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb);
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb);
 
-    // Send my sources to Index 1; Index 1 performs Rgets from these sources
+    // Send my sources to Index 1; Index 1 performs Gets from these sources
     thisProxy[otherIndex].recvNcpyInfo(mySrc1, mySrc2, mySrc3);
   }
 
@@ -106,25 +106,25 @@ public:
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rget)
+  // Executed on Index 1 (which receives data from get)
   void getReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rget Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Get Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -144,18 +144,18 @@ public:
   }
 
   // Executed on Index 1
-  void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3)
+  void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3)
   {
     CkAssert(thisIndex == 1);
-    // Create nocopy destination for me to Rget into
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb);
-
-    // Perform Rget from Index 0's sources into my destinations
-    myDest1.rget(src1);
-    myDest2.rget(src2);
-    myDest3.rget(src3);
+    // Create nocopy destination for me to Get into
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb);
+
+    // Perform Get from Index 0's sources into my destinations
+    myDest1.get(src1);
+    myDest2.get(src2);
+    myDest3.get(src3);
   }
 
   // Executed on Index 1
@@ -165,7 +165,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rget Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Get Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     delete [] iArr1;
     delete [] dArr1;
     delete [] cArr1;
@@ -174,4 +174,4 @@ public:
 
 };
 
-#include "simple_rget.def.h"
+#include "simple_get.def.h"
similarity index 79%
rename from examples/charm++/zerocopy/direct_api/prereg/simple_rget/simple_rget.ci
rename to examples/charm++/zerocopy/direct_api/unreg/simple_get/simple_get.ci
index 06db1f4c8257421df3ae3d15f5d1b3ac552ec39c..354820eeff3d3ebbfae9500dcf6872a5805cd177 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rget {
+mainmodule simple_get {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rget {
     entry void start();
     entry void getSenderDone(CkDataMsg *m);
     entry void getReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpySource src1, CkNcpySource src2, CkNcpySource src3);
+    entry void recvNcpyInfo(CkNcpyBuffer src1, CkNcpyBuffer src2, CkNcpyBuffer src3);
     entry void sendValidationData();
     entry void validateGetData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/unreg/simple_put/Makefile b/examples/charm++/zerocopy/direct_api/unreg/simple_put/Makefile
new file mode 100644 (file)
index 0000000..f59a954
--- /dev/null
@@ -0,0 +1,23 @@
+-include ../../../../../common.mk
+CHARMC=../../../../../../bin/charmc $(OPTS)
+
+all: simple_put
+
+OBJS = simple_put.o
+
+simple_put: $(OBJS)
+       $(CHARMC) -language charm++ -o simple_put $(OBJS)
+
+cifiles: simple_put.ci
+       $(CHARMC)  simple_put.ci
+       touch cifiles
+
+simple_put.o: simple_put.C cifiles
+       $(CHARMC) -c simple_put.C
+
+test: all
+       $(call run, +p1 ./simple_put 20 )
+       $(call run, +p2 ./simple_put 20 )
+
+clean:
+       rm -f *.decl.h *.def.h conv-host *.o simple_put charmrun cifiles
similarity index 67%
rename from examples/charm++/zerocopy/direct_api/unreg/simple_rput/simple_rput.C
rename to examples/charm++/zerocopy/direct_api/unreg/simple_put/simple_put.C
index d9a9d6867d762b793a4f51ef786b6885f0cb1c22..ebccc51602f98ff2d203044c43f6b833f9cc4044 100644 (file)
@@ -1,4 +1,4 @@
-#include "simple_rput.decl.h"
+#include "simple_put.decl.h"
 #include <assert.h>
 
 CProxy_main mainProxy;
@@ -14,7 +14,7 @@ public:
       CkAbort("Run this program on 1 or 2 processors only.\n");
     }
     if(m->argc !=2 ) {
-      CkAbort("Usage: ./simple_rput <array size>\n");
+      CkAbort("Usage: ./simple_put <array size>\n");
     }
     int size = atoi(m->argv[1]);
     mainProxy = thisProxy;
@@ -59,8 +59,8 @@ class Ping1 : public CBase_Ping1
   int size;
   int otherIndex, cbCounter, valCounter;
   CkCallback cb;
-  CkNcpyDestination myDest1, myDest2, myDest3;
-  CkNcpySource mySrc1, mySrc2, mySrc3;
+  CkNcpyBuffer myDest1, myDest2, myDest3;
+  CkNcpyBuffer mySrc1, mySrc2, mySrc3;
 
 public:
   Ping1(int size)
@@ -92,39 +92,39 @@ public:
   void start()
   {
     CkAssert(thisIndex == 1);
-    myDest1 = CkNcpyDestination(iArr1, size*sizeof(int), cb);
-    myDest2 = CkNcpyDestination(dArr1, size*sizeof(double), cb);
-    myDest3 = CkNcpyDestination(cArr1, size*sizeof(char), cb);
+    myDest1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb);
+    myDest2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb);
+    myDest3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb);
 
-    // Send my destinations to Index 0; Index 0 performs Rputs into these destinations
+    // Send my destinations to Index 0; Index 0 performs Puts into these destinations
     thisProxy[otherIndex].recvNcpyInfo(myDest1, myDest2, myDest3);
   }
 
-  // Executed on Index 0 (which calls rput)
+  // Executed on Index 0 (which calls put)
   void putSenderDone(CkDataMsg *m){
     CkAssert(thisIndex == 0);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my sources
-      mySrc1.releaseResource();
-      mySrc2.releaseResource();
-      mySrc3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Source Done\n", thisIndex, CkMyPe(), CkMyNode());
+      mySrc1.deregisterMem();
+      mySrc2.deregisterMem();
+      mySrc3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Source Done\n", thisIndex, CkMyPe(), CkMyNode());
       sendValidationData();
     }
     delete m;
   }
 
-  // Executed on Index 1 (which receives data from rput)
+  // Executed on Index 1 (which receives data from put)
   void putReceiverDone(CkDataMsg *m){
     CkAssert(thisIndex == 1);
     cbCounter++;
     if(cbCounter == 3) {
       // Release Resources for my destinations
-      myDest1.releaseResource();
-      myDest2.releaseResource();
-      myDest3.releaseResource();
-      CkPrintf("[%d][%d][%d] Rput Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
+      myDest1.deregisterMem();
+      myDest2.deregisterMem();
+      myDest3.deregisterMem();
+      CkPrintf("[%d][%d][%d] Put Destination Done\n", thisIndex, CkMyPe(), CkMyNode());
       thisProxy[otherIndex].sendValidationData();
     }
     delete m;
@@ -144,18 +144,18 @@ public:
   }
 
   // Executed on Index 0
-  void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3)
+  void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3)
   {
     CkAssert(thisIndex == 0);
-    // Create nocopy sources for me to Rput into
-    mySrc1 = CkNcpySource(iArr1, size*sizeof(int), cb);
-    mySrc2 = CkNcpySource(dArr1, size*sizeof(double), cb);
-    mySrc3 = CkNcpySource(cArr1, size*sizeof(char), cb);
-
-    // Perform Rputs from my sources into Index 1's destinations
-    mySrc1.rput(dest1);
-    mySrc2.rput(dest2);
-    mySrc3.rput(dest3);
+    // Create nocopy sources for me to Put into
+    mySrc1 = CkNcpyBuffer(iArr1, size*sizeof(int), cb);
+    mySrc2 = CkNcpyBuffer(dArr1, size*sizeof(double), cb);
+    mySrc3 = CkNcpyBuffer(cArr1, size*sizeof(char), cb);
+
+    // Perform Puts from my sources into Index 1's destinations
+    mySrc1.put(dest1);
+    mySrc2.put(dest2);
+    mySrc3.put(dest3);
   }
 
   // Executed on Index 1
@@ -165,7 +165,7 @@ public:
     compareArray(iArr1, iArr2, size);
     compareArray(dArr1, dArr2, size);
     compareArray(cArr1, cArr2, size);
-    CkPrintf("[%d][%d][%d] Rput Validated! \n", thisIndex, CkMyPe(), CkMyNode());
+    CkPrintf("[%d][%d][%d] Put Validated! \n", thisIndex, CkMyPe(), CkMyNode());
     delete [] iArr1;
     delete [] dArr1;
     delete [] cArr1;
@@ -174,4 +174,4 @@ public:
 
 };
 
-#include "simple_rput.def.h"
+#include "simple_put.def.h"
similarity index 76%
rename from examples/charm++/zerocopy/direct_api/reg/simple_rput/simple_rput.ci
rename to examples/charm++/zerocopy/direct_api/unreg/simple_put/simple_put.ci
index a9f37b816d63e2b944d8ae8c3ff2d74ea5e0db7a..1ebd4b40d390cdff1b56b236df2fa77c03a57d0e 100644 (file)
@@ -1,4 +1,4 @@
-mainmodule simple_rput {
+mainmodule simple_put {
 
   readonly CProxy_main mainProxy;
 
@@ -12,7 +12,7 @@ mainmodule simple_rput {
     entry void start();
     entry void putSenderDone(CkDataMsg *m);
     entry void putReceiverDone(CkDataMsg *m);
-    entry void recvNcpyInfo(CkNcpyDestination dest1, CkNcpyDestination dest2, CkNcpyDestination dest3);
+    entry void recvNcpyInfo(CkNcpyBuffer dest1, CkNcpyBuffer dest2, CkNcpyBuffer dest3);
     entry void sendValidationData();
     entry void validatePutData(int iArr2[size], double dArr2[size], char cArr2[size], int size);
   };
diff --git a/examples/charm++/zerocopy/direct_api/unreg/simple_rget/Makefile b/examples/charm++/zerocopy/direct_api/unreg/simple_rget/Makefile
deleted file mode 100644 (file)
index 072c4ce..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rget
-
-OBJS = simple_rget.o
-
-simple_rget: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rget $(OBJS)
-
-cifiles: simple_rget.ci
-       $(CHARMC)  simple_rget.ci
-       touch cifiles
-
-simple_rget.o: simple_rget.C cifiles
-       $(CHARMC) -c simple_rget.C
-
-test: all
-       $(call run, +p1 ./simple_rget 20 )
-       $(call run, +p2 ./simple_rget 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rget charmrun cifiles
diff --git a/examples/charm++/zerocopy/direct_api/unreg/simple_rput/Makefile b/examples/charm++/zerocopy/direct_api/unreg/simple_rput/Makefile
deleted file mode 100644 (file)
index 47e9ea4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
--include ../../../../../common.mk
-CHARMC=../../../../../../bin/charmc $(OPTS)
-
-all: simple_rput
-
-OBJS = simple_rput.o
-
-simple_rput: $(OBJS)
-       $(CHARMC) -language charm++ -o simple_rput $(OBJS)
-
-cifiles: simple_rput.ci
-       $(CHARMC)  simple_rput.ci
-       touch cifiles
-
-simple_rput.o: simple_rput.C cifiles
-       $(CHARMC) -c simple_rput.C
-
-test: all
-       $(call run, +p1 ./simple_rput 20 )
-       $(call run, +p2 ./simple_rput 20 )
-
-clean:
-       rm -f *.decl.h *.def.h conv-host *.o simple_rput charmrun cifiles
index 832240e3a0aeb21c0ed99e57b5eb09f06bdc3c26..d00aa2168c239482765fdb54172ee5781e8fd811 100644 (file)
@@ -320,6 +320,36 @@ void PumpOneSidedRDMATransactions(gni_cq_handle_t rdma_cq, CmiNodeLock rdma_cq_l
 
 /* Support for Nocopy Direct API */
 
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode){
+
+  gni_mem_handle_t mem_hndl;
+  gni_return_t status = GNI_RC_SUCCESS;
+
+  if(mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) < BIG_MSG) {
+    // Allocation for CMK_BUFFER_PREREG happens through CmiAlloc, which is allocated out of a mempool
+    if(IsMemHndlZero(GetMemHndl(ptr))) {
+      // register it and get the info
+      status = registerMemory(GetMempoolBlockPtr(ptr), GetMempoolsize(ptr), &(GetMemHndl(ptr)), NULL);
+      if(status == GNI_RC_SUCCESS) {
+        // registration successful, get memory handle
+        mem_hndl = GetMemHndl(ptr);
+      } else {
+        GNI_RC_CHECK("Error! Memory registration failed!", status);
+      }
+    }
+    else {
+      // get the handle
+      mem_hndl = GetMemHndl(ptr);
+    }
+  } else {
+    status = GNI_MemRegister(nic_hndl, (uint64_t)ptr, (uint64_t)size, NULL, GNI_MEM_READWRITE, -1, &mem_hndl);
+    GNI_RC_CHECK("Error! Memory registration failed!", status);
+  }
+  CmiGNIRzvRdmaPtr_t *rdmaSrc = (CmiGNIRzvRdmaPtr_t *)info;
+  rdmaSrc->mem_hndl = mem_hndl;
+}
+
 // Perform an RDMA Get call into the local destination address from the remote source address
 void LrtsIssueRget(
   const void* srcAddr,
@@ -341,7 +371,7 @@ void LrtsIssueRget(
 
   // Register local buffer if it is not registered
   if(*destMode == CMK_BUFFER_UNREG) {
-    ((CmiGNIRzvRdmaPtr_t *)destInfo)->mem_hndl = registerDirectMemory(destAddr, size, GNI_MEM_READWRITE);
+    ((CmiGNIRzvRdmaPtr_t *)destInfo)->mem_hndl = registerDirectMem(destAddr, size, GNI_MEM_READWRITE);
     *destMode = CMK_BUFFER_REG;
   }
 
@@ -460,7 +490,7 @@ void LrtsIssueRput(
 
   // Register local buffer if it is not registered
   if(*srcMode == CMK_BUFFER_UNREG) {
-    ((CmiGNIRzvRdmaPtr_t *)srcInfo)->mem_hndl = registerDirectMemory(srcAddr, size, GNI_MEM_READ_ONLY);
+    ((CmiGNIRzvRdmaPtr_t *)srcInfo)->mem_hndl = registerDirectMem(srcAddr, size, GNI_MEM_READ_ONLY);
     *srcMode = CMK_BUFFER_REG;
   }
 
@@ -533,29 +563,31 @@ void LrtsIssueRput(
   }
 }
 
-// Method invoked to deregister destination memory handle
-void LrtsReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  if(mode == CMK_BUFFER_REG || (mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) >= BIG_MSG)) {
-    CmiGNIRzvRdmaPtr_t *destInfo = (CmiGNIRzvRdmaPtr_t *)info;
-    DeregisterMemhandle(destInfo->mem_hndl, pe);
-  }
-}
-
-// Method invoked to deregister source memory handle
-void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  if(mode == CMK_BUFFER_REG || (mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) >= BIG_MSG)) {
-    CmiGNIRzvRdmaPtr_t *srcInfo = (CmiGNIRzvRdmaPtr_t *)info;
-    DeregisterMemhandle(srcInfo->mem_hndl, pe);
-  }
+// Register memory and return mem_hndl
+gni_mem_handle_t registerDirectMem(const void *ptr, int size, unsigned short int mode) {
+  CmiAssert(mode == GNI_MEM_READWRITE || mode == GNI_MEM_READ_ONLY);
+  gni_mem_handle_t mem_hndl;
+  gni_return_t status = GNI_RC_SUCCESS;
+  status = GNI_MemRegister(nic_hndl, (uint64_t)ptr, (uint64_t)size, NULL, mode, -1, &mem_hndl);
+  GNI_RC_CHECK("Error! Memory registration failed inside LrtsRegisterMemory!", status);
+  return mem_hndl;
 }
 
-// Deregister local and remote memory handles
-void DeregisterMemhandle(gni_mem_handle_t mem_hndl, int pe) {
+// Deregister memory mem_hndl
+void deregisterDirectMem(gni_mem_handle_t mem_hndl, int pe) {
   gni_return_t status = GNI_RC_SUCCESS;
   status = GNI_MemDeregister(nic_hndl, &mem_hndl);
   GNI_RC_CHECK("GNI_MemDeregister failed!", status);
 }
 
+// Method invoked to deregister memory handle
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode){
+  if(mode == CMK_BUFFER_REG || (mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) >= BIG_MSG)) {
+    CmiGNIRzvRdmaPtr_t *destInfo = (CmiGNIRzvRdmaPtr_t *)info;
+    deregisterDirectMem(destInfo->mem_hndl, pe);
+  }
+}
+
 #if CMK_SMP
 // Method used by the comm thread to perform GET - called from SendBufferMsg
 void _performOneRgetForWorkerThread(MSG_LIST *ptr) {
index e087cd1094d3644bd9c6ea354b8037df0e36c0a2..9e40b041af65374ec5d9d06230a288b2f4890b28 100644 (file)
@@ -129,7 +129,7 @@ enum CMK_RDMA_TYPE {
 
 // Machine specific information for a nocopy pointer
 typedef struct _cmi_gni_rzv_rdma_pointer {
-  // memory handle for the destination buffer
+  // memory handle for the buffer
   gni_mem_handle_t mem_hndl;
 } CmiGNIRzvRdmaPtr_t;
 
@@ -179,73 +179,40 @@ typedef struct _cmi_gni_rzv_rdma_reverse_op {
   int size;
 } CmiGNIRzvRdmaReverseOp_t;
 
-gni_mem_handle_t registerDirectMemory(const void *ptr, int size, unsigned short int mode) {
-  CmiAssert(mode == GNI_MEM_READWRITE || mode == GNI_MEM_READ_ONLY);
-  gni_mem_handle_t mem_hndl;
-  gni_return_t status = GNI_RC_SUCCESS;
-  status = GNI_MemRegister(nic_hndl, (uint64_t)ptr, (uint64_t)size, NULL, mode, -1, &mem_hndl);
-  GNI_RC_CHECK("Error! Memory registration failed inside LrtsRegisterMemory!", status);
-  return mem_hndl;
-}
-
-// Set the machine specific information for a nocopy source pointer
-void LrtsSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode){
-
-  gni_mem_handle_t mem_hndl;
-  gni_return_t status = GNI_RC_SUCCESS;
-
-  if(mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) < BIG_MSG) {
-    // Allocation for CMK_BUFFER_PREREG happens through CmiAlloc, which is allocated out of a mempool
-    if(IsMemHndlZero(GetMemHndl(ptr))) {
-      // register it and get the info
-      status = registerMemory(GetMempoolBlockPtr(ptr), GetMempoolsize(ptr), &(GetMemHndl(ptr)), NULL);
-      if(status == GNI_RC_SUCCESS) {
-        // registration successful, get memory handle
-        mem_hndl = GetMemHndl(ptr);
-      } else {
-        GNI_RC_CHECK("Error! Source memory registration failed!", status);
-      }
-    }
-    else {
-      // get the handle
-      mem_hndl = GetMemHndl(ptr);
-    }
-  } else {
-    status = GNI_MemRegister(nic_hndl, (uint64_t)ptr, (uint64_t)size, NULL, GNI_MEM_READWRITE, -1, &mem_hndl);
-    GNI_RC_CHECK("Error! Source memory registration failed!", status);
-  }
-  CmiGNIRzvRdmaPtr_t *rdmaSrc = (CmiGNIRzvRdmaPtr_t *)info;
-  rdmaSrc->mem_hndl = mem_hndl;
-}
-
-// Set the machine specific information for a nocopy destination pointer
-void LrtsSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  gni_mem_handle_t mem_hndl;
-  gni_return_t status = GNI_RC_SUCCESS;
-
-  if(mode == CMK_BUFFER_PREREG && SIZEFIELD(ptr) < BIG_MSG) {
-    // Allocation for CMK_BUFFER_PREREG happens through CmiAlloc, which is allocated out of a mempool
-    if(IsMemHndlZero(GetMemHndl(ptr))) {
-      // register it and get the info
-      status = registerMemory(GetMempoolBlockPtr(ptr), GetMempoolsize(ptr), &(GetMemHndl(ptr)), NULL);
-      if(status == GNI_RC_SUCCESS) {
-        // registration successful, get memory handle
-        mem_hndl = GetMemHndl(ptr);
-      } else {
-        GNI_RC_CHECK("Error! Destination memory registration failed!", status);
-      }
-    }
-    else {
-      // get the handle
-      mem_hndl = GetMemHndl(ptr);
-    }
-  } else {
-    status = GNI_MemRegister(nic_hndl, (uint64_t)ptr, (uint64_t)size, NULL, GNI_MEM_READWRITE, -1, &mem_hndl);
-    GNI_RC_CHECK("Error! Destination memory registration failed!", status);
-  }
-  CmiGNIRzvRdmaPtr_t *rdmaDest = (CmiGNIRzvRdmaPtr_t *)info;
-  rdmaDest->mem_hndl = mem_hndl;
-}
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode);
+
+// Perform an RDMA Get call into the local destination address from the remote source address
+void LrtsIssueRget(
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  int size);
+
+// Perform an RDMA Put call into the remote destination address from the local source address
+void LrtsIssueRput(
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  int size);
 
 // Method performs RDMA operations
 gni_return_t post_rdma(
@@ -259,8 +226,14 @@ gni_return_t post_rdma(
   int type,
   unsigned short int mode);
 
-// Method deregisters local and remote memory handles
-void DeregisterMemhandle(gni_mem_handle_t mem_hndl, int pe);
+// Register memory and return mem_hndl
+gni_mem_handle_t registerDirectMem(const void *ptr, int size, unsigned short int mode);
+
+// Deregister local memory handle
+void deregisterDirectMem(gni_mem_handle_t mem_hndl, int pe);
+
+// Method invoked to deregister memory handle
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode);
 
 #if CMK_SMP
 // Method used by the comm thread to perform GET
index 2f567852402329fb0c77335220f4bf3d13b00d1e..06aa93a0bdff1e204341699eba81d2e42cd487f1 100644 (file)
@@ -2434,7 +2434,7 @@ static void PumpNetworkSmsg()
             {
                 CmiGNIRzvRdmaReverseOp_t *revOp = (CmiGNIRzvRdmaReverseOp_t *)header;
                 // Register source buffer
-                gni_mem_handle_t src_mem_hndl = registerDirectMemory(revOp->srcAddr, revOp->size, GNI_MEM_READ_ONLY);
+                gni_mem_handle_t src_mem_hndl = registerDirectMem(revOp->srcAddr, revOp->size, GNI_MEM_READ_ONLY);
 
                 // Perform PUT
                 void *ref = CmiGetNcpyAck(revOp->srcAddr,
@@ -2462,7 +2462,7 @@ static void PumpNetworkSmsg()
             {
                 CmiGNIRzvRdmaReverseOp_t *revOp = (CmiGNIRzvRdmaReverseOp_t *)header;
                 // Register destination buffer
-                gni_mem_handle_t dest_mem_hndl = registerDirectMemory(revOp->destAddr, revOp->size, GNI_MEM_READWRITE);
+                gni_mem_handle_t dest_mem_hndl = registerDirectMem(revOp->destAddr, revOp->size, GNI_MEM_READWRITE);
 
                 // Perform PUT
                 void *ref = CmiGetNcpyAck(revOp->srcAddr,
index 0fcf69a6bb173f3186054183541c90c4e609e611..bd65a44027fd46fbdbcdd24c1681f8de54662411 100644 (file)
@@ -229,10 +229,6 @@ void LrtsIssueRput(
   MPIPostOneBuffer(srcAddr, (void *)srcAckNew, size, destPe, tag, ONESIDED_BUFFER_DIRECT_SEND);
 }
 
-// Method invoked to deregister destination memory handle
-void LrtsReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode){
-}
-
-// Method invoked to deregister source memory handle
-void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode){
+// Method invoked to deregister source memory (Empty method to maintain API consistency)
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode){
 }
index 62bed03d1760e5fb09092f2abe056c0ae4c6f4c4..87b505fb655f0592219f95c2be4b20c1c3fe2704 100644 (file)
@@ -153,10 +153,6 @@ typedef struct _cmi_mpi_rzv_rdma_ack_info {
   int tag;
 }CmiMPIRzvRdmaAckInfo_t;
 
-// Set the machine specific information for a nocopy source pointer
-void LrtsSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode){
-}
-
-// Set the machine specific information for a nocopy destination pointer
-void LrtsSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode){
+// Set the machine specific information for a nocopy pointer (Empty method to maintain API consistency)
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode){
 }
index 800fd186c76ef215ed206b132320441652edbe38..9709d406d1cf74294d594b7dc04fd6c72b8ed41c 100644 (file)
@@ -177,6 +177,32 @@ void LrtsIssueRgets(void *recv, int pe) {
 
 /* Support for Nocopy Direct API */
 // Method called on the completion of a direct onesided operation
+
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode){
+  CmiOfiRdmaPtr_t *rdmaDest = (CmiOfiRdmaPtr_t *)info;
+  uint64_t requested_key = 0;
+  int ret;
+
+  /* Register the destination buffer */
+  if(FI_MR_SCALABLE == context.mr_mode) {
+    requested_key = __sync_fetch_and_add(&(context.mr_counter), 1);
+  }
+  ret = fi_mr_reg(context.domain,
+                  ptr,
+                  size,
+                  FI_REMOTE_READ | FI_REMOTE_WRITE | FI_READ | FI_WRITE,
+                  0ULL,
+                  requested_key,
+                  0ULL,
+                  &(rdmaDest->mr),
+                  NULL);
+  if (ret) {
+    CmiAbort("LrtsSetRdmaBufferInfo: fi_mr_reg failed!\n");
+  }
+  rdmaDest->key = fi_mr_key(rdmaDest->mr);
+}
+
 static inline void ofi_onesided_direct_operation_callback(struct fi_cq_tagged_entry *e, OFIRequest *req)
 {
   CmiOfiRdmaComp_t *rdmaComp = (CmiOfiRdmaComp_t *)(req->data.rma_ncpy_info);
@@ -442,23 +468,8 @@ void LrtsIssueRput(
   }
 }
 
-// Method invoked to deregister destination memory handle
-void LrtsReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  if(mode == CMK_BUFFER_REG) {
-    CmiOfiRdmaPtr_t *rdmaDest = (CmiOfiRdmaPtr_t *)info;
-    int ret;
-
-    // Deregister the buffer
-    if(rdmaDest->mr) {
-      ret = fi_close((struct fid *)rdmaDest->mr);
-      if(ret)
-        CmiAbort("LrtsReleaseDestinationResource: fi_close(mr) failed!\n");
-    }
-  }
-}
-
-// Method invoked to deregister source memory handle
-void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode){
+// Method invoked to deregister memory handle
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode){
   if(mode == CMK_BUFFER_REG) {
     CmiOfiRdmaPtr_t *rdmaSrc = (CmiOfiRdmaPtr_t *)info;
     int ret;
@@ -467,7 +478,7 @@ void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned sho
     if(rdmaSrc->mr) {
       ret = fi_close((struct fid *)rdmaSrc->mr);
       if(ret)
-        CmiAbort("LrtsReleaseSourceResource: fi_close(mr) failed!\n");
+        CmiAbort("LrtsDeregisterMem: fi_close(mr) failed!\n");
     }
   }
 }
index 143bae22678f2df62324fa81c02a455ad2e3780e..0b3c98bc4062af820fa38c88f42536ac9778d28f 100644 (file)
@@ -207,53 +207,42 @@ typedef struct _cmi_ofi_rdma_reverse_op {
   int size;
 } CmiOfiRdmaReverseOp_t;
 
-// Set the machine specific information for a nocopy source pointer
-void LrtsSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  CmiOfiRdmaPtr_t *rdmaSrc = (CmiOfiRdmaPtr_t *)info;
-  uint64_t requested_key = 0;
-  int ret;
-
-  /* Register the source buffer */
-  if(FI_MR_SCALABLE == context.mr_mode) {
-    requested_key = __sync_fetch_and_add(&(context.mr_counter), 1);
-  }
-  ret = fi_mr_reg(context.domain,
-                  ptr,
-                  size,
-                  FI_REMOTE_READ | FI_REMOTE_WRITE | FI_READ | FI_WRITE,
-                  0ULL,
-                  requested_key,
-                  0ULL,
-                  &(rdmaSrc->mr),
-                  NULL);
-  if (ret) {
-    CmiAbort("LrtsSetRdmaSrcInfo: fi_mr_reg failed!\n");
-  }
-  rdmaSrc->key = fi_mr_key(rdmaSrc->mr);
-}
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode);
+
+// Perform an RDMA Get call into the local destination address from the remote source address
+void LrtsIssueRget(
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  int size);
+
+// Perform an RDMA Put call into the remote destination address from the local source address
+void LrtsIssueRput(
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  int size);
+
+// Method invoked to deregister memory handle
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode);
 
-// Set the machine specific information for a nocopy destination pointer
-void LrtsSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  CmiOfiRdmaPtr_t *rdmaDest = (CmiOfiRdmaPtr_t *)info;
-  uint64_t requested_key = 0;
-  int ret;
-
-  /* Register the destination buffer */
-  if(FI_MR_SCALABLE == context.mr_mode) {
-    requested_key = __sync_fetch_and_add(&(context.mr_counter), 1);
-  }
-  ret = fi_mr_reg(context.domain,
-                  ptr,
-                  size,
-                  FI_REMOTE_READ | FI_REMOTE_WRITE | FI_READ | FI_WRITE,
-                  0ULL,
-                  requested_key,
-                  0ULL,
-                  &(rdmaDest->mr),
-                  NULL);
-  if (ret) {
-    CmiAbort("LrtsSetRdmaSrcInfo: fi_mr_reg failed!\n");
-  }
-  rdmaDest->key = fi_mr_key(rdmaDest->mr);
-}
 #endif /* OFI_MACHINE_ONESIDED_H */
index e6731dbca353a99e805211cbb36128f90d635b6b..215ca9aada5adb3af5cf5d32d1bf57d889ba89c4 100644 (file)
@@ -57,6 +57,7 @@ static INLINE_KEYWORD void processProcBcastMsg(int size, char *msg) {
     CmiAssert(CMI_DEST_RANK(msg)==0);
     /*CmiPushPE(CMI_DEST_RANK(msg), msg);*/
 
+    //CmiPrintf("[%d][%d] Received the bcast message \n", CmiMyPe(), CmiMyNode());
 #if CMK_BROADCAST_SPANNING_TREE
     SendSpanningChildrenProc(size, msg);
 #elif CMK_BROADCAST_HYPERCUBE
@@ -128,6 +129,7 @@ static void SendSpanningChildren(int size, char *msg, int rankToAssign, int star
       if (startNode == 0) {
         child_count = _topoTree->child_count;
         children    = _topoTree->children;
+        //CmiPrintf("[%d][%d] SendSpanningChildren child count%d \n", CmiMyPe(), CmiMyNode(), child_count);
       } else {
         get_topo_tree_nbs(startNode, &parent, &child_count, &children);
       }
@@ -138,6 +140,7 @@ static void SendSpanningChildren(int size, char *msg, int rankToAssign, int star
         CmiSendNetworkFunc(CmiNodeFirst(nd), size, msg, BCAST_SYNC);
 #else
         newmsg = CopyMsg(msg, size);
+        //CmiPrintf("[%d][%d] SendSpanningChildren: sending copymsg to %d \n", CmiMyPe(), CmiMyNode(), CmiNodeFirst(nd));
         CmiSendNetworkFunc(CmiNodeFirst(nd), size, newmsg, BCAST_SYNC);
 #endif
       }
index 6a7a9b19da3cc3c224ef1cbfcc701a205ca75be3..244716530947cad85352e11ff5d9def72341817d 100644 (file)
@@ -197,8 +197,7 @@ typedef struct _cmi_rdma_direct_ack {
 } CmiRdmaDirectAck;
 
 /* Support for Nocopy Direct API */
-void LrtsSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode);
-void LrtsSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode);
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode);
 void LrtsSetRdmaNcpyAck(RdmaAckHandlerFn fn);
 void LrtsIssueRget(
   const void* srcAddr,
@@ -228,17 +227,11 @@ void LrtsIssueRput(
   int srcPe,
   unsigned short int *srcMode,
   int size);
-void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode);
-void LrtsReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode);
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode);
 
-/* Set the machine specific information for a nocopy source pointer */
-void CmiSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  LrtsSetRdmaSrcInfo(info, ptr, size, mode);
-}
-
-/* Set the machine specific information for a nocopy destination pointer */
-void CmiSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  LrtsSetRdmaDestInfo(info, ptr, size, mode);
+/* Set the machine specific information for a nocopy pointer */
+void CmiSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode){
+  LrtsSetRdmaBufferInfo(info, ptr, size, mode);
 }
 
 void *CmiGetNcpyAck(const void *srcAddr, void *srcAck, int srcPe, const void *destAddr, void *destAck, int destPe, int ackSize) {
@@ -370,14 +363,9 @@ void CmiIssueRput(
                 size);
 }
 
-/* Resource cleanup for source pointer */
-void CmiReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  LrtsReleaseSourceResource(ptr, info, pe, mode);
-}
-
-/* Resource cleanup for destination pointer */
-void CmiReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  LrtsReleaseDestinationResource(ptr, info, pe, mode);
+/* De-register registered memory for pointer */
+void CmiDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode){
+  LrtsDeregisterMem(ptr, info, pe, mode);
 }
 
 #endif /*End of CMK_ONESIDED_DIRECT_IMPL */
index 436d218cfc6a09e69601cebcec6ba473a22f4819..8d25edbcd01699597799f0df0d08ee3c1b562eb8 100644 (file)
@@ -144,10 +144,26 @@ void verbsOnesidedReceivedAck(struct infiRdmaPacket *rdmaPacket) {
 
 /* Support for Nocopy Direct API */
 
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode){
+  struct ibv_mr *mr;
+  if(mode == CMK_BUFFER_PREREG) {
+    mr = METADATAFIELD(ptr)->key;
+  } else {
+    mr = ibv_reg_mr(context->pd, (void *)ptr, size, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ);
+  }
+  if (!mr) {
+    CmiAbort("Memory Registration Failed in LrtsSetRdmaBufferInfo!\n");
+  }
+  CmiVerbsRdmaPtr_t *rdmaSrc = (CmiVerbsRdmaPtr_t *)info;
+  rdmaSrc->mr = mr;
+  rdmaSrc->key = mr->rkey;
+}
+
 struct ibv_mr* registerDirectMemory(const void *addr, int size) {
   struct ibv_mr *mr = ibv_reg_mr(context->pd, (void *)addr, size, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ);
   if (!mr) {
-    CmiAbort("Memory Registration at Destination Failed inside registerDirectMemory!\n");
+    CmiAbort("Memory Registration inside registerDirectMemory!\n");
   }
   return mr;
 }
@@ -308,22 +324,12 @@ void LrtsIssueRput(
   }
 }
 
-// Method invoked to deregister destination memory handle
-void LrtsReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode){
+// Method invoked to deregister a memory handle
+void LrtsDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode){
   if(mode == CMK_BUFFER_REG) {
     CmiVerbsRdmaPtr_t *rdmadest = (CmiVerbsRdmaPtr_t *)info;
     if (ibv_dereg_mr(rdmadest->mr)) {
-      CmiAbort("ibv_dereg_mr() failed at LrtsReleaseDestinationResource\n");
-    }
-  }
-}
-
-// Method invoked to deregister source memory handle
-void LrtsReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode){
-  if(mode == CMK_BUFFER_REG) {
-    CmiVerbsRdmaPtr_t *rdmaSrc = (CmiVerbsRdmaPtr_t *)info;
-    if (ibv_dereg_mr(rdmaSrc->mr)) {
-      CmiAbort("ibv_dereg_mr() failed at LrtsReleaseSourceResource\n");
+      CmiAbort("ibv_dereg_mr() failed at LrtsDeregisterMem\n");
     }
   }
 }
index d67261b82a3de17624b746b509b0c8eb9f98a024..1e4c5ded0d45c3588c2e90d06bee708fc98abdfb 100644 (file)
@@ -144,39 +144,10 @@ typedef struct _cmi_verbs_rdma_reverse_op {
  * error with the message "the size of an array must be greater than zero" */
 DUMB_STATIC_ASSERT(sizeof(CmiVerbsRdmaPtr_t) == CMK_NOCOPY_DIRECT_BYTES);
 
-// Set the machine specific information for a nocopy source pointer
-void LrtsSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  struct ibv_mr *mr;
-  if(mode == CMK_BUFFER_PREREG) {
-    mr = METADATAFIELD(ptr)->key;
-  } else {
-    mr = ibv_reg_mr(context->pd, (void *)ptr, size, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ);
-  }
-  if (!mr) {
-    CmiAbort("Memory Registration at Source Failed!\n");
-  }
-  CmiVerbsRdmaPtr_t *rdmaSrc = (CmiVerbsRdmaPtr_t *)info;
-  rdmaSrc->mr = mr;
-  rdmaSrc->key = mr->rkey;
-}
-
-// Set the machine specific information for a nocopy destination pointer
-void LrtsSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode){
-  struct ibv_mr *mr;
-  if(mode == CMK_BUFFER_PREREG) {
-    mr = METADATAFIELD(ptr)->key;
-  } else {
-    mr = ibv_reg_mr(context->pd, (void *)ptr, size, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ);
-  }
-  if (!mr) {
-    CmiAbort("Memory Registration at Destination Failed!\n");
-  }
-  CmiVerbsRdmaPtr_t *rdmaDest = (CmiVerbsRdmaPtr_t *)info;
-  rdmaDest->mr = mr;
-  rdmaDest->key = mr->rkey;
-}
-
 // Function Declarations
+// Set the machine specific information for a nocopy pointer
+void LrtsSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode);
+
 void postRdma(
   uint64_t local_addr,
   uint32_t local_rkey,
@@ -187,5 +158,37 @@ void postRdma(
   uint64_t rdmaPacket,
   int opcode);
 
+// Perform an RDMA Get call into the local destination address from the remote source address
+void LrtsIssueRget(
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  int size);
+
+// Perform an RDMA Put call into the remote destination address from the local source address
+void LrtsIssueRput(
+  const void* destAddr,
+  void *destInfo,
+  void *destAck,
+  int destAckSize,
+  int destPe,
+  unsigned short int *destMode,
+  const void* srcAddr,
+  void *srcInfo,
+  void *srcAck,
+  int srcAckSize,
+  int srcPe,
+  unsigned short int *srcMode,
+  int size);
+
 struct ibv_mr* registerDirectMemory(const void *addr, int size);
 
index c8980b706a133681e3f3f0319abd678df28fb41f..52b1fbdc17af4065495c9d0a689837ff0d30fe96 100644 (file)
@@ -334,7 +334,7 @@ void CkRdmaAckHandler(void *cbPtr, int pe, const void *ptr) {
 }
 
 // Perform a nocopy put operation into the passed destination using this source
-void CkNcpySource::rput(CkNcpyDestination &destination){
+void CkNcpyBuffer::put(CkNcpyBuffer &destination){
   if(mode == CK_BUFFER_NOREG || destination.mode == CK_BUFFER_NOREG) {
     CkAbort("Cannot perform RDMA operations in CK_BUFFER_NOREG mode\n");
   }
@@ -342,7 +342,7 @@ void CkNcpySource::rput(CkNcpyDestination &destination){
   // Check that the count for both the counters matches
   CkAssert(cnt <= destination.cnt);
 
-  // Check that this object is local when CkRput is called
+  // Check that this object is local when put is called
   CkAssert(CkNodeOf(pe) == CkMyNode());
 
   if(CkNodeOf(destination.pe) == CkMyNode()) {
@@ -374,15 +374,8 @@ void CkNcpySource::rput(CkNcpyDestination &destination){
   }
 }
 
-// Release the registered resources for this source object
-void CkNcpySource::releaseResource(){
-#if CMK_REG_REQUIRED
-  CmiReleaseSourceResource(ptr, layerInfo + CmiGetRdmaCommonInfoSize(), pe, mode);
-#endif
-}
-
 // Perform a nocopy get operation into this destination using the passed source
-void CkNcpyDestination::rget(CkNcpySource &source){
+void CkNcpyBuffer::get(CkNcpyBuffer &source){
   if(mode == CK_BUFFER_NOREG || source.mode == CK_BUFFER_NOREG) {
     CkAbort("Cannot perform RDMA operations in CK_BUFFER_NOREG mode\n");
   }
@@ -390,7 +383,7 @@ void CkNcpyDestination::rget(CkNcpySource &source){
   // Check that the count for both the counters matches
   CkAssert(source.cnt <= cnt);
 
-  // Check that this object is local when CkRget is called
+  // Check that this object is local when get is called
   CkAssert(CkNodeOf(pe) == CkMyNode());
 
   //Check if it is a within-process sending
@@ -423,10 +416,3 @@ void CkNcpyDestination::rget(CkNcpySource &source){
                  cnt);
   }
 }
-
-// Release the registered resources for this destination object
-void CkNcpyDestination::releaseResource(){
-#if CMK_REG_REQUIRED
-  CmiReleaseDestinationResource(ptr, layerInfo + CmiGetRdmaCommonInfoSize(), pe, mode);
-#endif
-}
index d706ab21d6b7d17f561e44719790da297d34f018..0a1437f4046fd4fcde373f8abe1c2f8ba575fa37 100644 (file)
@@ -107,18 +107,20 @@ int getRdmaBufSize(envelope *env);
 void CkRdmaAckHandler(void *cookie);
 void CkRdmaAckHandler(void *cbPtr, int pe, const void *ptr);
 
-class CkNcpyDestination;
+// Class to represent an RDMA buffer
+class CkNcpyBuffer{
+  private:
+  // bool to indicate registration for current values of ptr and cnt on pe
+  bool isRegistered;
 
-// Class to represent an RDMA source
-class CkNcpySource{
   public:
-  // pointer to the source buffer
+  // pointer to the buffer
   const void *ptr;
 
   // number of bytes
   size_t cnt;
 
-  // callback to be invoked on the sender
+  // callback to be invoked on the sender/receiver
   CkCallback cb;
 
   // home pe
@@ -128,7 +130,7 @@ class CkNcpySource{
   #pragma GCC diagnostic push
   #pragma GCC diagnostic ignored "-Wpedantic"
   #endif
-  // machine specific information about the source pointer
+  // machine specific information about the buffer
   char layerInfo[CMK_COMMON_NOCOPY_DIRECT_BYTES + CMK_NOCOPY_DIRECT_BYTES];
   #ifdef __GNUC__
   #pragma GCC diagnostic pop
@@ -137,121 +139,83 @@ class CkNcpySource{
   // mode
   unsigned short int mode;
 
-  CkNcpySource() : ptr(NULL), pe(-1), mode(CK_BUFFER_UNREG) {}
+  CkNcpyBuffer() : ptr(NULL), pe(-1), mode(CK_BUFFER_UNREG) {}
 
-  CkNcpySource(const void *ptr_, size_t cnt_, CkCallback cb_, unsigned short int mode_=CK_BUFFER_UNREG)
+  CkNcpyBuffer(const void *ptr_, size_t cnt_, CkCallback &cb_, unsigned short int mode_=CK_BUFFER_UNREG)
   {
     init(ptr_, cnt_, cb_, mode_);
-    registerMem();
   }
 
-  void init(const void *ptr_, size_t cnt_, CkCallback cb_, unsigned short int mode_=CK_BUFFER_UNREG)
+  void init(const void *ptr_, size_t cnt_, CkCallback &cb_, unsigned short int mode_=CK_BUFFER_UNREG)
   {
     ptr  = ptr_;
     cnt  = cnt_;
     cb   = cb_;
     pe   = CkMyPe();
     mode = mode_;
+    isRegistered = false;
+
+    // Register memory everytime new values are initialized
+    registerMem();
   }
 
+  // Register(Pin) the memory for the buffer
   void registerMem()
   {
+    // Check that this object is local when registerMem is called
+    CkAssert(CkNodeOf(pe) == CkMyNode());
+
+    if(isRegistered == true)
+      return;
+
     // Set machine layer information when mode is not CK_BUFFER_NOREG
     if(mode != CK_BUFFER_NOREG) {
 
       CmiSetRdmaCommonInfo(&layerInfo[0], ptr, cnt);
 
-      /* set the source pointer layerInfo for REG, PREREG modes only for those layers
-       * where memory registration of the buffer is required e.g. GNI, Verbs, OFI
-       */
+      /* Set the pointer layerInfo unconditionally for layers that don't require pinning (MPI, PAMI)
+       * or if mode is REG, PREREG on layers that require pinning (GNI, Verbs, OFI) */
 #if CMK_REG_REQUIRED
       if(mode == CK_BUFFER_REG || mode == CK_BUFFER_PREREG)
 #endif
       {
-        CmiSetRdmaSrcInfo(layerInfo + CmiGetRdmaCommonInfoSize(), ptr, cnt, mode);
+        CmiSetRdmaBufferInfo(layerInfo + CmiGetRdmaCommonInfoSize(), ptr, cnt, mode);
       }
+      isRegistered = true;
     }
   }
 
   void setMode(unsigned short int mode_) { mode = mode_; }
 
-  void rput(CkNcpyDestination &destination);
-
-  void releaseResource();
-};
-PUPbytes(CkNcpySource)
-
-// Class to represent an RDMA destination
-class CkNcpyDestination{
-  public:
-  // pointer to the destination buffer
-  const void *ptr;
-
-  // number of bytes
-  size_t cnt;
-
-  // callback to be invoked on the receiver
-  CkCallback cb;
-
-  // home pe
-  int pe;
-
-  #ifdef __GNUC__
-  #pragma GCC diagnostic push
-  #pragma GCC diagnostic ignored "-Wpedantic"
-  #endif
-  // machine specific information about the destination pointer
-  char layerInfo[CMK_COMMON_NOCOPY_DIRECT_BYTES + CMK_NOCOPY_DIRECT_BYTES];
-  #ifdef __GNUC__
-  #pragma GCC diagnostic pop
-  #endif
-
-  // mode
-  unsigned short int mode;
-
-  CkNcpyDestination() : ptr(NULL), pe(-1), mode(CK_BUFFER_UNREG) {}
-
-  CkNcpyDestination(const void *ptr_, size_t cnt_, CkCallback cb_, unsigned short int mode_=CK_BUFFER_UNREG)
-  {
-    init(ptr_, cnt_, cb_, mode_);
-    registerMem();
-  }
+  void put(CkNcpyBuffer &destination);
 
-  void init(const void *ptr_, size_t cnt_, CkCallback cb_, unsigned short int mode_=CK_BUFFER_UNREG)
-  {
-    ptr  = ptr_;
-    cnt  = cnt_;
-    cb   = cb_;
-    pe   = CkMyPe();
-    mode = mode_;
-  }
+  void get(CkNcpyBuffer &source);
 
-  void registerMem()
-  {
-    // Set machine layer information when mode is not CK_BUFFER_NOREG
-    if(mode != CK_BUFFER_NOREG) {
+  // Deregister(Unpin) the memory that is registered for the buffer
+  void deregisterMem() {
+    // Check that this object is local when deregisterMem is called
+    CkAssert(CkNodeOf(pe) == CkMyNode());
 
-      CmiSetRdmaCommonInfo(&layerInfo[0], ptr, cnt);
+    if(isRegistered == false)
+      return;
 
-      /* set the destination pointer layerInfo for REG, PREREG modes only for those layers
-       * where memory registration of the buffer is required e.g. GNI, Verbs, OFI
-       */
 #if CMK_REG_REQUIRED
-      if(mode == CK_BUFFER_REG || mode == CK_BUFFER_PREREG)
+    CmiDeregisterMem(ptr, layerInfo + CmiGetRdmaCommonInfoSize(), pe, mode);
 #endif
-      {
-        // set the destination pointer layerInfo
-        CmiSetRdmaDestInfo(layerInfo + CmiGetRdmaCommonInfoSize(), ptr, cnt, mode);
-      }
-    }
-  }
 
-  void setMode(unsigned short int mode_) { mode = mode_; }
+    isRegistered = false;
+  }
 
-  void rget(CkNcpySource &source);
+  void pup(PUP::er &p) {
+    p((char *)&ptr, sizeof(ptr));
+    p|cnt;
+    p|cb;
+    p|pe;
+    p|mode;
+    p|isRegistered;
+    PUParray(p, layerInfo, CMK_COMMON_NOCOPY_DIRECT_BYTES + CMK_NOCOPY_DIRECT_BYTES);
+  }
 
-  void releaseResource();
 };
-PUPbytes(CkNcpyDestination)
 
 #endif
index af4666855a12f8c83eb691a6e651129e5053c342..b9fd727b9edbba6a89a0bd36a784dd86aff02103 100644 (file)
@@ -189,9 +189,7 @@ void CmiIssueRput(
   CmiSyncSendAndFree(destPe, sizeof(rdmaPayloadMsg) + size + destAckSize, recvMsg);
 }
 
-void CmiSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode) {}
-void CmiSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode) {}
+void CmiSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode) {}
 
-void CmiReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode) {}
-void CmiReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode) {}
+void CmiDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode) {}
 #endif
index 6032453925e3e567872a738067c994752d0f9976..4078279e862ceccd4d8e77a2acc69ae93366b634 100644 (file)
@@ -23,8 +23,7 @@ void CmiIssueRgets(void *recv, int pe);
 void CmiSetRdmaCommonInfo(void *info, const void *ptr, int size);
 int CmiGetRdmaCommonInfoSize(void);
 
-void CmiSetRdmaSrcInfo(void *info, const void *ptr, int size, unsigned short int mode);
-void CmiSetRdmaDestInfo(void *info, const void *ptr, int size, unsigned short int mode);
+void CmiSetRdmaBufferInfo(void *info, const void *ptr, int size, unsigned short int mode);
 void CmiSetRdmaNcpyAck(RdmaSingleAckCallerFn fn);
 
 /* CmiIssueRget initiates an RDMA read operation, transferring 'size' bytes of data from the address space of 'srcPe' to local address, 'destAddr'.
@@ -68,8 +67,7 @@ void CmiIssueRput(
   unsigned short int *srcMode,
   int size);
 
-void CmiReleaseSourceResource(const void *ptr, void *info, int pe, unsigned short int mode);
-void CmiReleaseDestinationResource(const void *ptr, void *info, int pe, unsigned short int mode);
+void CmiDeregisterMem(const void *ptr, void *info, int pe, unsigned short int mode);
 
 #if CMK_USE_CMA
 void CmiIssueRgetUsingCMA(