doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / RandCentLB.C
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 /*
7 Status:
8   * support nonmigratable attrib
9   * support processor avail bitvector
10 */
11
12 #include "RandCentLB.h"
13
14 CreateLBFunc_Def(RandCentLB, "Assign objects to processors randomly")
15
16 RandCentLB::RandCentLB(const CkLBOptions &opt): CentralLB(opt)
17 {
18   lbname = "RandCentLB";
19   if (CkMyPe() == 0)
20     CkPrintf("[%d] RandCentLB created\n",CkMyPe());
21 }
22
23 CmiBool RandCentLB::QueryBalanceNow(int _step)
24 {
25   return CmiTrue;
26 }
27
28 inline int chooseProc(int count)
29 {
30   return (int)(CrnDrand()*(count-1) + 0.5);
31 }
32
33 void RandCentLB::work(LDStats* stats)
34 {
35   if (_lb_args.debug()) CkPrintf("Calling RandCentLB strategy\n",CkMyPe());
36
37   int proc, n_pes = stats->nprocs();
38
39   for (proc=0; proc<n_pes; proc++) {
40     if (stats->procs[proc].available) break;
41   }
42   if (proc == n_pes) CmiAbort("RandCentLB> no available processor!");
43
44   int nmigrated = 0;
45   for(int obj=0; obj < stats->n_objs; obj++) {
46       LDObjData &odata = stats->objData[obj];
47       if (odata.migratable) {
48         int dest = chooseProc(n_pes);
49         while (!stats->procs[dest].available) dest = chooseProc(n_pes);
50         if (dest != stats->from_proc[obj]) {
51           if (_lb_args.debug() >= 2)
52             CkPrintf("[%d] Obj %d migrating from %d to %d\n", CkMyPe(),obj,stats->from_proc[obj],dest);
53           nmigrated ++;
54           stats->to_proc[obj] = dest;
55         }
56       }
57   }
58 }
59
60 #include "RandCentLB.def.h"
61
62 /*@}*/