doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / RefineCommLB.C
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #include "elements.h"
7 #include "ckheap.h"
8 #include "RefineCommLB.h"
9
10 CreateLBFunc_Def(RefineCommLB, "Average load among processors by moving objects away from overloaded processor, communication aware")
11
12 RefineCommLB::RefineCommLB(const CkLBOptions &opt): RefineLB(opt)
13 {
14   lbname = (char *)"RefineCommLB";
15   if (CkMyPe() == 0)
16     CkPrintf("[%d] RefineCommLB created\n",CkMyPe());
17 }
18
19 CmiBool RefineCommLB::QueryBalanceNow(int _step)
20 {
21   return CmiTrue;
22 }
23
24 void RefineCommLB::work(LDStats* stats)
25 {
26 #if CMK_LBDB_ON
27   int obj;
28   int n_pes = stats->nprocs();
29
30   //  CkPrintf("[%d] RefineLB strategy\n",CkMyPe());
31
32   // RemoveNonMigratable(stats, n_pes);
33
34   // get original object mapping
35   int* from_procs = RefinerComm::AllocProcs(n_pes, stats);
36   for(obj=0;obj<stats->n_objs;obj++)  {
37     int pe = stats->from_proc[obj];
38     from_procs[obj] = pe;
39   }
40
41   // Get a new buffer to refine into
42   int* to_procs = RefinerComm::AllocProcs(n_pes, stats);
43
44   RefinerComm refiner(1.003);  // overload tolerance=1.05
45
46   refiner.Refine(n_pes, stats, from_procs, to_procs);
47
48   // Save output
49   for(obj=0;obj<stats->n_objs;obj++) {
50       int pe = stats->from_proc[obj];
51       if (to_procs[obj] != pe) {
52         // CkPrintf("[%d] Obj %d migrating from %d to %d\n",
53         //       CkMyPe(),obj,pe,to_procs[obj]);
54         stats->to_proc[obj] = to_procs[obj];
55       }
56   }
57
58   // Free the refine buffers
59   RefinerComm::FreeProcs(from_procs);
60   RefinerComm::FreeProcs(to_procs);
61 #endif
62 }
63
64 #include "RefineCommLB.def.h"
65
66 /*@}*/