Finding the best tuner
authorHamed Gorjiara <hgorjiar@uci.edu>
Tue, 8 Sep 2020 21:14:11 +0000 (14:14 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Tue, 8 Sep 2020 21:14:11 +0000 (14:14 -0700)
src/Test/analyzemultituner.cc
src/Tuner/comptuner.cc
src/Tuner/comptuner.h

index 93487f04125abe0e1ac3a75c939edd8f98b7a536..9054d185fefdd3ad3162f75f5577dce830d5d586 100644 (file)
@@ -27,7 +27,8 @@ int main(int argc, char **argv) {
        printf("Number of Runs: %u\n", numruns);
        CompTuner *multituner = new CompTuner(0, 0);
        multituner->readData(numruns);
-       multituner->findBestTwoTuners();
+       //multituner->findBestTwoTuners();
+       multituner->findTheBestTuner();
        delete multituner;
        return 0;
 }
index 029efe9294d954d9f9076b8ac860c5a18ff095f4..bc35c60da765fec8b0d81b8d585824d5be5f2e12 100644 (file)
@@ -16,6 +16,45 @@ CompTuner::~CompTuner() {
 
 }
 
+void CompTuner::findTheBestTuner() {
+       if (allTuners.getSize() < 1) {
+               printData();
+               return;
+       }
+       TunerRecord *bestTuner = NULL;
+       double score = DBL_MAX;
+       for (uint j = 0; j < allTuners.getSize() - 1; j++) {
+               TunerRecord *tuner1 = allTuners.get(j);
+               double mintimes[problems.getSize()];
+               for (uint l = 0; l < problems.getSize(); l++) {
+                       Problem *problem = problems.get(l);
+                       long long time1 = tuner1->getTime(problem);
+                       if(time1 < 0){
+                               time1=LLONG_MAX;
+                       }
+                       mintimes[l] = pow(time1, (double)1 / problems.getSize());
+               }
+               double result = 1;
+               for (uint l = 0; l < problems.getSize(); l++) {
+                       result *= mintimes[l];
+               }
+               if (result < score) {
+                       score = result;
+                       bestTuner = tuner1;
+               }
+       }
+       model_print("The Best tuner:\n");
+       
+       SearchTuner *stun = bestTuner->getTuner();
+       char buffer[512];
+       snprintf(buffer, sizeof(buffer), "best.tuner");
+       stun->serialize(buffer);
+       model_print("Tuner %u\n", bestTuner->getTunerNumber());
+       stun->print();
+       bestTuner->printProblemsInfo();
+       model_print("----------------------------------\n\n\n");
+}
+
 void CompTuner::findBestTwoTuners() {
        if (allTuners.getSize() < 2) {
                printData();
index 74183bcec5dfbf40bb4b7d8cad0dc1f553b1a4d9..9f86ffb39bbf443ea3783ce4d52e37b5aed9ab30 100644 (file)
@@ -12,6 +12,7 @@ public:
        void readData(uint numRuns);
        void tune();
        void findBestTwoTuners();
+       void findTheBestTuner();
 protected:
 
 };