e37ea5d9122170c32868f13843d86bc5e9901eae
[charm.git] / examples / charm++ / NQueen / main.C
1 /*
2  * N Queen solver 
3  * Feb 1st
4  *
5  * Copyright by PPL
6  * problem report sun51@uiuc.edu
7 */
8
9 #include "main.decl.h"
10 #include "main.h"
11 #include "nqueen.h"
12 #include "counter.h"
13
14 Main::Main(CkArgMsg* msg)
15 {
16
17     //CkPrintf(" Usage: nqueen Num\n");
18
19     numQueens = 5;
20     grainsize = 3;
21     if(msg->argc > 2)
22     {
23         numQueens = atoi(msg->argv[1]);
24         grainsize = atoi(msg->argv[2]);   
25     }
26     delete msg;
27
28     CkPrintf(" Usage: nqueen numQueen grainsize (%d, g=%d, np=%d)\n", numQueens, grainsize, CkNumPes());
29
30     CkVec<int> initStatus(numQueens);
31     for(int i=0; i<numQueens; i++)
32         initStatus[i] = -1;
33
34     /* timer */
35     mainhandle=thishandle;
36    
37     QueenState *qmsg = new QueenState;
38     qmsg->row = -1; 
39     CProxy_NQueen::ckNew(qmsg);
40     
41     starttimer = CkTimer();
42     counterGroup = counterInit();
43     CkStartQD(CkIndex_Main::Quiescence1((DUMMYMSG *)0), &mainhandle);
44 }
45
46 Main::Main(CkMigrateMessage* msg) {}
47
48 void Main::Quiescence1(DUMMYMSG *msg)
49 {
50     int numSolutions = CProxy_counter(counterGroup).ckLocalBranch()->getTotalCount();
51     double endtimer = CkTimer();
52     CkPrintf("There are %d Solutions to %d queens. Time=%f\n",
53         numSolutions, numQueens, endtimer-starttimer);
54     CkExit();
55 }
56
57 #include "main.def.h"