X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FTuner%2Fmultituner.h;h=aaed01399fdaffaa9c4953ff7b9b9c0188fe8bfd;hp=1c2a1fe7f5a61c4db02ae3402c40f869496d5af0;hb=5461c28369dd5ec459300394a9f9ecd576c4a2ad;hpb=de496db6f2115b2ebf599f55842880b42993893b diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index 1c2a1fe..aaed013 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -12,19 +12,31 @@ public: ~Problem(); CMEMALLOC; private: + int problemnumber; int result; char *problem; + long long besttime; friend class MultiTuner; + friend class RandomTuner; }; class TunerRecord { public: - TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {} + 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); }; @@ -34,18 +46,24 @@ public: ~MultiTuner(); void addProblem(const char *filename); void addTuner(SearchTuner *tuner); - + 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, SearchTuner *tuner); - double evaluateAll(SearchTuner *tuner, Vector *tProblems); + 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); - SearchTuner *tune(SearchTuner *tuner, Vector *tProblems); - - + TunerRecord *tune(TunerRecord *tuner); + Vector allTuners; + Vector explored; Vector problems; Vector tuners; uint budget; @@ -53,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