Removed all STL template code from load balancer. Too bad STL doesn't work
authorRobert Brunner <rbrunner@uiuc.edu>
Thu, 25 Nov 1999 00:23:16 +0000 (00:23 +0000)
committerRobert Brunner <rbrunner@uiuc.edu>
Thu, 25 Nov 1999 00:23:16 +0000 (00:23 +0000)
yet.

src/ck-ldb/CentralLB.C
src/ck-ldb/CkLists.h [new file with mode: 0644]
src/ck-ldb/HeapCentLB.C
src/ck-ldb/LBDBManager.C
src/ck-ldb/LBDBManager.h
src/ck-ldb/MetisLB.C
src/ck-ldb/NeighborLB.C
src/ck-ldb/RandCentLB.C
src/ck-ldb/RefineLB.C
src/ck-ldb/WSLB.C
src/scripts/Makefile

index 020797a2e7fc1ada8c35dbce09293ae5b1e0e777..0a2ce87fcec9e6318fd5fc6cd569a9c0ae626650 100644 (file)
@@ -146,7 +146,7 @@ void CentralLB::ReceiveMigration(CLBMigrateMsg *m)
     MigrateInfo& move = m->moves[i];
     const int me = CkMyPe();
     if (move.from_pe == me && move.to_pe != me) {
-      //      CkPrintf("[%d] migrating object to %d\n",move.from_pe,move.to_pe);
+      CkPrintf("[%d] migrating object to %d\n",move.from_pe,move.to_pe);
       theLbdb->Migrate(move.obj,move.to_pe);
     } else if (move.from_pe != me && move.to_pe == me) {
       //      CkPrintf("[%d] expecting object from %d\n",move.to_pe,move.from_pe);
diff --git a/src/ck-ldb/CkLists.h b/src/ck-ldb/CkLists.h
new file mode 100644 (file)
index 0000000..179bbc9
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef _CKLISTS_H_
+#define _CKLISTS_H_
+
+#include <unistd.h>
+
+class CkVector {
+public:
+  CkVector() { items = new void*[blk_sz]; in_use = 0; cur_sz = blk_sz; };
+  CkVector(size_t n) { items = new void*[n]; in_use = 0; cur_sz = n;  };
+  ~CkVector() { if (items) delete [] items; }
+
+  void*& operator[](size_t n) { return items[n]; };
+
+  void push_back(void* item) {
+    if (cur_sz == in_use) grow_list();
+    items[in_use] = item;
+    in_use++;
+  };
+
+  size_t size() { return in_use; };
+
+private:
+  void grow_list() {
+    void** old_items = items;
+    cur_sz *= 2;
+    items = new void*[cur_sz];
+    for(int i=0; i < in_use; i++)
+      items[i] = old_items[i];
+    delete [] old_items;
+  };
+    
+  enum { blk_sz = 1000 };               
+  void** items;
+  int in_use;
+  int cur_sz;
+};
+
+#endif
index 2c191016646c04c9d3ea2ecd6a63d23ccfdfd5c4..5e694e64820d63a6f493cc19af8288c19c5253a1 100644 (file)
@@ -2,23 +2,10 @@
 
 #if CMK_LBDB_ON
 
-#if CMK_STL_USE_DOT_H
-#include <deque.h>
-#include <queue.h>
-#else
-#include <deque>
-#include <queue>
-#endif
-
+#include "CkLists.h"
 #include "HeapCentLB.h"
 #include "HeapCentLB.def.h"
 
-#if CMK_STL_USE_DOT_H
-template class deque<CentralLB::MigrateInfo>;
-#else
-template class std::deque<CentralLB::MigrateInfo>;
-#endif
-
 void CreateHeapCentLB()
 {
   CkPrintf("[%d] creating HeapCentLB %d\n",CkMyPe(),loadbalancer);
@@ -63,91 +50,88 @@ void HeapCentLB::Heapify(HeapData *heap, int node, int heapSize)
 
 CLBMigrateMsg* HeapCentLB::Strategy(CentralLB::LDStats* stats, int count)
 {
-       int pe,obj;
+  int pe,obj;
   CkPrintf("[%d] HeapCentLB strategy\n",CkMyPe());
 
-#if CMK_STL_USE_DOT_H
-  queue<MigrateInfo> migrateInfo;
-#else
-  std::queue<MigrateInfo> migrateInfo;
-#endif
-       
-       int totalObjs = 0;
-       HeapData *cpuData = new HeapData[count];
-       HeapData *objData;
-
-       for (pe=0; pe < count; pe++) {
-               totalObjs += stats[pe].n_objs;
-               cpuData[pe].cpuTime = 0.;
-               cpuData[pe].pe = cpuData[pe].id = pe;
-       }
+  CkVector migrateInfo;
+
+  int totalObjs = 0;
+  HeapData *cpuData = new HeapData[count];
+  HeapData *objData;
 
-       objData = new HeapData[totalObjs];
-       int objCount = 0;
+  for (pe=0; pe < count; pe++) {
+    totalObjs += stats[pe].n_objs;
+    cpuData[pe].cpuTime = 0.;
+    cpuData[pe].pe = cpuData[pe].id = pe;
+  }
+
+  objData = new HeapData[totalObjs];
+  int objCount = 0;
   for(pe=0; pe < count; pe++) {
     CkPrintf("[%d] PE %d : %d Objects : %d Communication\n",
             CkMyPe(),pe,stats[pe].n_objs,stats[pe].n_comm);
 
     for(obj=0; obj < stats[pe].n_objs; obj++, objCount++) {
+      objData[objCount].cpuTime = stats[pe].objData[obj].cpuTime;
+      objData[objCount].pe = pe;
+      objData[objCount].id = obj;
+    }
+  }
 
-                       objData[objCount].cpuTime = stats[pe].objData[obj].cpuTime;
-                       objData[objCount].pe = pe;
-                       objData[objCount].id = obj;
-               }
-       }
-
-       for (obj=1; obj < totalObjs; obj++) {
-               HeapData key = objData[obj];
-               int i = obj-1;
-               while (i >=0 && objData[i].cpuTime < key.cpuTime) {
-                       objData[i+1] = objData[i];
-                       i--;
-               }
-               objData[i+1] = key;
-       }
-
-       int heapSize = count-1;
-       HeapData minCpu;        
-       for (obj=0; obj < totalObjs; obj++) {
-
-               //Operation of extracting the minimum(the least loaded processor) from the heap
-               minCpu = cpuData[0];
-               cpuData[0] = cpuData[heapSize];
-               heapSize--;
-               Heapify(cpuData, 0, heapSize);          
-
-               //Increment the time of the least loaded processor by the cpuTime of the `heaviest' object
-               minCpu.cpuTime += objData[obj].cpuTime;
+  for (obj=1; obj < totalObjs; obj++) {
+    HeapData key = objData[obj];
+    int i = obj-1;
+    while (i >=0 && objData[i].cpuTime < key.cpuTime) {
+      objData[i+1] = objData[i];
+      i--;
+    }
+    objData[i+1] = key;
+  }
+  
+  int heapSize = count-1;
+  HeapData minCpu;     
+  for (obj=0; obj < totalObjs; obj++) {
+    // Operation of extracting the minimum(the least loaded processor)
+    // from the heap
+    minCpu = cpuData[0];
+    cpuData[0] = cpuData[heapSize];
+    heapSize--;
+    Heapify(cpuData, 0, heapSize);             
+
+    // Increment the time of the least loaded processor by the cpuTime of
+    // the `heaviest' object
+    minCpu.cpuTime += objData[obj].cpuTime;
 
     //Insert object into migration queue if necessary
-               const int dest = minCpu.pe;
-               const int pe   = objData[obj].pe;
-               const int id   = objData[obj].id;
-               if (dest != pe) {
-                       CkPrintf("[%d] Obj %d migrating from %d to %d\n",
-                                                        CkMyPe(),obj,pe,dest);
-                       MigrateInfo migrateMe;
-                       migrateMe.obj = stats[pe].objData[id].handle;
-                       migrateMe.from_pe = pe;
-                       migrateMe.to_pe = dest;
-                       migrateInfo.push(migrateMe);
-               }
-               
-               //Insert the least loaded processor with load updated back into the heap
-               heapSize++;
-               int location = heapSize;
-               while (location>0 && cpuData[(location-1)/2].cpuTime > minCpu.cpuTime) {
-                       cpuData[location] = cpuData[(location-1)/2];
-                       location = (location-1)/2;
-               }
-               cpuData[location] = minCpu;
-       }
+    const int dest = minCpu.pe;
+    const int pe   = objData[obj].pe;
+    const int id   = objData[obj].id;
+    if (dest != pe) {
+      CkPrintf("[%d] Obj %d migrating from %d to %d\n",
+              CkMyPe(),obj,pe,dest);
+      MigrateInfo *migrateMe = new MigrateInfo;
+      migrateMe->obj = stats[pe].objData[id].handle;
+      migrateMe->from_pe = pe;
+      migrateMe->to_pe = dest;
+      migrateInfo.push_back((void*)migrateMe);
+    }
+    //Insert the least loaded processor with load updated back into the heap
+    heapSize++;
+    int location = heapSize;
+    while (location>0 && cpuData[(location-1)/2].cpuTime > minCpu.cpuTime) {
+      cpuData[location] = cpuData[(location-1)/2];
+      location = (location-1)/2;
+    }
+    cpuData[location] = minCpu;
+  }
   int migrate_count=migrateInfo.size();
   CLBMigrateMsg* msg = new(&migrate_count,1) CLBMigrateMsg;
   msg->n_moves = migrate_count;
   for(int i=0; i < migrate_count; i++) {
-    msg->moves[i] = migrateInfo.front();
-    migrateInfo.pop();
+    MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
+    msg->moves[i] = *item;
+    delete item;
+    migrateInfo[i] = 0;
   }
   return msg;
 };
index 923e0c7b174eb09bdd8caa5558432c28b2d3ccbc..4e469eba1f0b2b7f700cd2f6848bdcb44badbd06 100644 (file)
@@ -7,20 +7,6 @@
 
 struct MigrateCB;
 
-#if CMK_STL_USE_DOT_H
-template class vector<LBOM*>;
-template class vector<LBObj*>;
-template class vector<LBDB::MigrateCB*>;
-template class vector<LocalBarrier::client*>;
-template class vector<LocalBarrier::receiver*>;
-#else
-template class std::vector<LBOM*>;
-template class std::vector<LBObj*>;
-template class std::vector<LBDB::MigrateCB*>;
-template class std::vector<LocalBarrier::client*>;
-template class std::vector<LocalBarrier::receiver*>;
-#endif
-
 /*************************************************************
  * LBDB Code
  *************************************************************/
@@ -67,12 +53,12 @@ LDObjHandle LBDB::AddObj(LDOMHandle _h, LDObjid _id,
 
 void LBDB::UnregisterObj(LDObjHandle _h)
 {
-  objs[_h.handle]->registered=CmiFalse;
+  ((LBObj*)objs[_h.handle])->registered=CmiFalse;
 }
 
 void LBDB::RegisteringObjects(LDOMHandle _h)
 {
-  LBOM* om = oms[_h.handle];
+  LBOM* om = (LBOM*)oms[_h.handle];
   if (!om->RegisteringObjs()) {
     if (oms_registering == 0)
       localBarrier.TurnOff();
@@ -83,7 +69,7 @@ void LBDB::RegisteringObjects(LDOMHandle _h)
 
 void LBDB::DoneRegisteringObjects(LDOMHandle _h)
 {
-  LBOM* om = oms[_h.handle];
+  LBOM* om = (LBOM*)oms[_h.handle];
   if (om->RegisteringObjs()) {
     oms_registering--;
     if (oms_registering == 0)
@@ -131,10 +117,10 @@ void LBDB::ClearLoads(void)
 {
   int i;
   for(i=0; i < objCount; i++)
-    if (objs[i]->registered)
+    if (((LBObj*)objs[i])->registered)
     {
-      objs[i]->data.wallTime = 
-       objs[i]->data.cpuTime = 0.;
+      ((LBObj*)objs[i])->data.wallTime = 
+       ((LBObj*)objs[i])->data.cpuTime = 0.;
     }
   delete commTable;
   commTable = new LBCommTable;
@@ -147,28 +133,30 @@ int LBDB::ObjDataCount()
   int nitems=0;
   int i;
   for(i=0; i < objCount; i++)
-    if (objs[i]->registered)
+    if (((LBObj*)objs[i])->registered)
       nitems++;
   return nitems;
 }
 
 void LBDB::GetObjData(LDObjData *dp)
 {
-  for(ObjList::iterator ol = objs.begin(); ol != objs.end(); ol++)
-    if ((*ol)->registered)
-      *dp++ = (*ol)->ObjData();
+  for(int i = 0; i < objs.size(); i++) {
+    LBObj* obj = (LBObj*) objs[i];
+    if ( obj->registered )
+      *dp++ = obj->ObjData();
+  }
 }
 
 void LBDB::Migrate(LDObjHandle h, int dest)
 {
   if (h.handle > objCount)
     CmiPrintf("[%d] Handle %d out of range 0-%d\n",CmiMyPe(),h.handle,objCount);
-  else if (!objs[h.handle]->registered)
+  else if (!((LBObj*)objs[h.handle])->registered)
     CmiPrintf("[%d] Handle %d no longer registered, range 0-%d\n",
            CmiMyPe(),h.handle,objCount);
 
-  if ((h.handle < objCount) && (objs[h.handle]->registered)) {
-    LBOM *const om = oms[objs[h.handle]->parentOM.handle];
+  if ((h.handle < objCount) && (((LBObj*)objs[h.handle])->registered)) {
+    LBOM *const om = (LBOM*)oms[((LBObj*)objs[h.handle])->parentOM.handle];
     om->Migrate(h, dest);
   }
   return;
@@ -178,8 +166,10 @@ void LBDB::Migrated(LDObjHandle h)
 {
   // Object migrated, inform load balancers
 
-  for(int i=0; i < migrateCBList.size(); i++)
-    (migrateCBList[i]->fn)(migrateCBList[i]->data,h);
+  for(int i=0; i < migrateCBList.size(); i++) {
+    MigrateCB* cb = (MigrateCB*)migrateCBList[i];
+    (cb->fn)(cb->data,h);
+  }
   
 }
 
@@ -190,7 +180,7 @@ void LBDB::NotifyMigrated(LDMigratedFn fn, void* data)
 
   callbk->fn = fn;
   callbk->data = data;
-  migrateCBList.push_back(callbk);
+  migrateCBList.push_back((void*)callbk);
 }
 
 void LBDB::BackgroundLoad(double* walltime, double* cputime)
@@ -223,7 +213,7 @@ LDBarrierClient LocalBarrier::AddClient(LDResumeFn fn, void* data)
 
   LDBarrierClient ret_val;
   ret_val.serial = max_client;
-  clients.push_back(new_client);
+  clients.push_back((void*)new_client);
   max_client++;
 
   client_count++;
@@ -235,7 +225,7 @@ void LocalBarrier::RemoveClient(LDBarrierClient c)
 {
   const int cnum = c.serial;
   if (cnum < max_client && clients[cnum] != 0) {
-    delete clients[cnum];
+    delete ((client*)clients[cnum]);
     clients[cnum] = 0;
     client_count--;
   }
@@ -259,14 +249,14 @@ void LocalBarrier::RemoveReceiver(LDBarrierReceiver c)
 {
   const int cnum = c.serial;
   if (cnum < max_receiver && receivers[cnum] != 0) {
-    delete receivers[cnum];
+    delete ((receiver*)receivers[cnum]);
     receivers[cnum] = 0;
   }
 }
 
 void LocalBarrier::AtBarrier(LDBarrierClient h)
 {
-  clients[h.serial]->refcount++;
+  ((client*)clients[h.serial])->refcount++;
   at_count++;
   CheckBarrier();
 }
@@ -279,7 +269,7 @@ void LocalBarrier::CheckBarrier()
     CmiBool at_barrier = CmiFalse;
 
     for(int i=0; i < max_client; i++)
-      if (clients[i] != 0 && clients[i]->refcount >= cur_refcount)
+      if (clients[i] != 0 && ((client*)clients[i])->refcount >= cur_refcount)
        at_barrier = CmiTrue;
 
     if (at_barrier) {
@@ -297,7 +287,7 @@ void LocalBarrier::CallReceivers(void)
 //  for(int i=0; i < max_receiver; i++)
     for (int i=max_receiver-1; i>=0; i--)
     if (receivers[i] != 0) {
-      receivers[i]->fn(receivers[i]->data);
+      ((receiver*)receivers[i])->fn(((receiver*)receivers[i])->data);
       called_receiver = CmiTrue;
     }
 
@@ -310,7 +300,7 @@ void LocalBarrier::ResumeClients(void)
 {
   for(int i=0; i < max_client; i++)
     if (clients[i] != 0) 
-      clients[i]->fn(clients[i]->data);
+      ((client*)clients[i])->fn(((client*)clients[i])->data);
 }
 
 #endif
index db8aa064854a8e8f387d1a7db0e22f11429fce7c..4457c4fe0674553623a0445bdfdae7d184258719 100644 (file)
@@ -1,14 +1,9 @@
 #ifndef LBDB_H
 #define LBDB_H
 
-#if CMK_STL_USE_DOT_H
-#include <vector.h>
-#else  // CMK_STL_NO_DOT_H
-#include <vector>
-#endif
-
 #include "converse.h"
 #include "lbdb.h"
+#include "CkLists.h"
 
 #include "LBObj.h"
 #include "LBOM.h"
@@ -45,13 +40,8 @@ private:
     LDBarrierFn fn;
   };
 
-#if CMK_STL_USE_DOT_H
-  vector<client*> clients;
-  vector<receiver*> receivers;
-#else
-  std::vector<client*> clients;
-  std::vector<receiver*> receivers;
-#endif
+  CkVector clients;
+  CkVector receivers;
 
   int cur_refcount;
   int max_client;
@@ -84,8 +74,8 @@ public:
   void RegisteringObjects(LDOMHandle _h);
   void DoneRegisteringObjects(LDOMHandle _h);
 
-  LBOM *LbOM(LDOMHandle h) { return oms[h.handle]; };
-  LBObj *LbObj(LDObjHandle h) { return objs[h.handle]; };
+  LBOM *LbOM(LDOMHandle h) { return (LBOM*)oms[h.handle]; };
+  LBObj *LbObj(LDObjHandle h) { return (LBObj*)objs[h.handle]; };
   void DumpDatabase(void);
   void TurnStatsOn(void) { statsAreOn = CmiTrue; machineUtil.StatsOn(); };
   void TurnStatsOff(void) { statsAreOn = CmiFalse; machineUtil.StatsOff(); };
@@ -151,15 +141,10 @@ private:
     void* data;
   };
 
-#if CMK_STL_USE_DOT_H
-  typedef vector<LBOM*> OMList;
-  typedef vector<LBObj*> ObjList;
-  typedef vector<MigrateCB*> MigrateCBList;
-#else
-  typedef std::vector<LBOM*> OMList;
-  typedef std::vector<LBObj*> ObjList;
-  typedef std::vector<MigrateCB*> MigrateCBList;
-#endif
+  typedef CkVector OMList;
+  typedef CkVector ObjList;
+  typedef CkVector MigrateCBList;
+
   LBCommTable* commTable;
   OMList oms;
   int omCount;
index 430da0a717b11cac877eeae042a49b2f8a619763..86817ccb22759ec85b444649b5c318900f31eb99 100644 (file)
@@ -2,23 +2,11 @@
 
 #if CMK_LBDB_ON
 
-#if CMK_STL_USE_DOT_H
-#include <deque.h>
-#include <queue.h>
-#else
-#include <deque>
-#include <queue>
-#endif
+#include "CkLists.h"
 
 #include "MetisLB.h"
 #include "MetisLB.def.h"
 
-#if CMK_STL_USE_DOT_H
-template class deque<CentralLB::MigrateInfo>;
-#else
-template class std::deque<CentralLB::MigrateInfo>;
-#endif
-
 void CreateMetisLB()
 {
   // CkPrintf("[%d] creating MetisLB %d\n",CkMyPe(),loadbalancer);
@@ -83,11 +71,7 @@ CLBMigrateMsg* MetisLB::Strategy(CentralLB::LDStats* stats, int count)
 {
   // CkPrintf("[%d] MetisLB strategy\n",CkMyPe());
 
-#if CMK_STL_USE_DOT_H
-  queue<MigrateInfo> migrateInfo;
-#else
-  std::queue<MigrateInfo> migrateInfo;
-#endif
+  CkVector migrateInfo;
 
   int i, j;
   int numobjs = 0;
@@ -207,11 +191,11 @@ CLBMigrateMsg* MetisLB::Strategy(CentralLB::LDStats* stats, int count)
 
   for(i=0; i<numobjs; i++) {
     if(origmap[i] != newmap[i]) {
-      MigrateInfo migrateMe;
-      migrateMe.obj = handles[i];
-      migrateMe.from_pe = origmap[i];
-      migrateMe.to_pe = newmap[i];
-      migrateInfo.push(migrateMe);
+      MigrateInfo* migrateMe = new MigrateInfo;
+      migrateMe->obj = handles[i];
+      migrateMe->from_pe = origmap[i];
+      migrateMe->to_pe = newmap[i];
+      migrateInfo.push_back((void*)migrateMe);
     }
   }
 
@@ -224,8 +208,10 @@ CLBMigrateMsg* MetisLB::Strategy(CentralLB::LDStats* stats, int count)
   CLBMigrateMsg* msg = new(&migrate_count,1) CLBMigrateMsg;
   msg->n_moves = migrate_count;
   for(i=0; i < migrate_count; i++) {
-    msg->moves[i] = migrateInfo.front();
-    migrateInfo.pop();
+    MigrateInfo* item = (MigrateInfo*)migrateInfo[i];
+    msg->moves[i] = *item;
+    delete item;
+    migrateInfo[i] = 0;
   }
 
   return msg;
index 74afbfeafe037c84fa36237754f0e33f75ec45a9..c3882b5fa00e35eb97ecd7715a32f6cf74eb3d88 100644 (file)
@@ -319,45 +319,6 @@ NLBMigrateMsg* NeighborLB::Strategy(LDStats* stats,int count)
   return msg;
 }
 
-// void* NLBStatsMsg::alloc(int msgnum, size_t size, int* array, int priobits)
-// {
-//   int totalsize = size + array[0] * sizeof(LDObjData) 
-//     + array[1] * sizeof(LDCommData);
-
-//   NLBStatsMsg* ret =
-//     static_cast<NLBStatsMsg*>(CkAllocMsg(msgnum,totalsize,priobits));
-
-//   ret->objData = reinterpret_cast<LDObjData*>((reinterpret_cast<char*>(ret) 
-//                                            + size));
-//   ret->commData = reinterpret_cast<LDCommData*>(ret->objData + array[0]);
-
-//   return static_cast<void*>(ret);
-// }
-
-// void* NLBStatsMsg::pack(NLBStatsMsg* m)
-// {
-//   m->objData = 
-//     reinterpret_cast<LDObjData*>(reinterpret_cast<char*>(m->objData)
-//       - reinterpret_cast<char*>(&m->objData));
-//   m->commData = 
-//     reinterpret_cast<LDCommData*>(reinterpret_cast<char*>(m->commData)
-//       - reinterpret_cast<char*>(&m->commData));
-//   return static_cast<void*>(m);
-// }
-
-// NLBStatsMsg* NLBStatsMsg::unpack(void *m)
-// {
-//   NLBStatsMsg* ret_val = static_cast<NLBStatsMsg*>(m);
-
-//   ret_val->objData = 
-//     reinterpret_cast<LDObjData*>(reinterpret_cast<char*>(&ret_val->objData)
-//       + reinterpret_cast<size_t>(ret_val->objData));
-//   ret_val->commData = 
-//     reinterpret_cast<LDCommData*>(reinterpret_cast<char*>(&ret_val->commData)
-//       + reinterpret_cast<size_t>(ret_val->commData));
-//   return ret_val;
-// }
-
 void* NLBMigrateMsg::alloc(int msgnum, size_t size, int* array, int priobits)
 {
   int totalsize = size + array[0] * sizeof(NeighborLB::MigrateInfo);
index 87b9c890dd6faead770e1fa86d3078173fc6cdc9..8eb82d774a1aea031ed2efc944f3cf4cc3d2ad39 100644 (file)
@@ -2,23 +2,11 @@
 
 #if CMK_LBDB_ON
 
-#if CMK_STL_USE_DOT_H
-#include <deque.h>
-#include <queue.h>
-#else
-#include <deque>
-#include <queue>
-#endif
+#include "CkLists.h"
 
 #include "RandCentLB.h"
 #include "RandCentLB.def.h"
 
-#if CMK_STL_USE_DOT_H
-template class deque<CentralLB::MigrateInfo>;
-#else
-template class std::deque<CentralLB::MigrateInfo>;
-#endif
-
 void CreateRandCentLB()
 {
   CkPrintf("[%d] creating RandCentLB %d\n",CkMyPe(),loadbalancer);
@@ -41,11 +29,7 @@ CLBMigrateMsg* RandCentLB::Strategy(CentralLB::LDStats* stats, int count)
 {
   CkPrintf("[%d] RandCentLB strategy\n",CkMyPe());
 
-#if CMK_STL_USE_DOT_H
-  queue<MigrateInfo> migrateInfo;
-#else
-  std::queue<MigrateInfo> migrateInfo;
-#endif
+  CkVector migrateInfo;
 
   for(int pe=0; pe < count; pe++) {
     CkPrintf("[%d] PE %d : %d Objects : %d Communication\n",
@@ -55,11 +39,11 @@ CLBMigrateMsg* RandCentLB::Strategy(CentralLB::LDStats* stats, int count)
       if (dest != pe) {
        CkPrintf("[%d] Obj %d migrating from %d to %d\n",
                 CkMyPe(),obj,pe,dest);
-       MigrateInfo migrateMe;
-       migrateMe.obj = stats[pe].objData[obj].handle;
-       migrateMe.from_pe = pe;
-       migrateMe.to_pe = dest;
-       migrateInfo.push(migrateMe);
+       MigrateInfo* migrateMe = new MigrateInfo;
+       migrateMe->obj = stats[pe].objData[obj].handle;
+       migrateMe->from_pe = pe;
+       migrateMe->to_pe = dest;
+       migrateInfo.push_back((void*)migrateMe);
       }
     }
   }
@@ -68,8 +52,10 @@ CLBMigrateMsg* RandCentLB::Strategy(CentralLB::LDStats* stats, int count)
   CLBMigrateMsg* msg = new(&migrate_count,1) CLBMigrateMsg;
   msg->n_moves = migrate_count;
   for(int i=0; i < migrate_count; i++) {
-    msg->moves[i] = migrateInfo.front();
-    migrateInfo.pop();
+    MigrateInfo* item = (MigrateInfo*)migrateInfo[i];
+    msg->moves[i] = *item;
+    delete item;
+    migrateInfo[i] = 0;
   }
 
   return msg;
index 9a8d37b0e0091169eedd14e34f637d21c2523c83..471b950a009ed119ecc6134428dbf2721f218b3d 100644 (file)
@@ -2,26 +2,13 @@
 
 #if CMK_LBDB_ON
 
-#if CMK_STL_USE_DOT_H
-#include <deque.h>
-#include <queue.h>
-#else
-#include <deque>
-#include <queue>
-#endif
+#include "CkLists.h"
 
 #include "RefineLB.h"
 #include "RefineLB.def.h"
 
-#if CMK_STL_USE_DOT_H
-template class deque<CentralLB::MigrateInfo>;
-#else
-template class std::deque<CentralLB::MigrateInfo>;
-#endif
-
 void CreateRefineLB()
 {
-  CkPrintf("[%d] creating RefineLB %d\n",CkMyPe(),loadbalancer);
   loadbalancer = CProxy_RefineLB::ckNew();
   CkPrintf("[%d] created RefineLB %d\n",CkMyPe(),loadbalancer);
 }
@@ -33,7 +20,6 @@ RefineLB::RefineLB()
 
 CmiBool RefineLB::QueryBalanceNow(int _step)
 {
-  CkPrintf("[%d] Balancing on step %d\n",CkMyPe(),_step);
   return CmiTrue;
 }
 
@@ -226,59 +212,36 @@ CLBMigrateMsg* RefineLB::Strategy(CentralLB::LDStats* stats, int count)
 
   refine();
 
-#if CMK_STL_USE_DOT_H
-  queue<MigrateInfo> migrateInfo;
-#else
-  std::queue<MigrateInfo> migrateInfo;
-#endif
+  CkVector migrateInfo;
 
   for (int pe=0; pe < P; pe++) {
     Iterator nextCompute;
     nextCompute.id = 0;
     computeInfo *c = (computeInfo *)
          processors[pe].computeSet->iterator((Iterator *)&nextCompute);
-    while(c)
-    {
-      if (c->oldProcessor != c->processor)
-      {
-CkPrintf("Migrate: from %d to %d\n", c->oldProcessor, c->processor);
-       MigrateInfo migrateMe;
-       migrateMe.obj = c->handle;
-       migrateMe.from_pe = c->oldProcessor;
-       migrateMe.to_pe = c->processor;
-       migrateInfo.push(migrateMe);
-      }
-
-        nextCompute.id++;
-        c = (computeInfo *) processors[pe].computeSet->next((Iterator *)&nextCompute);
-    }
-  }
-
-/*
-  for(int pe=0; pe < count; pe++) {
-    CkPrintf("[%d] PE %d : %d Objects : %d Communication\n",
-            CkMyPe(),pe,stats[pe].n_objs,stats[pe].n_comm);
-    for(int obj=0; obj < stats[pe].n_objs; obj++) {
-      const int dest = static_cast<int>(drand48()*(CmiNumPes()-1) + 0.5);
-      if (dest != pe) {
-       CkPrintf("[%d] Obj %d migrating from %d to %d\n",
-                CkMyPe(),obj,pe,dest);
-       MigrateInfo migrateMe;
-       migrateMe.obj = stats[pe].objData[obj].handle;
-       migrateMe.from_pe = pe;
-       migrateMe.to_pe = dest;
-       migrateInfo.push(migrateMe);
+    while(c) {
+      if (c->oldProcessor != c->processor)  {
+       CkPrintf("Migrate: from %d to %d\n",c->oldProcessor, c->processor);
+       MigrateInfo* migrateMe = new MigrateInfo;
+       migrateMe->obj = c->handle;
+       migrateMe->from_pe = c->oldProcessor;
+       migrateMe->to_pe = c->processor;
+       migrateInfo.push_back((void*)migrateMe);
       }
+      nextCompute.id++;
+      c = (computeInfo *) processors[pe].computeSet->
+                    next((Iterator *)&nextCompute);
     }
   }
-*/
 
   int migrate_count=migrateInfo.size();
   CLBMigrateMsg* msg = new(&migrate_count,1) CLBMigrateMsg;
   msg->n_moves = migrate_count;
   for(i=0; i < migrate_count; i++) {
-    msg->moves[i] = migrateInfo.front();
-    migrateInfo.pop();
+    MigrateInfo* item = (MigrateInfo*)migrateInfo[i];
+    msg->moves[i] = *item;
+    delete item;
+    migrateInfo[i] = 0;
   }
 
   return msg;
index 5eb5b162c50545ec4ebfe3e07659323dc43b573f..a16bc2c29b2e0fee10169ee5c6b80b614fbcd0d6 100644 (file)
@@ -2,24 +2,12 @@
 
 #if CMK_LBDB_ON
 
-#if CMK_STL_USE_DOT_H
-#include <deque.h>
-#include <queue.h>
-#else
-#include <deque>
-#include <queue>
-#endif
+#include "CkLists.h"
 
 #include "heap.h"
 #include "WSLB.h"
 #include "WSLB.def.h"
 
-#if CMK_STL_USE_DOT_H
-template class deque<NeighborLB::MigrateInfo>;
-#else
-template class std::deque<NeighborLB::MigrateInfo>;
-#endif
-
 void CreateWSLB()
 {
   loadbalancer = CProxy_WSLB::ckNew();
@@ -50,11 +38,7 @@ NLBMigrateMsg* WSLB::Strategy(NeighborLB::LDStats* stats, int count)
   }
   avgload /= (count+1);
 
-#if CMK_STL_USE_DOT_H
-  queue<MigrateInfo> migrateInfo;
-#else
-  std::queue<MigrateInfo> migrateInfo;
-#endif
+  CkVector migrateInfo;
 
   if (myload < avgload)
     CkPrintf("[%d] Underload My load is %f, average load is %f\n",
@@ -126,11 +110,11 @@ NLBMigrateMsg* WSLB::Strategy(NeighborLB::LDStats* stats, int count)
       CkPrintf("[%d] Obj %d of %d migrating from %d to %d\n",
               CkMyPe(),obj->Id,myStats.obj_data_sz,me,p->Id);
 
-      MigrateInfo migrateMe;
-      migrateMe.obj = myStats.objData[obj->Id].handle;
-      migrateMe.from_pe = me;
-      migrateMe.to_pe = p->Id;
-      migrateInfo.push(migrateMe);
+      MigrateInfo* migrateMe = new MigrateInfo;
+      migrateMe->obj = myStats.objData[obj->Id].handle;
+      migrateMe->from_pe = me;
+      migrateMe->to_pe = p->Id;
+      migrateInfo.push_back((void*)migrateMe);
 
       objs_here--;
       
@@ -157,8 +141,10 @@ NLBMigrateMsg* WSLB::Strategy(NeighborLB::LDStats* stats, int count)
   NLBMigrateMsg* msg = new(&migrate_count,1) NLBMigrateMsg;
   msg->n_moves = migrate_count;
   for(int i=0; i < migrate_count; i++) {
-    msg->moves[i] = migrateInfo.front();
-    migrateInfo.pop();
+    MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
+    msg->moves[i] = *item;
+    delete item;
+    migrateInfo[i] = 0;
   }
 
   return msg;
index 5d58df35382a54bf0d4a7bb2fd0edf0721a3e66b..12874cf90b52c475b0b47bd0209859b88265f20a 100644 (file)
@@ -65,7 +65,7 @@ ALLHEADERS=charm++.h ckstream.h charm.h cpthreads.h converse.h \
        TList.h idl.h ckarray.h tempo.h waitqd.h LBDatabase.h \
        lbdb.h LBDBManager.h LBComm.h LBOM.h LBObj.h LBMachineUtil.h \
        CentralLB.h RandCentLB.h RefineLB.h MetisLB.h HeapCentLB.h \
-       Set.h elements.h heap.h conv-ccs.h NeighborLB.h WSLB.h
+       Set.h elements.h heap.h conv-ccs.h NeighborLB.h WSLB.h CkLists.h
 
 ALLINTERFACES=idl.ci
 
@@ -249,7 +249,7 @@ CKHEADERS=ck.h ckstream.h envelope.h init.h qd.h charm.h charm++.h trace.h \
           ckfutures.h ckarray.h tempo.h waitqd.h LBDatabase.h lbdb.h \
          LBDBManager.h LBComm.h LBOM.h LBObj.h LBMachineUtil.h \
          CentralLB.h RandCentLB.h RefineLB.h HeapCentLB.h MetisLB.h \
-         NeighborLB.h WSLB.h \
+         NeighborLB.h WSLB.h CkLists.h \
          $(CVHEADERS)
 
 CK_LIBS_CORE=libck.a