example add msgCount in all-to-all example
authorYanhua Sun <yanhuas@jyc1.(none)>
Fri, 27 Jul 2012 19:46:26 +0000 (14:46 -0500)
committerYanhua Sun <yanhuas@jyc1.(none)>
Fri, 27 Jul 2012 19:46:26 +0000 (14:46 -0500)
examples/charm++/allToAll/allToAll.C
examples/charm++/allToAll/allToAll.ci

index bcb8cdf75e0c52aa6695d9d756919e9efa331e34..a4234de3895107233dc6161af48732b59299ee11 100644 (file)
@@ -4,6 +4,7 @@
 /*readonly*/ int numChares;
 /*readonly*/ int msgSize;
 /*readonly*/ int max_iter;
 /*readonly*/ int numChares;
 /*readonly*/ int msgSize;
 /*readonly*/ int max_iter;
+/*readonly*/ int msgCount;
 
 struct allToAllMsg : public CMessage_allToAllMsg {
   char *data;
 
 struct allToAllMsg : public CMessage_allToAllMsg {
   char *data;
@@ -16,17 +17,22 @@ struct Main : public CBase_Main {
 
        Main(CkArgMsg* m) {
 
 
        Main(CkArgMsg* m) {
 
-        max_iter = 1000;
+        max_iter = 300;
         numChares = CkNumPes();
         msgSize = 1024;
         numChares = CkNumPes();
         msgSize = 1024;
-               // 3D allToAll on a NxNxN array
+        msgCount = 1;
+        // 3D allToAll on a NxNxN array
         if(m->argc >= 2)
         {
             msgSize = atoi(m->argv[1]);
         }
         if(m->argc >= 3)
         {
         if(m->argc >= 2)
         {
             msgSize = atoi(m->argv[1]);
         }
         if(m->argc >= 3)
         {
-            numChares = atoi(m->argv[2]);
+            msgCount = atoi(m->argv[2]);
+        }
+        if(m->argc >= 4)
+        {
+            max_iter = atoi(m->argv[3]);
         }
         
         delete m;
         }
         
         delete m;
@@ -47,14 +53,16 @@ struct Main : public CBase_Main {
        void nextallToAll() {
                
         iter++;
        void nextallToAll() {
                
         iter++;
+        if(iter %50 == 0)
+            CkPrintf("iter = %d\n", iter);
         if(iter < max_iter)
         {
             allToAllProxy.doAllToAll();
         }else
         {
             double time = CkWallTimer() - start;
         if(iter < max_iter)
         {
             allToAllProxy.doAllToAll();
         }else
         {
             double time = CkWallTimer() - start;
-            CkPrintf("allToAll on %d cores for msg size: %d per iteration:%f ms\n",
-                CkNumPes(), msgSize,  time/max_iter*1000);
+            CkPrintf("allToAll on %d cores for msg size: %d\n iteration(ms):%d\t%f\n",
+                CkNumPes(), msgSize,  msgSize, time/max_iter*1000);
             CkExit();
         }
     }
             CkExit();
         }
     }
@@ -73,8 +81,8 @@ struct allToAll : public CBase_allToAll {
                 __sdag_init();
         iter = 0;
         recvCnt = 0;
                 __sdag_init();
         iter = 0;
         recvCnt = 0;
-               msgs = new allToAllMsg*[numChares];
-               for(int i = 0; i < numChares; i++) {
+               msgs = new allToAllMsg*[numChares*msgCount];
+               for(int i = 0; i < msgCount*numChares; i++) {
                        msgs[i] = new (msgSize) allToAllMsg;
                }
 
                        msgs[i] = new (msgSize) allToAllMsg;
                }
 
@@ -84,12 +92,14 @@ struct allToAll : public CBase_allToAll {
 
        // Sends transpose messages to every other chare
        void sendAllToAll() {
 
        // Sends transpose messages to every other chare
        void sendAllToAll() {
-               
+       
+        for(int j=0;j<msgCount; j++) {
         for(int i = thisIndex; i < thisIndex+numChares; i++) {
                        int t = i % numChares;
         for(int i = thisIndex; i < thisIndex+numChares; i++) {
                        int t = i % numChares;
-                       CkSetRefNum(msgs[t],iter);
-                       thisProxy[t].getAllToAll(msgs[t]);
+                       CkSetRefNum(msgs[j*numChares+t],iter);
+                       thisProxy[t].getAllToAll(msgs[j*numChares+t]);
                }
                }
+        }
        }
 
        // Sends transpose messages to every other chare
        }
 
        // Sends transpose messages to every other chare
index c1b0cac8bf012526393e523891c0944fd559c11a..b7edd4c2bdfbe1af7a148ff039c1e37816e0c62e 100644 (file)
@@ -4,6 +4,7 @@ mainmodule allToAll {
     readonly int max_iter;
     readonly int numChares;
     readonly int msgSize;
     readonly int max_iter;
     readonly int numChares;
     readonly int msgSize;
+    readonly int msgCount;
 
        message allToAllMsg {
                char data[];
 
        message allToAllMsg {
                char data[];
@@ -26,7 +27,7 @@ mainmodule allToAll {
                 sendAllToAll();
             }
 
                 sendAllToAll();
             }
 
-            for(count = 0; count < numChares; ++count){
+            for(count = 0; count < msgCount*numChares; ++count){
                 when getAllToAll[iter](allToAllMsg *m) atomic {
                     processAllToAll(m);
                 }
                 when getAllToAll[iter](allToAllMsg *m) atomic {
                     processAllToAll(m);
                 }