minor changes, removed warnings.
[charm.git] / src / ck-ldb / RandRefLB.C
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /**
9  * \addtogroup CkLdb
10 */
11 /*@{*/
12
13 #include <charm++.h>
14
15 #if CMK_LBDB_ON
16
17 #include "cklists.h"
18 #include "Refiner.h"
19
20 #include "RandRefLB.h"
21
22 void CreateRandRefLB()
23 {
24   //  CkPrintf("[%d] creating RandRefLB %d\n",CkMyPe(),loadbalancer);
25   loadbalancer = CProxy_RandRefLB::ckNew();
26   //  CkPrintf("[%d] created RandRefLB %d\n",CkMyPe(),loadbalancer);
27 }
28
29 static void lbinit(void) {
30 //        LBSetDefaultCreate(CreateRandRefLB);
31   LBRegisterBalancer("RandRefLB", CreateRandRefLB, "Apply random, then refine");
32 }
33
34 #include "RandRefLB.def.h"
35
36 RandRefLB::RandRefLB()
37 {
38   lbname = "RandRefLB";
39   if (CkMyPe() == 0)
40     CkPrintf("[%d] RandRefLB created\n",CkMyPe());
41 }
42
43 void RandRefLB::work(CentralLB::LDStats* stats, int count)
44 {
45   //  CkPrintf("[%d] RandRefLB strategy\n",CkMyPe());
46
47   CkVec<MigrateInfo*> migrateInfo;
48   int obj;
49
50   RandCentLB::work(stats, count);
51
52   // from_proc after first lb strategy
53   int* from_procs = Refiner::AllocProcs(count,stats);
54   for(obj=0; obj < stats->n_objs; obj++)
55       from_procs[obj] = stats->to_proc[obj];
56
57   int* to_procs = Refiner::AllocProcs(count,stats);
58
59   Refiner refiner(1.02);
60   refiner.Refine(count,stats,from_procs,to_procs);
61
62   for(obj=0; obj < stats->n_objs; obj++) {
63       if (stats->from_proc[obj] != to_procs[obj]) {
64         // CkPrintf("[%d] Obj %d migrating from %d to %d\n",
65         //               CkMyPe(),obj,stats->from_proc[obj],to_procs[obj]);
66         stats->to_proc[obj] = to_procs[obj];
67       }
68   }
69
70   Refiner::FreeProcs(from_procs);
71   Refiner::FreeProcs(to_procs);
72 };
73
74 #endif
75
76
77 /*@}*/