From 5ceb836097cd3fba592a50914afe77713f82d89c Mon Sep 17 00:00:00 2001 From: Le Van Truong <le.truong@telecom-paris.fr> Date: Wed, 4 Mar 2020 13:13:58 +0100 Subject: [PATCH] #250 Emptying simulation transactions during simulation --- simulators/c++2/src_simulator/app/TMLTask.cpp | 6 ++++ simulators/c++2/src_simulator/app/TMLTask.h | 1 + simulators/c++2/src_simulator/arch/Bus.cpp | 6 ++++ simulators/c++2/src_simulator/arch/Bus.h | 1 + simulators/c++2/src_simulator/arch/FPGA.cpp | 6 ++++ simulators/c++2/src_simulator/arch/FPGA.h | 1 + .../c++2/src_simulator/arch/MultiCoreCPU.cpp | 6 ++++ .../c++2/src_simulator/arch/MultiCoreCPU.h | 1 + .../src_simulator/arch/SchedulableDevice.h | 1 + .../c++2/src_simulator/arch/SingleCoreCPU.cpp | 6 ++++ .../c++2/src_simulator/arch/SingleCoreCPU.h | 1 + .../c++2/src_simulator/sim/Simulator.cpp | 30 +++++++++++++++++++ simulators/c++2/src_simulator/sim/Simulator.h | 2 ++ .../java/remotesimulation/CommandParser.java | 8 +++++ .../JPanelTaskTransactions.java | 13 ++++++-- 15 files changed, 87 insertions(+), 2 deletions(-) diff --git a/simulators/c++2/src_simulator/app/TMLTask.cpp b/simulators/c++2/src_simulator/app/TMLTask.cpp index 18444abdbe..3aed98b3d2 100755 --- a/simulators/c++2/src_simulator/app/TMLTask.cpp +++ b/simulators/c++2/src_simulator/app/TMLTask.cpp @@ -527,6 +527,12 @@ std::string TMLTask::determineHTMLCellClass( std::map<TMLTask*, std::string> &t return taskColors[ task ]; } +void TMLTask::removeTrans(int numberOfTrans){ + if (numberOfTrans == 1){ + _transactList.clear(); + } +} + void TMLTask::schedule2HTML(std::ofstream& myfile) const { // myfile << "<h2><span>Scheduling for device: "<< _name << "</span></h2>" << std::endl; myfile << SCHED_HTML_DIV << SCHED_HTML_BOARD; diff --git a/simulators/c++2/src_simulator/app/TMLTask.h b/simulators/c++2/src_simulator/app/TMLTask.h index ddfe1f25e5..51f103d52e 100755 --- a/simulators/c++2/src_simulator/app/TMLTask.h +++ b/simulators/c++2/src_simulator/app/TMLTask.h @@ -148,6 +148,7 @@ public: \param iTrans Pointer to the transaction */ void addTransaction(TMLTransaction* iTrans); + void removeTrans(int numberOfTrans); virtual std::ostream& writeObject(std::ostream& s); virtual std::istream& readObject(std::istream& s); virtual void streamBenchmarks(std::ostream& s) const; diff --git a/simulators/c++2/src_simulator/arch/Bus.cpp b/simulators/c++2/src_simulator/arch/Bus.cpp index 0f15dbbde1..1b850c0324 100644 --- a/simulators/c++2/src_simulator/arch/Bus.cpp +++ b/simulators/c++2/src_simulator/arch/Bus.cpp @@ -256,6 +256,12 @@ int Bus::allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) cons return total; } +void Bus::removeTrans(int numberOfTrans){ + if (numberOfTrans == 1){ + _transactList.clear(); + } +} + void Bus::latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2) { for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ diff --git a/simulators/c++2/src_simulator/arch/Bus.h b/simulators/c++2/src_simulator/arch/Bus.h index 1ca6d08611..0fa7a47427 100644 --- a/simulators/c++2/src_simulator/arch/Bus.h +++ b/simulators/c++2/src_simulator/arch/Bus.h @@ -107,6 +107,7 @@ public: */ int allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const; int allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) const; + void removeTrans(int numberOfTrans); void latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2); /** \param myfile Reference to the ofstream object representing the output file diff --git a/simulators/c++2/src_simulator/arch/FPGA.cpp b/simulators/c++2/src_simulator/arch/FPGA.cpp index 70f8086e9c..2a6a2a8825 100644 --- a/simulators/c++2/src_simulator/arch/FPGA.cpp +++ b/simulators/c++2/src_simulator/arch/FPGA.cpp @@ -434,6 +434,12 @@ int FPGA::allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) con return total; } +void FPGA::removeTrans(int numberOfTrans){ + if (numberOfTrans == 1){ + _transactList.clear(); + } +} + void FPGA::latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2) { for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if ((*i)->getCommand() !=NULL){ diff --git a/simulators/c++2/src_simulator/arch/FPGA.h b/simulators/c++2/src_simulator/arch/FPGA.h index bcd7802c6e..1a6796b71b 100644 --- a/simulators/c++2/src_simulator/arch/FPGA.h +++ b/simulators/c++2/src_simulator/arch/FPGA.h @@ -133,6 +133,7 @@ public: ///inline unsigned int getTransNumber() { return _transNumber;} inline unsigned int getID () { return _ID;} void HW2HTML(std::ofstream& myfile) ; + void removeTrans(int numberOfTrans); void schedule2HTML(std::ofstream& myfile) ; inline const TaskList& getTaskList() const{return _taskList;} inline void setHtmlCurrTask(TMLTask *t) { _htmlCurrTask=t;} diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp index 8f85e7b42a..3ff2398cbe 100644 --- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp @@ -615,6 +615,12 @@ int MultiCoreCPU::allTrans2XMLByTask(std::ostringstream& glob, std::string taskN return total; } +void MultiCoreCPU::removeTrans(int numberOfTrans){ + if (numberOfTrans == 1){ + _transactList.clear(); + } +} + void MultiCoreCPU::latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2) { diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.h b/simulators/c++2/src_simulator/arch/MultiCoreCPU.h index 12e29f4043..32660f3656 100644 --- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.h +++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.h @@ -117,6 +117,7 @@ public: */ int allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const; int allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) const; + void removeTrans(int numberOfTrans); void latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2); virtual void streamBenchmarks(std::ostream& s) const; virtual void reset(); diff --git a/simulators/c++2/src_simulator/arch/SchedulableDevice.h b/simulators/c++2/src_simulator/arch/SchedulableDevice.h index 68e3181e8c..ca1742df39 100644 --- a/simulators/c++2/src_simulator/arch/SchedulableDevice.h +++ b/simulators/c++2/src_simulator/arch/SchedulableDevice.h @@ -98,6 +98,7 @@ public: virtual int allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const =0; virtual int allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) const =0; virtual void latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2)=0; + virtual void removeTrans(int numberOfTrans)=0; virtual std::string toString() const =0; virtual std::istream& readObject(std::istream &is); virtual std::ostream& writeObject(std::ostream &os); diff --git a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp index 31297a19d3..aef0c43a1a 100644 --- a/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp +++ b/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp @@ -480,6 +480,12 @@ int SingleCoreCPU::allTrans2XMLByTask(std::ostringstream& glob, std::string task return total; } +void SingleCoreCPU::removeTrans(int numberOfTrans){ + if (numberOfTrans == 1){ + _transactList.clear(); + } +} + void SingleCoreCPU::latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2) { for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ if ((*i)->getCommand() !=NULL){ diff --git a/simulators/c++2/src_simulator/arch/SingleCoreCPU.h b/simulators/c++2/src_simulator/arch/SingleCoreCPU.h index 2ca77399c6..f2d60c45da 100644 --- a/simulators/c++2/src_simulator/arch/SingleCoreCPU.h +++ b/simulators/c++2/src_simulator/arch/SingleCoreCPU.h @@ -119,6 +119,7 @@ public: */ int allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) const; int allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) const; + void removeTrans(int numberOfTrans); void latencies2XML(std::ostringstream& glob, unsigned int id1, unsigned int id2); void schedule2XML(std::ostringstream& glob,std::ofstream& myfile) const; diff --git a/simulators/c++2/src_simulator/sim/Simulator.cpp b/simulators/c++2/src_simulator/sim/Simulator.cpp index 72bf121a3a..e30fd221e9 100644 --- a/simulators/c++2/src_simulator/sim/Simulator.cpp +++ b/simulators/c++2/src_simulator/sim/Simulator.cpp @@ -428,6 +428,30 @@ int Simulator::allTrans2XMLByTask(std::ostringstream& glob, std::string taskName return total; } +void Simulator::removeOldTransaction(int numberOfTrans){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + for(TaskList::const_iterator j = (*i)->getTaskList().begin(); j != (*i)->getTaskList().end(); ++j){ + (*j)->removeTrans(numberOfTrans); + } + } + for(FPGAList::const_iterator i=_simComp->getFPGAList().begin(); i != _simComp->getFPGAList().end(); ++i){ + for(TaskList::const_iterator j = (*i)->getTaskList().begin(); j != (*i)->getTaskList().end(); ++j){ + (*j)->removeTrans(numberOfTrans); + } + } + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + (*i)->removeTrans(numberOfTrans); + } + + for(BusList::const_iterator j=_simComp->getBusList().begin(); j != _simComp->getBusList().end(); ++j){ + (*j)->removeTrans(numberOfTrans); + } + + for(FPGAList::const_iterator k=_simComp->getFPGAList().begin(); k != _simComp->getFPGAList().end(); ++k){ + (*k)->removeTrans(numberOfTrans); + } +} + void Simulator::latencies2XML(std::ostringstream& glob, int id1, int id2) { for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ (*i)->latencies2XML(glob, id1, id2); @@ -2039,6 +2063,12 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream& iXmlOutStream){ anEntityMsg << TAG_TRANSACTION_NBo << "nb=\"" << returnedNbOfTransactions << "\"" << TAG_TRANSACTION_NBc << std::endl; std::cout << "End list of all transactions belong to a task." << std::endl; break; + case 26: //Emptying simulation transactions during simulation + aInpStream >> aParam2; + std::cout << "Remove list of " << aParam2 << " transactions per CPU or Bus." << std::endl; + removeOldTransaction(aParam2); + std::cout << "End remove list of transactions." << std::endl; + break; default: anEntityMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; anErrorCode=3; diff --git a/simulators/c++2/src_simulator/sim/Simulator.h b/simulators/c++2/src_simulator/sim/Simulator.h index 14407b323f..edcb776f20 100644 --- a/simulators/c++2/src_simulator/sim/Simulator.h +++ b/simulators/c++2/src_simulator/sim/Simulator.h @@ -275,6 +275,8 @@ public: int allTrans2XMLByTask(std::ostringstream& glob, std::string taskName) const; + void removeOldTransaction(int numberOfTrans); + void latencies2XML(std::ostringstream& glob, int id1, int id2); ///Is true if the simulator is busy diff --git a/src/main/java/remotesimulation/CommandParser.java b/src/main/java/remotesimulation/CommandParser.java index 72ff0cd863..21650baceb 100755 --- a/src/main/java/remotesimulation/CommandParser.java +++ b/src/main/java/remotesimulation/CommandParser.java @@ -328,6 +328,14 @@ public class CommandParser { sc = new SimulationCommand("list-all-transactions-of-a-task", "lat", "25", params, paramNames, "Get all transactions of Task"); commandList.add(sc); + // Remove all the transactions in the past + params = new int[1]; + paramNames = new String[1]; + params[0] = 1; + paramNames[0] = "<YES>: 1, <NO>: 0"; + sc = new SimulationCommand("remove-all-trans", "rmat", "26", params, paramNames, "Remove all the transactions in the past"); + commandList.add(sc); + // rm-breakpoint params = new int[2]; paramNames = new String[2]; diff --git a/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java index 9127cb4432..8a64791598 100644 --- a/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java +++ b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java @@ -15,7 +15,7 @@ import java.util.Vector; public class JPanelTaskTransactions extends JPanel { private JFrameInteractiveSimulation jfis; private TaskTransactionTableModel ttm; - private JButton updateTransactionInformationButton; + private JButton updateTransactionInformationButton, clearAllOldTransactions; private JScrollPane jspTransactionInfo; private JComboBox<String> tasks; private Vector<SimulationTransaction> _trans; @@ -85,7 +85,7 @@ public class JPanelTaskTransactions extends JPanel { nbOfTransactions = new JTextField(Integer.toString(defaultNbOfTransactions), defaultNbOfTransactions); add(nbOfTransactions, c2); - add(new JLabel("# Task Name: "), c2); + add(new JLabel("Task Name: "), c2); tasks = new JComboBox<>(); tasks.addItem("-----"); if(tmlm != null){ @@ -98,6 +98,15 @@ public class JPanelTaskTransactions extends JPanel { add(tasks, c2); updateTransactionInformationButton = new JButton(jfis.actions[InteractiveSimulationActions.ACT_UPDATE_TRANSACTIONS]); add(updateTransactionInformationButton, c2); + clearAllOldTransactions = new JButton(); + clearAllOldTransactions.setText("Clear all old transactions"); + clearAllOldTransactions.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent actionEvent) { + jfis.sendCommand("rmat 1"); + } + }); + add(clearAllOldTransactions, c2); tasks.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { -- GitLab