diff --git a/src/main/java/tmltranslator/dsez3engine/InputInstance.java b/src/main/java/tmltranslator/dsez3engine/InputInstance.java index a9ff393cdf914acd5cc53d0ae8170ec4e4456a4d..3962e94e5da7f40a1f2b28a041f1debcb203f0b8 100644 --- a/src/main/java/tmltranslator/dsez3engine/InputInstance.java +++ b/src/main/java/tmltranslator/dsez3engine/InputInstance.java @@ -2,6 +2,7 @@ package tmltranslator.dsez3engine; import myutil.TraceManager; import tmltranslator.*; +import ui.TGComponent; import java.util.ArrayList; import java.util.List; @@ -10,9 +11,9 @@ import java.util.List; public class InputInstance { private TMLArchitecture architecture; - private TMLModeling modeling; + private TMLModeling<TGComponent> modeling; - public InputInstance(TMLArchitecture architecture, TMLModeling modeling) { + public InputInstance(TMLArchitecture architecture, TMLModeling<TGComponent> modeling) { this.architecture = architecture; this.modeling = modeling; } @@ -25,8 +26,7 @@ public class InputInstance { for (HwNode hwNode : architecture.getHwNodes()) { if (hwNode instanceof HwExecutionNode) { - if ((((HwExecutionNode) hwNode).supportOperation(tmlTask.getOperation()) == true) || (((HwExecutionNode) hwNode).getOperation() == - " ")) + if ((((HwExecutionNode) hwNode).supportOperation(tmlTask.getOperation()) ) || (((HwExecutionNode) hwNode).getOperation().equals(" "))) feasibleCPUs.add((HwExecutionNode) hwNode); } @@ -113,7 +113,7 @@ public class InputInstance { return architecture; } - public TMLModeling getModeling() { + public TMLModeling<TGComponent> getModeling() { return modeling; } } \ No newline at end of file diff --git a/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java b/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java index 38d962133c002a233be67b816547ea995bf3278f..45641eafa1a12c18dee224c929047e1dd8e3e655 100644 --- a/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java +++ b/src/main/java/tmltranslator/dsez3engine/OptimizationModel.java @@ -3,6 +3,7 @@ package tmltranslator.dsez3engine; import com.microsoft.z3.*; import myutil.TraceManager; import tmltranslator.*; +import ui.TGComponent; import javax.swing.*; import java.lang.reflect.Array; @@ -17,6 +18,15 @@ public class OptimizationModel { private Map<String, Integer> optimizedSolutionX = new HashMap<String, Integer>(); private Map<String, Integer> optimizedSolutionStart = new HashMap<String, Integer>(); private InputInstance inputInstance; + private TMLMapping<TGComponent> tmlMapping; + + public TMLMapping getTmlMapping() { + return tmlMapping; + } + + public void setTmlMapping(TMLMapping<TGComponent> tmlMapping) { + this.tmlMapping = tmlMapping; + } public OptimizationModel(InputInstance inputInstance) { this.inputInstance = inputInstance; @@ -774,6 +784,8 @@ public class OptimizationModel { Expr[][] optimized_result_X = new Expr[inputInstance.getModeling().getTasks().size()][inputInstance.getArchitecture().getCPUs().size()]; Expr[] optimized_result_start = new Expr[inputInstance.getModeling().getTasks().size()]; + tmlMapping = new TMLMapping<TGComponent>( inputInstance.getModeling(), inputInstance.getArchitecture(),false); + outputToDisplay ="The optimal mapping solution is:\n\n"; for ( Object task : inputInstance.getModeling().getTasks()) { @@ -787,7 +799,18 @@ public class OptimizationModel { TMLTask taskCast = (TMLTask)task; if(Integer.parseInt(optimized_result_X[t][p].toString()) == 1){ + //mapping of task on hwExecutionNode + tmlMapping.addTaskToHwExecutionNode(taskCast,(HwExecutionNode) hwNode); + + //mapping of R/W channels on local memory of hwExecutionNode TODO get(0) + if(!taskCast.getReadChannels().isEmpty()) + tmlMapping.addCommToHwCommNode(taskCast.getReadChannels().get(0),inputInstance.getLocalMemoryOfHwExecutionNode(hwNode)); + + if(!taskCast.getWriteChannels().isEmpty()) + tmlMapping.addCommToHwCommNode(taskCast.getWriteChannels().get(0),inputInstance.getLocalMemoryOfHwExecutionNode(hwNode)); + outputToDisplay = outputToDisplay + "\n" + taskCast.getName() + " --> " + hwNode.getName(); + } optimizedSolutionX.put("X[" + taskCast.getName() + "][" + hwNode.getName() + "] = ", Integer.parseInt diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index bdc3901673141daa6b91eb2cd213f01416ef460b..ae04ecf6a90df11743a74b17ccafd8f1cab2de27 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -4834,7 +4834,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per return; } - TMLMapping map = gtm.getTMLMapping(); + TMLMapping<TGComponent> map = gtm.getTMLMapping(); if (map == null) { return; diff --git a/src/main/java/ui/window/JDialogDSEZ3.java b/src/main/java/ui/window/JDialogDSEZ3.java index 5f560569c84262e19a817404d465b03162a87499..09394d97e948c0300ac104ea82e8531d875ecc3f 100644 --- a/src/main/java/ui/window/JDialogDSEZ3.java +++ b/src/main/java/ui/window/JDialogDSEZ3.java @@ -52,6 +52,7 @@ import tmltranslator.TMLModeling; import tmltranslator.dsez3engine.InputInstance; import tmltranslator.dsez3engine.OptimizationModel; import tmltranslator.dsez3engine.OptimizationResult; +import ui.TGComponent; import ui.util.IconManager; import ui.MainGUI; @@ -113,7 +114,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti protected RshClient rshc; - private TMLMapping map; + private TMLMapping<TGComponent> map; private InputInstance inputInstance; private OptimizationModel optimizationModel; @@ -121,7 +122,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti /* * Creates new form */ - public JDialogDSEZ3(Frame f, MainGUI _mgui, String title, TMLMapping map, String dir) { + public JDialogDSEZ3(Frame f, MainGUI _mgui, String title, TMLMapping<TGComponent> map, String dir) { super(f, title, true); mgui = _mgui; @@ -310,7 +311,7 @@ public class JDialogDSEZ3 extends JDialog implements ActionListener, ListSelecti outputText.append("\nPreparing input model for Z3\n"); // File testFile; TMLArchitecture tmla = map.getTMLArchitecture(); - TMLModeling tmlm = map.getTMLModeling(); + TMLModeling<TGComponent> tmlm = map.getTMLModeling(); /* for(Object task : tmlm.getTasks()){ diff --git a/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java b/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java index 1c806ac34f2df3d7ccf6efc356c5df182b334b14..3a4701c381fea1e983f0054b67541370ccb3ff90 100644 --- a/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java +++ b/ttool/src/test/java/tmltranslator/dsez3engine/InputInstanceTest.java @@ -11,13 +11,14 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import myutil.TraceManager; +import ui.TGComponent; import static org.junit.Assert.*; public class InputInstanceTest { private TMLArchitecture tmla; - private TMLModeling tmlm; + private TMLModeling<TGComponent> tmlm; private InputInstance inputInstance; private OptimizationModel optimizationModel; @@ -31,9 +32,9 @@ public class InputInstanceTest { optimizationModel = new OptimizationModel(inputInstance); } - private TMLModeling setUpTMLModeling() { + private TMLModeling<TGComponent> setUpTMLModeling() { - tmlm = new TMLModeling(); + tmlm = new TMLModeling<TGComponent>(); TMLTask taskA = new TMLTask("task__A", null, null); @@ -267,7 +268,7 @@ public class InputInstanceTest { expectedList.add(inputInstance.getArchitecture().getHwCPUByName("MainCPU")); expectedList.add(inputInstance.getArchitecture().getHwCPUByName("dsp")); - TMLTask tempTask = (TMLTask) inputInstance.getModeling().getTasks().get(2); + TMLTask tempTask = inputInstance.getModeling().getTasks().get(2); List<HwExecutionNode> actualList = new ArrayList<>(); @@ -289,7 +290,7 @@ public class InputInstanceTest { List<TMLTask> tempTasks = new ArrayList<>(); for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) { - tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i)); + tempTasks.add( inputInstance.getModeling().getTasks().get(i)); } assertEquals(inputInstance.getBufferIn( tempTasks.get(0)), 0); @@ -304,7 +305,7 @@ public class InputInstanceTest { public void getBufferOut() { List<TMLTask> tempTasks = new ArrayList<>(); for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) { - tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i)); + tempTasks.add(inputInstance.getModeling().getTasks().get(i)); } assertEquals(inputInstance.getBufferOut( tempTasks.get(0)), 4); @@ -332,7 +333,7 @@ public class InputInstanceTest { //a temporary list of the tasks List<TMLTask> tempTasks = new ArrayList<>(); for (int i = 0; i < inputInstance.getModeling().getTasks().size(); i++) { - tempTasks.add((TMLTask) inputInstance.getModeling().getTasks().get(i)); + tempTasks.add( inputInstance.getModeling().getTasks().get(i)); } int expectedWcetA_CPU = 300; int expectedWcetA_dsp = 150;