Add tuner components
authorbdemsky <bdemsky@uci.edu>
Fri, 12 Oct 2018 18:06:14 +0000 (11:06 -0700)
committerbdemsky <bdemsky@uci.edu>
Fri, 12 Oct 2018 18:43:43 +0000 (11:43 -0700)
src/Collections/cppvector.h
src/Test/deserializerun.cc [new file with mode: 0644]
src/Tuner/multituner.cc
src/Tuner/multituner.h
src/classlist.h

index b8497d90857af941c12b24a74126a80714c99998..1c446068d1945637a1f3ec4bd62d3ea6310c9234 100644 (file)
@@ -20,6 +20,12 @@ public:
                memcpy(array, _array, capacity * sizeof(type));
        }
 
+       Vector(Vector<type> *v) :
+               size(v->size),
+               capacity(v->capacity),
+               array((type *) ourmalloc(sizeof(type) * v->capacity)) {
+               memcpy(array, v->array, capacity * sizeof(type));
+       }
        void pop() {
                size--;
        }
diff --git a/src/Test/deserializerun.cc b/src/Test/deserializerun.cc
new file mode 100644 (file)
index 0000000..14551a6
--- /dev/null
@@ -0,0 +1,26 @@
+#include "csolver.h"
+#include "searchtuner.h"
+#include <stdlib.h>
+#include <iostream>
+#include <fstream>
+
+int main(int argc, char **argv) {
+       if (argc != 5) {
+               printf("You only specify the name of the file ...");
+               exit(-1);
+       }
+       CSolver *solver = CSolver::deserialize(argv[1]);
+       uint timeout;
+       sscanf(argv[2], "%u", &timeout);
+       SearchTuner *tuner = new SearchTuner(argv[3]);
+       solver->setTuner(tuner);
+       int sat = solver->solve();
+       long long metric = solver->getElapsedTime();
+       ofstream myfile;
+       myfile.open (argv[4], ios::out);
+       myfile << metric;
+       myfile << sat;
+       myfile.close();
+       delete solver;
+       return 0;
+}
index f6940849262ce184878cdeaa68486de933a30990..68b896eaa84826ae33998a6b12b8752aba3a3398 100644 (file)
@@ -46,7 +46,7 @@ long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
        tuner->serialize(buffer);
 
        //Do run
-       snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum);
+       snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u > log%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum, execnum);
        int status = system(buffer);
 
        long long metric = -1;
@@ -76,6 +76,33 @@ long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
        return metric;
 }
 
+void MultiTuner::mapProblemsToTuners(Vector<TunerRecord *> *tunerV) {
+       for (uint i = 0; i < problems.getSize(); i++) {
+               Problem *problem = problems.get(i);
+               TunerRecord *bestTuner = NULL;
+               long long bestscore = 0;
+               for (uint j = 0; j < tunerV->getSize(); j++) {
+                       TunerRecord *tuner = tunerV->get(j);
+                       long long metric = evaluate(problem, tuner->getTuner());
+                       if ((bestTuner == NULL && metric != -1) ||
+                                       (metric < bestscore && metric != -1)) {
+                               bestTuner = tuner;
+                               bestscore = metric;
+                       }
+               }
+               if (bestTuner != NULL)
+                       bestTuner->problems.push(problem);
+       }
+}
+
+
+void MultiTuner::tuneK() {
+       Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
+
+
+       delete tunerV;
+}
+
 double MultiTuner::evaluateAll(SearchTuner *tuner) {
        double product = 1;
        for (uint i = 0; i < problems.getSize(); i++) {
index fffc5c26affed1e54fc81283c2790a4b714e0ef9..f14dbccf47341341ea89f1782bfe82ffdb2cd57e 100644 (file)
@@ -20,9 +20,10 @@ private:
 class TunerRecord {
 public:
        TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {}
-
+       SearchTuner *getTuner() {return tuner;}
 private:
        SearchTuner *tuner;
+       Vector<Problem *> problems;
        friend class MultiTuner;
 };
 
@@ -32,12 +33,15 @@ public:
        ~MultiTuner();
        void addProblem(const char *filename);
        void addTuner(SearchTuner *tuner);
-       virtual void tune();
+       void tune();
+       void tuneK();
        CMEMALLOC;
 protected:
        long long evaluate(Problem *problem, SearchTuner *tuner);
        double evaluateAll(SearchTuner *tuner);
        SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
+       void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
+
        Vector<Problem *> problems;
        Vector<TunerRecord *> tuners;
        uint budget;
index cd7757d4035534707a9f98f9a57edc78d575745c..0def1ff48f8ff0be70cbe0000ef9a9ace68cd4fc 100644 (file)
@@ -57,6 +57,7 @@ class OrderEdge;
 class DOREdge;
 
 class AutoTuner;
+class MultiTuner;
 class SearchTuner;
 class TunableSetting;