From: Hamed Gorjiara Date: Sat, 1 Dec 2018 04:10:25 +0000 (-0800) Subject: Bug fix:duplicated tuners in explored array X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=commitdiff_plain;h=3aa1a638b66927eb2eeb90030cf489099f028e45 Bug fix:duplicated tuners in explored array --- diff --git a/src/Tuner/multituner.cc b/src/Tuner/multituner.cc index 0beab16..c69891f 100644 --- a/src/Tuner/multituner.cc +++ b/src/Tuner/multituner.cc @@ -133,6 +133,15 @@ void MultiTuner::findBestThreeTuners() { } } +bool MultiTuner::finishTunerExist(TunerRecord *tunerRec){ + SearchTuner *tuner = tunerRec->getTuner(); + for(uint i=0; i< explored.getSize(); i++){ + if(explored.get(i)->getTuner()->equalUsed(tuner)) + return true; + } + return false; +} + void MultiTuner::addTuner(SearchTuner *tuner) { TunerRecord *t = new TunerRecord(tuner); tuners.push(t); @@ -263,7 +272,9 @@ long long MultiTuner::evaluate(Problem *problem, TunerRecord *tuner) { updateTimeout(problem, metric); snprintf(buffer, sizeof(buffer), "tuner%uused", execnum); tuner->getTuner()->addUsed(buffer); - explored.push(tuner); + if(!finishTunerExist(tuner)){ + explored.push(tuner); + } } //Increment execution count execnum++; diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index 0c43785..e184540 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -47,6 +47,7 @@ public: void readData(uint numRuns); void updateTimeout(Problem *problem, long long metric); void tuneK(); + bool finishTunerExist(TunerRecord *tuner); void tuneComp(); void printData(); void findBestThreeTuners(); diff --git a/src/Tuner/searchtuner.cc b/src/Tuner/searchtuner.cc index 6b17a2a..b3c549a 100644 --- a/src/Tuner/searchtuner.cc +++ b/src/Tuner/searchtuner.cc @@ -94,6 +94,29 @@ SearchTuner::SearchTuner(const char *filename) { } } +bool SearchTuner::equalUsed(SearchTuner* tuner){ + if(tuner->usedSettings.getSize() != usedSettings.getSize()){ + return false; + } + bool result = true; + SetIteratorTunableSetting *iterator = usedSettings.iterator(); + while(iterator->hasNext()){ + TunableSetting *setting = iterator->next(); + if(!tuner->usedSettings.contains(setting)){ + result = false; + break; + }else{ + TunableSetting *tunerSetting = tuner->usedSettings.get(setting); + if(tunerSetting->selectedValue != setting->selectedValue){ + result = false; + break; + } + } + } + delete iterator; + return result; +} + void SearchTuner::addUsed(const char *filename) { ifstream myfile; myfile.open (filename, ios::in); diff --git a/src/Tuner/searchtuner.h b/src/Tuner/searchtuner.h index c75bfd8..7624425 100644 --- a/src/Tuner/searchtuner.h +++ b/src/Tuner/searchtuner.h @@ -51,7 +51,7 @@ public: void serialize(const char *file); void serializeUsed(const char *file); void addUsed(const char *file); - + bool equalUsed(SearchTuner *tuner); CMEMALLOC; protected: /** Used Settings keeps track of settings that were actually used by