Bug fix:duplicated tuners in explored array
authorHamed Gorjiara <hgorjiar@uci.edu>
Sat, 1 Dec 2018 04:10:25 +0000 (20:10 -0800)
committerHamed Gorjiara <hgorjiar@uci.edu>
Sat, 1 Dec 2018 04:10:25 +0000 (20:10 -0800)
src/Tuner/multituner.cc
src/Tuner/multituner.h
src/Tuner/searchtuner.cc
src/Tuner/searchtuner.h

index 0beab166d43591b8ced942a52667c84cecdc50dd..c69891f10e53da0cbf4037943d91f886ec2ff10d 100644 (file)
@@ -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++;
index 0c43785d3693fe9e49e425604656b33c74b5fc59..e1845403bff881b46ef3d68625756bf76c7f6714 100644 (file)
@@ -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();
index 6b17a2a244bec5ccc2c197d98bf8138d37e1d469..b3c549a34105139a20985ae6fc788beca6311676 100644 (file)
@@ -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);
index c75bfd8adec6195744307359f83510878d976045..76244257e08a5ba56de938a0cb4458b7ffb8e488 100644 (file)
@@ -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