msgQ test: Adjust test parameters (num priorities, numiters)
[charm.git] / tests / charm++ / commSpeed / pgm.C
1 #include <unistd.h>
2 #include <math.h>
3 #include "pgm.h"
4 #include "Pgm.def.h"
5 #include "Worker.h"
6
7 CProxy_main mp;
8
9 main::main(CkArgMsg *m)
10
11   mp = thishandle;
12   WorkerData *wd;
13   if(m->argc<4) {
14     CkPrintf("Usage: commSpeed <#remoteMsgs> <#msgSzBytes> <#iterations>\n");
15     CkExit();
16   }
17   numMsgs = atoi(m->argv[1]);
18   msgSize = atoi(m->argv[2]);
19   numIter = atoi(m->argv[3]);
20   CkPrintf(">>> commSpeed test run with %d remote messages of size %d per processor...\n", numMsgs, msgSize);
21   numMsgs /= 2;
22   if (numMsgs == 0) numMsgs = 1;
23
24   wArray = CProxy_worker::ckNew();
25   // create all the workers
26   for (int i=0; i<CkNumPes(); i++) {
27     wd = new WorkerData;
28     wd->numMsgs = numMsgs;
29     wd->msgSize = msgSize;
30     //CkPrintf("...Creating array element %d on processor %d...\n", i*2, i);
31     wArray[i*2].insert(wd, i);
32     wd = new WorkerData;
33     wd->numMsgs = numMsgs;
34     wd->msgSize = msgSize;
35     //CkPrintf("...Creating array element %d on processor %d...\n", i*2+1, i);
36     wArray[i*2 + 1].insert(wd, i);
37   }
38   localAvg = remoteAvg = localMax = remoteMax = 0.0;
39   localMin = remoteMin = 10000.0;
40   initTime = startTime = CkWallTimer();
41 }
42
43 void main::finish(double avgLocal, double avgRemote)
44 {
45   static int remaining = CkNumPes()*2;
46   static int iterations=0;
47   remaining--;
48   localAvg += avgLocal;
49   remoteAvg += avgRemote;
50   if (remaining == 0) {
51     iterations++;
52     localAvg = localAvg / (CkNumPes()*2*numMsgs);
53     remoteAvg = remoteAvg / (CkNumPes()*2*numMsgs);
54     CkPrintf("%d PE Time for Iteration %d= %3.9f\nREMOTE: Avg=%3.9f  LOCAL: Avg=%3.9f\n",
55              CkNumPes(), iterations, CkWallTimer()-startTime, remoteAvg, localAvg);
56     if (iterations == numIter) {
57       CkPrintf("%d PE Time for all %d iterations: %3.9f\n", CkNumPes(), numIter, CkWallTimer()-initTime);
58       CkExit();
59     }
60     else {
61       remaining = CkNumPes()*2;
62       localAvg = remoteAvg = 0.0;
63       wArray.doStuff();
64       startTime = CkWallTimer();
65     }
66   }
67 }