X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FTuner%2Fmultituner.h;h=aaed01399fdaffaa9c4953ff7b9b9c0188fe8bfd;hb=6777767f785057e01ffabf28091db6c08b3467b7;hp=1e878eee0c2399a1686c1fb70b39a32a6680cccb;hpb=9392806929b8fc95a9f9a65ffd22e6867911b420;p=satune.git diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index 1e878ee..aaed013 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -17,22 +17,26 @@ private: char *problem; long long besttime; friend class MultiTuner; + friend class RandomTuner; }; class TunerRecord { public: TunerRecord(SearchTuner *_tuner) : tuner(_tuner), tunernumber(-1) {} + TunerRecord(SearchTuner *_tuner, int _tunernumber) : tuner(_tuner), tunernumber(_tunernumber) {} SearchTuner *getTuner() {return tuner;} TunerRecord *changeTuner(SearchTuner *_newtuner); void updateTuner(SearchTuner *_newtuner) {tuner = _newtuner;} long long getTime(Problem *problem); void setTime(Problem *problem, long long time); + void print(); private: SearchTuner *tuner; Vector problems; Hashtable timetaken; int tunernumber; friend class MultiTuner; + friend class RandomTuner; friend void clearVector(Vector *tunerV); }; @@ -45,18 +49,21 @@ public: void readData(uint numRuns); void updateTimeout(Problem *problem, long long metric); void tuneK(); + bool finishTunerExist(TunerRecord *tuner); void tuneComp(); void printData(); + void findBestThreeTuners(); CMEMALLOC; protected: long long evaluate(Problem *problem, TunerRecord *tuner); double evaluateAll(TunerRecord *tuner); SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k); + bool hasExplored(SearchTuner *newTuner); void mapProblemsToTuners(Vector *tunerV); void improveTuners(Vector *tunerV); TunerRecord *tune(TunerRecord *tuner); - Vector allTuners; + Vector explored; Vector problems; Vector tuners; uint budget; @@ -64,4 +71,10 @@ protected: uint timeout; int execnum; }; + +inline long long min(long long num1, long long num2, long long num3) { + return num1 < num2 && num1 < num3 ? num1 : + num2 < num3 ? num2 : num3; +} + #endif