X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FTuner%2Fmultituner.h;h=87e8557be82e70f84ded95a570c340196fe8bd1a;hp=1162e821c7c8ce38f91b41c0ccc544938c9b3f14;hb=e1360c75a71486a0de8c1b30a2a8cd2877902416;hpb=a3310cdfff1ba8f2280c4b2731e91b49b76601fb diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index 1162e82..87e8557 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -12,22 +12,27 @@ public: ~Problem(); CMEMALLOC; private: + int problemnumber; int result; char *problem; + long long besttime; friend class MultiTuner; }; 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); private: SearchTuner *tuner; Vector problems; Hashtable timetaken; + int tunernumber; friend class MultiTuner; friend void clearVector(Vector *tunerV); }; @@ -38,18 +43,20 @@ public: ~MultiTuner(); void addProblem(const char *filename); void addTuner(SearchTuner *tuner); + void readData(uint numRuns); + void updateTimeout(Problem *problem, long long metric); void tuneK(); void tuneComp(); + void printData(); + void findBestThreeTuners(); CMEMALLOC; protected: - long long evaluate(Problem *problem, SearchTuner *tuner); + long long evaluate(Problem *problem, TunerRecord *tuner); double evaluateAll(TunerRecord *tuner); SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k); void mapProblemsToTuners(Vector *tunerV); void improveTuners(Vector *tunerV); TunerRecord *tune(TunerRecord *tuner); - - Vector allTuners; Vector problems; Vector tuners; @@ -58,4 +65,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