Adoptive timeout ...
authorHamed Gorjiara <hgorjiar@uci.edu>
Thu, 18 Oct 2018 00:52:00 +0000 (17:52 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Thu, 18 Oct 2018 00:52:00 +0000 (17:52 -0700)
1  2 
src/Tuner/multituner.cc
src/Tuner/multituner.h
src/common.h
src/csolver.cc

index 3961d2bea308df84c3e023fe54e80c7b0915cd72,a9fe693fa92b258e3b272a682cffd0c0cf7ba34a..ec8bcb78a56fd5dd8c0d5e231e64b4b943bc30a3
@@@ -39,7 -39,7 +39,7 @@@ TunerRecord *TunerRecord::changeTuner(S
  }
  
  MultiTuner::MultiTuner(uint _budget, uint _rounds, uint _timeout) :
--      budget(_budget), rounds(_rounds), timeout(_timeout), execnum(0) {
++      budget(_budget), rounds(_rounds), timeout(_timeout), besttime(_timeout), execnum(0) {
  }
  
  MultiTuner::~MultiTuner() {
@@@ -193,7 -193,7 +193,7 @@@ long long MultiTuner::evaluate(Problem 
                        myfile >> sat;
                        myfile.close();
                }
--
++              updateTimeout(metric);
                snprintf(buffer, sizeof(buffer), "tuner%uused", execnum);
                tuner->getTuner()->addUsed(buffer);
        }
        } else if (problem->result != sat && sat != IS_INDETER) {
                model_print("******** Result has changed ********\n");
        }
++      if(sat == IS_INDETER && metric != -1){ //The case when we have a timeout
++              metric = -1; 
++      }
        return metric;
  }
  
++void MultiTuner::updateTimeout(long long metric){
++      double currentTime= metric / NANOSEC;
++      if(currentTime < besttime){
++              besttime = currentTime;
++      }
++      uint adoptive;
++      if(besttime > 30){
++              adoptive = besttime * 5;
++      }else {
++              adoptive = 150;
++      }
++      if(adoptive < timeout){
++              timeout = adoptive;
++      }
++}
++
  void MultiTuner::tuneComp() {
        Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
        for (uint b = 0; b < budget; b++) {
                                if (score > tscore)
                                        break;
                        }
-                       LOG("ranking[%u]=tuner<%d>(Score=%d)\n", j, tuner->tunernumber, score);
-                       LOG("************************\n");
+                       DEBUG("ranking[%u]=tuner<%p,%u>(Score=%d)\n", j, tuner, tuner->tunernumber, score);
+                       DEBUG("************************\n");
                        ranking.insertAt(j, tuner);
                }
 -              DEBUG("tunerSize=%u\trankingSize=%u\ttunerVSize=%u\n", tuners.getSize(), ranking.getSize(), tunerV->getSize());
 +              LOG("tunerSize=%u\trankingSize=%u\ttunerVSize=%u\n", tuners.getSize(), ranking.getSize(), tunerV->getSize());
                for (uint i = tuners.getSize(); i < ranking.getSize(); i++) {
                        TunerRecord *tuner = ranking.get(i);
                        model_print("Removing tuner %u\n", tuner->tunernumber);
index 1c654eb3cf7c1ea748eb73ca0be129b5283bc7ae,1c654eb3cf7c1ea748eb73ca0be129b5283bc7ae..f566828d86a72f5b282ab0b1ca07528df1e0b5c3
@@@ -42,6 -42,6 +42,7 @@@ public
        void addProblem(const char *filename);
        void addTuner(SearchTuner *tuner);
        void readData(uint numRuns);
++        void updateTimeout(long long metric);
        void tuneK();
        void tuneComp();
        void printData();
@@@ -60,6 -60,6 +61,7 @@@ protected
        uint budget;
        uint rounds;
        uint timeout;
++      double besttime;
        int execnum;
  };
  #endif
diff --cc src/common.h
index 2b67e04f94afb80e2aa684a6de69c64e1a5d4500,48b2a7e70e3994d8dfda327a09f2c167979fca20..39d4ea4912675af08b3aee24a52a1ec44b53038a
@@@ -18,6 -18,6 +18,7 @@@
  #include "config.h"
  #include "time.h"
  
++#define NANOSEC 1000000000.0
  
  #if 0
  extern int model_out;
diff --cc src/csolver.cc
index 51f094334d0086c1d99fe3e9fa7cff5b547acf6e,51f094334d0086c1d99fe3e9fa7cff5b547acf6e..fbe0dd082d5070229834d892c2578ecb6af6070b
@@@ -577,7 -577,7 +577,6 @@@ void CSolver::inferFixedOrders() 
        }
  }
  
--#define NANOSEC 1000000000.0
  int CSolver::solve() {
        long long startTime = getTimeNano();
        bool deleteTuner = false;