00001
00005
00006 #ifndef _GREEDYLB_H_
00007 #define _GREEDYLB_H_
00008
00009 #include "CentralLB.h"
00010 #include "GreedyLB.decl.h"
00011
00012 void CreateGreedyLB();
00013 BaseLB * AllocateGreedyLB();
00014
00015 class GreedyLB : public CentralLB {
00016
00017 public:
00018 struct HeapData {
00019 double load;
00020 int pe;
00021 int id;
00022 };
00023
00024 GreedyLB(const CkLBOptions &);
00025 GreedyLB(CkMigrateMessage *m):CentralLB(m) { lbname = "GreedyLB"; }
00026 void work(LDStats* stats);
00027 private:
00028 enum HeapCmp {GT = '>', LT = '<'};
00029 void Heapify(HeapData*, int, int, HeapCmp);
00030 void HeapSort(HeapData*, int, HeapCmp);
00031 void BuildHeap(HeapData*, int, HeapCmp);
00032 CmiBool Compare(double, double, HeapCmp);
00033 HeapData* BuildCpuArray(BaseLB::LDStats*, int, int *);
00034 HeapData* BuildObjectArray(BaseLB::LDStats*, int, int *);
00035 CmiBool QueryBalanceNow(int step);
00036 };
00037
00038 #endif
00039