From 64e16ee8bdb6887cd8ffa7da100042c975d1c21c Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 12 Oct 2018 11:06:14 -0700 Subject: [PATCH] Add tuner components --- src/Collections/cppvector.h | 6 ++++++ src/Test/deserializerun.cc | 26 ++++++++++++++++++++++++++ src/Tuner/multituner.cc | 29 ++++++++++++++++++++++++++++- src/Tuner/multituner.h | 8 ++++++-- src/classlist.h | 1 + 5 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/Test/deserializerun.cc diff --git a/src/Collections/cppvector.h b/src/Collections/cppvector.h index b8497d9..1c44606 100644 --- a/src/Collections/cppvector.h +++ b/src/Collections/cppvector.h @@ -20,6 +20,12 @@ public: memcpy(array, _array, capacity * sizeof(type)); } + Vector(Vector *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 index 0000000..14551a6 --- /dev/null +++ b/src/Test/deserializerun.cc @@ -0,0 +1,26 @@ +#include "csolver.h" +#include "searchtuner.h" +#include +#include +#include + +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; +} diff --git a/src/Tuner/multituner.cc b/src/Tuner/multituner.cc index f694084..68b896e 100644 --- a/src/Tuner/multituner.cc +++ b/src/Tuner/multituner.cc @@ -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 *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 *tunerV = new Vector(&tuners); + + + delete tunerV; +} + double MultiTuner::evaluateAll(SearchTuner *tuner) { double product = 1; for (uint i = 0; i < problems.getSize(); i++) { diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index fffc5c2..f14dbcc 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -20,9 +20,10 @@ private: class TunerRecord { public: TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {} - + SearchTuner *getTuner() {return tuner;} private: SearchTuner *tuner; + Vector 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 *tunerV); + Vector problems; Vector tuners; uint budget; diff --git a/src/classlist.h b/src/classlist.h index cd7757d..0def1ff 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -57,6 +57,7 @@ class OrderEdge; class DOREdge; class AutoTuner; +class MultiTuner; class SearchTuner; class TunableSetting; -- 2.34.1