Removed all STL template code from load balancer. Too bad STL doesn't work
[charm.git] / src / ck-ldb / RandCentLB.C
1 #include <charm++.h>
2
3 #if CMK_LBDB_ON
4
5 #include "CkLists.h"
6
7 #include "RandCentLB.h"
8 #include "RandCentLB.def.h"
9
10 void CreateRandCentLB()
11 {
12   CkPrintf("[%d] creating RandCentLB %d\n",CkMyPe(),loadbalancer);
13   loadbalancer = CProxy_RandCentLB::ckNew();
14   CkPrintf("[%d] created RandCentLB %d\n",CkMyPe(),loadbalancer);
15 }
16
17 RandCentLB::RandCentLB()
18 {
19   CkPrintf("[%d] RandCentLB created\n",CkMyPe());
20 }
21
22 CmiBool RandCentLB::QueryBalanceNow(int _step)
23 {
24   CkPrintf("[%d] Balancing on step %d\n",CkMyPe(),_step);
25   return CmiTrue;
26 }
27
28 CLBMigrateMsg* RandCentLB::Strategy(CentralLB::LDStats* stats, int count)
29 {
30   CkPrintf("[%d] RandCentLB strategy\n",CkMyPe());
31
32   CkVector migrateInfo;
33
34   for(int pe=0; pe < count; pe++) {
35     CkPrintf("[%d] PE %d : %d Objects : %d Communication\n",
36              CkMyPe(),pe,stats[pe].n_objs,stats[pe].n_comm);
37     for(int obj=0; obj < stats[pe].n_objs; obj++) {
38       const int dest = static_cast<int>(drand48()*(CmiNumPes()-1) + 0.5);
39       if (dest != pe) {
40         CkPrintf("[%d] Obj %d migrating from %d to %d\n",
41                  CkMyPe(),obj,pe,dest);
42         MigrateInfo* migrateMe = new MigrateInfo;
43         migrateMe->obj = stats[pe].objData[obj].handle;
44         migrateMe->from_pe = pe;
45         migrateMe->to_pe = dest;
46         migrateInfo.push_back((void*)migrateMe);
47       }
48     }
49   }
50
51   int migrate_count=migrateInfo.size();
52   CLBMigrateMsg* msg = new(&migrate_count,1) CLBMigrateMsg;
53   msg->n_moves = migrate_count;
54   for(int i=0; i < migrate_count; i++) {
55     MigrateInfo* item = (MigrateInfo*)migrateInfo[i];
56     msg->moves[i] = *item;
57     delete item;
58     migrateInfo[i] = 0;
59   }
60
61   return msg;
62 };
63
64 #endif