msgQ test: Adjust test parameters (num priorities, numiters)
[charm.git] / tests / charm++ / commSpeed / Worker.C
1 #include "Worker.h"
2 #include "Worker.def.h"
3 #include "pgm.h"
4
5 CProxy_worker wArray; 
6
7 worker::worker(WorkerData *m)
8 {
9   numMsgs = m->numMsgs;
10   msgSize = m->msgSize;
11   delete m;
12   sent = 0;
13   rsum = lsum = rmax = lmax = 0.0;
14   rmin = lmin = 10000.0;
15   //CkPrintf("Worker %d created on PE %d; numMsgs=%d, msgSize=%d; sending to self.\n", thisIndex, CkMyPe(), msgSize, numMsgs);
16   wArray[thisIndex].doStuff();
17 }
18
19 void worker::doStuff()
20 {
21   int i;
22   double timer;
23   WorkMsg *nm;
24   // generate remote events
25   timer = CkWallTimer();
26   for (i=0; i<numMsgs; i++) {
27     nm = new (msgSize/sizeof(int), 0) WorkMsg;  
28     memset(nm->data, 0, msgSize);
29     wArray[(thisIndex+2)%(CkNumPes()*2)].work(nm);
30     //CkPrintf("%d on %d sending %d th remote work to %d\n", thisIndex, CkMyPe(), i, (thisIndex+2)%(CkNumPes()*2));
31   }
32   timer = CkWallTimer() - timer;
33   rsum += timer;
34
35   // generate a local event
36   timer = CkWallTimer();
37   for (i=0; i<numMsgs; i++) {
38     nm = new (msgSize/sizeof(int), 0) WorkMsg;
39     memset(nm->data, 0, msgSize);
40     if (thisIndex%2 == 0) {
41       wArray[thisIndex+1].work(nm);
42       //CkPrintf("%d on %d sending %d th local work to %d\n", thisIndex, CkMyPe(), i, thisIndex+1);
43     }
44     else {
45       wArray[thisIndex-1].work(nm);
46       //CkPrintf("%d on %d sending %d th local work to %d\n", thisIndex, CkMyPe(), i, thisIndex-1);
47     }
48   }
49   timer = CkWallTimer() - timer;
50   lsum += timer;
51 }  
52
53 void worker::work(WorkMsg *m)
54 {
55   //CkPrintf("%d on %d received work\n", thisIndex, CkMyPe());
56   sent++;
57   if (sent >= numMsgs) {
58     mp.finish(lsum, rsum);
59     sent = 0;
60     rsum = lsum = rmax = lmax = 0.0;
61     rmin = lmin = 10000.0;
62     return;
63   }
64 }
65