diff --git a/jastadd-mquat-eris/src/main/java/de/tudresden/inf/st/mquat/eris/ErisMQuATBuilder.java b/jastadd-mquat-eris/src/main/java/de/tudresden/inf/st/mquat/eris/ErisMQuATBuilder.java index f8c09160869e9fdfc25254953eabee1013883cbe..1eb82ab5b9765717724e5f6ace3fce0bb16ca240 100644 --- a/jastadd-mquat-eris/src/main/java/de/tudresden/inf/st/mquat/eris/ErisMQuATBuilder.java +++ b/jastadd-mquat-eris/src/main/java/de/tudresden/inf/st/mquat/eris/ErisMQuATBuilder.java @@ -5,7 +5,6 @@ import de.tudresden.inf.st.mquat.jastadd.model.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -16,7 +15,6 @@ public class ErisMQuATBuilder { static Root createModel(ErisModel erisModel) { - Root root = new Root(); // set the objective property runtime @@ -46,10 +44,10 @@ public class ErisMQuATBuilder { accessPath.addProperty(indexOrderPreserving); // add energy benchmark properties - Map<Integer,Property> insertProperties = new HashMap<>(); - Map<Integer,Property> linkProperties = new HashMap<>(); - Map<Integer,Property> lookupProperties = new HashMap<>(); - Map<Integer,Property> scanProperties = new HashMap<>(); + Map<Integer, Property> insertProperties = new HashMap<>(); + Map<Integer, Property> linkProperties = new HashMap<>(); + Map<Integer, Property> lookupProperties = new HashMap<>(); + Map<Integer, Property> scanProperties = new HashMap<>(); for (ERISBenchmarkResult result : erisModel.getErisAccessPaths().get(0).getResultList()) { int size = result.getDataSize(); insertProperties.put(size, new Property(new Name("insertTime" + size), "ms")); @@ -100,7 +98,7 @@ public class ErisMQuATBuilder { ); // add all the attribute stat values - for (ERISBenchmarkResult benchmarkResult: erisAccessPath.getResultList()) { + for (ERISBenchmarkResult benchmarkResult : erisAccessPath.getResultList()) { Property insertProperty = insertProperties.get(benchmarkResult.getDataSize()); multiResource.addCurrentResourceValue( new CurrentResourceValue(insertProperty.createRef(), new LiteralExpression(benchmarkResult.getInsert())) @@ -142,13 +140,13 @@ public class ErisMQuATBuilder { // create a new top-level software component Component component = new Component(); - component.setName(new Name("Component" + createName(erisContainer, erisLivingPartition, attribute))); + component.setName(new Name(createName(erisContainer, erisLivingPartition, attribute))); Implementation implementation = new Implementation(); implementation.setName(new Name("accessPathSelector")); - Instance accessPathInstance =new Instance(new Name("accessPath")); + Instance accessPathInstance = new Instance(new Name("accessPath")); ResourceRequirement resourceRequirement = new ResourceRequirement(); resourceRequirement.addInstance(accessPathInstance); @@ -184,16 +182,25 @@ public class ErisMQuATBuilder { int num_lookups = attStats.getLookups(); int num_inserts = attStats.getInserts(); - int num_scans = attStats.getScans(); - int num_links = attStats.getLinks(); - int att_count = attStats.getCount(); + int num_scans = attStats.getScans(); + int num_links = attStats.getLinks(); + int att_count = attStats.getCount(); // get the correct size - int lookupsize = (int)Math.ceil(Math.pow(2,Math.ceil(Math.log(att_count)))); + int lookupsize = 0; + int dist = Integer.MAX_VALUE; + for (Integer i: lookupProperties.keySet()) { + logger.info(i); + if (Math.abs(att_count-i) < dist) { + dist = Math.abs(att_count-i); + lookupsize = i; + } + } + MultExpression loopups = new MultExpression(new LiteralExpression(num_lookups), new PropertyResourceDesignator(accessPathInstance.createRef(), lookupProperties.get(lookupsize).createRef())); MultExpression inserts = new MultExpression(new LiteralExpression(num_inserts), new PropertyResourceDesignator(accessPathInstance.createRef(), insertProperties.get(lookupsize).createRef())); - MultExpression scans = new MultExpression(new LiteralExpression(num_scans), new PropertyResourceDesignator(accessPathInstance.createRef(), scanProperties.get(lookupsize).createRef())); - MultExpression links = new MultExpression(new LiteralExpression(num_links), new PropertyResourceDesignator(accessPathInstance.createRef(), linkProperties.get(lookupsize).createRef())); + MultExpression scans = new MultExpression(new LiteralExpression(num_scans), new PropertyResourceDesignator(accessPathInstance.createRef(), scanProperties.get(lookupsize).createRef())); + MultExpression links = new MultExpression(new LiteralExpression(num_links), new PropertyResourceDesignator(accessPathInstance.createRef(), linkProperties.get(lookupsize).createRef())); AddExpression expression = new AddExpression(loopups, new AddExpression(inserts, new AddExpression(scans, links))); @@ -226,7 +233,7 @@ public class ErisMQuATBuilder { private static String createName(ERISContainer container, ERISLivingPartition partition, ERISAttribute attribute) { // TODO use ID instead of name for attribute if possible - return "_Container" + container.getId() + "_Node" + partition.getNodeId() + "_LP" + partition.getLocalId() + "_Attribute" + attribute.getId(); + return "Container" + container.getId() + "_Node" + partition.getNodeId() + "_LP" + partition.getLocalId() + "_Attribute" + attribute.getId() + "_" + attribute.getName(); } }