}
void TunableSetting::print() {
+ model_print("Param %s = %u \t range=[%u,%u]", tunableParameterToString( (Tunables)param), selectedValue, lowValue, highValue);
if (hasVar) {
- model_print("VarType1 %" PRIu64 ", ", type1);
+ model_print("\tVarType1 %" PRIu64 ", ", type1);
model_print("VarType2 %" PRIu64 ", ", type2);
}
- model_print("Param %s = %u \t range=[%u,%u]\n", tunableParameterToString( (Tunables)param), selectedValue, lowValue, highValue);
+ model_print("\n");
}
unsigned int tunableSettingHash(TunableSetting *setting) {
setting1->param == setting2->param;
}
-ostream& operator<<(ostream& os, const TunableSetting& ts)
-{
- os << ts.hasVar <<" " << ts.type1 <<" " << ts.type2 << " " << ts.param << " " << ts.lowValue <<" "
- << ts.highValue << " " << ts.defaultValue << " " << ts.selectedValue;
- return os;
-}
+ostream &operator<<(ostream &os, const TunableSetting &ts)
+{
+ os << ts.hasVar << " " << ts.type1 << " " << ts.type2 << " " << ts.param << " " << ts.lowValue << " "
+ << ts.highValue << " " << ts.defaultValue << " " << ts.selectedValue;
+ return os;
+}
SearchTuner::SearchTuner() {
+#ifdef STATICENCGEN
+ graphEncoding =false;
+ naiveEncoding = ELEM_UNASSIGNED;
+#endif
ifstream myfile;
myfile.open (TUNEFILE, ios::in);
- if(myfile.is_open()){
+ if (myfile.is_open()) {
bool hasVar;
VarType type1;
VarType type2;
int highValue;
int defaultValue;
int selectedValue;
- while(myfile >> hasVar >> type1 >> type2 >> param >> lowValue >> highValue >> defaultValue >> selectedValue){
+ while (myfile >> hasVar >> type1 >> type2 >> param >> lowValue >> highValue >> defaultValue >> selectedValue) {
TunableSetting *setting;
-
- if(hasVar){
+
+ if (hasVar) {
setting = new TunableSetting(type1, type2, param);
- }else{
+ } else {
setting = new TunableSetting(param);
}
setting->setDecision(lowValue, highValue, defaultValue, selectedValue);
TunableSetting *copy = new TunableSetting(setting);
tuner->settings.add(copy);
}
+#ifdef STATICENCGEN
+ if(naiveEncoding != ELEM_UNASSIGNED){
+ tuner->graphEncoding = graphEncoding;
+ tuner->naiveEncoding = naiveEncoding;
+ }
+#endif
delete iterator;
return tuner;
}
randomSetting->selectedValue = randomchoice;
else
randomSetting->selectedValue = randomchoice + 1;
+ model_print("&&&&&&&&Mutating&&&&&&&\n");
+ randomSetting->print();
+ model_print("&&&&&&&&&&&&&&&&&&&&&&&\n");
+}
+
+#ifdef STATICENCGEN
+int SearchTuner::nextStaticTuner() {
+ if(naiveEncoding == ELEM_UNASSIGNED){
+ naiveEncoding = ONEHOT;
+ SetIteratorTunableSetting *iter = settings.iterator();
+ while(iter->hasNext()){
+ TunableSetting *setting = iter->next();
+ if (setting->param == NAIVEENCODER){
+ setting->selectedValue = ONEHOT;
+ } else if(setting->param == ENCODINGGRAPHOPT){
+ setting->selectedValue = false;
+ }
+ }
+ delete iter;
+ return EXIT_FAILURE;
+ }
+ int result=EXIT_FAILURE;
+ if(naiveEncoding == BINARYINDEX && graphEncoding){
+ model_print("Best tuner\n");
+ return EXIT_SUCCESS;
+ }else if (naiveEncoding == BINARYINDEX && !graphEncoding){
+ naiveEncoding = ONEHOT;
+ graphEncoding = true;
+ }else {
+ naiveEncoding = (ElementEncodingType)((int)naiveEncoding + 1);
+ }
+ SetIteratorTunableSetting *iter = settings.iterator();
+ uint count = 0;
+ while(iter->hasNext()){
+ TunableSetting * setting = iter->next();
+ if (setting->param == NAIVEENCODER){
+ setting->selectedValue = naiveEncoding;
+ count++;
+ } else if(setting->param == ENCODINGGRAPHOPT){
+ setting->selectedValue = graphEncoding;
+ count++;
+ }
+ }
+ model_print("Mutating %u settings\n", count);
+ delete iter;
+ return result;
}
+#endif
void SearchTuner::print() {
SetIteratorTunableSetting *iterator = settings.iterator();