diff --git a/DRAMSys/simulator/resources/configs/mcconfigs/sms.xml b/DRAMSys/simulator/resources/configs/mcconfigs/sms.xml
new file mode 100644
index 00000000..f975678a
--- /dev/null
+++ b/DRAMSys/simulator/resources/configs/mcconfigs/sms.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DRAMSys/simulator/resources/simulations/sim-batch.xml b/DRAMSys/simulator/resources/simulations/sim-batch.xml
index 0752914c..dcc783d9 100644
--- a/DRAMSys/simulator/resources/simulations/sim-batch.xml
+++ b/DRAMSys/simulator/resources/simulations/sim-batch.xml
@@ -2,7 +2,7 @@
-
+
@@ -39,11 +39,11 @@
-
+
-
+
chstone-adpcm_32.stl
diff --git a/DRAMSys/simulator/simulator.pro b/DRAMSys/simulator/simulator.pro
index 593718da..20ddcef4 100644
--- a/DRAMSys/simulator/simulator.pro
+++ b/DRAMSys/simulator/simulator.pro
@@ -107,7 +107,8 @@ SOURCES += \
src/controller/Controller.cpp \
src/simulation/TracePlayer.cpp \
src/simulation/StlPlayer.cpp \
- src/controller/core/powerdown/PowerDownManagerTimeoutBankwise.cpp
+ src/controller/core/powerdown/PowerDownManagerTimeoutBankwise.cpp \
+ src/controller/scheduler/SMS.cpp
HEADERS += \
src/common/third_party/tinyxml2/tinyxml2.h \
@@ -169,7 +170,8 @@ HEADERS += \
src/controller/core/configuration/ConfigurationLoader.h \
src/error/errormodel.h \
src/simulation/ExampleInitiator.h \
- src/controller/core/powerdown/PowerDownManagerTimeoutBankwise.h
+ src/controller/core/powerdown/PowerDownManagerTimeoutBankwise.h \
+ src/controller/scheduler/SMS.h
thermalsim = $$(THERMALSIM)
isEmpty(thermalsim) {
diff --git a/DRAMSys/simulator/src/controller/Controller.cpp b/DRAMSys/simulator/src/controller/Controller.cpp
index 65847603..b16f981b 100644
--- a/DRAMSys/simulator/src/controller/Controller.cpp
+++ b/DRAMSys/simulator/src/controller/Controller.cpp
@@ -53,6 +53,10 @@ void Controller::buildScheduler()
{
scheduler = new FR_FCFS(*controllerCore);
}
+ else if (selectedScheduler == "SMS")
+ {
+ scheduler = new SMS(*controllerCore, Configuration::getInstance().SJFProbability);
+ }
//else if (selectedScheduler == "PAR_BS")
//{
// scheduler = new PAR_BS(*controllerCore,Configuration::getInstance().RefreshAwareScheduling,
diff --git a/DRAMSys/simulator/src/controller/Controller.h b/DRAMSys/simulator/src/controller/Controller.h
index a07a8b74..a1286d1f 100644
--- a/DRAMSys/simulator/src/controller/Controller.h
+++ b/DRAMSys/simulator/src/controller/Controller.h
@@ -67,6 +67,7 @@
#include "scheduler/Fifo.h"
#include "scheduler/FifoStrict.h"
#include "scheduler/Fr_Fcfs.h"
+#include "scheduler/SMS.h"
#include "scheduler/IScheduler.h"
using namespace std;
diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp
index 594a746b..910e0029 100644
--- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp
+++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.cpp
@@ -121,6 +121,12 @@ void Configuration::setParameter(std::string name, std::string value)
MaxNrOfTransactions = string2int(value);
else if(name == "Scheduler")
Scheduler = value;
+ else if(name == "SJFProbability")
+ if (string2int(value) > 100 || string2int(value) < 0) {
+ SC_REPORT_FATAL("Configuration", ("Invalid value for parameter " + name + ". This parameter must be between 0 and 100.").c_str());
+ } else {
+ SJFProbability = string2int(value);
+ }
else if(name == "Capsize")
Capsize = string2int(value);
else if(name == "PowerDownTimeout")
diff --git a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h
index 53437269..929d65f1 100644
--- a/DRAMSys/simulator/src/controller/core/configuration/Configuration.h
+++ b/DRAMSys/simulator/src/controller/core/configuration/Configuration.h
@@ -66,6 +66,7 @@ struct Configuration
bool OpenPagePolicy = true;
unsigned int MaxNrOfTransactions = 8;
std::string Scheduler;
+ unsigned int SJFProbability;
unsigned int Capsize = 5;
sc_time getPowerDownTimeout(){return powerDownTimeoutInClk*memSpec.clk;}
EPowerDownMode PowerDownMode = EPowerDownMode::Staggered;
diff --git a/DRAMSys/simulator/src/controller/scheduler/SMS.cpp b/DRAMSys/simulator/src/controller/scheduler/SMS.cpp
new file mode 100644
index 00000000..a5eef6dc
--- /dev/null
+++ b/DRAMSys/simulator/src/controller/scheduler/SMS.cpp
@@ -0,0 +1,13 @@
+#include "SMS.h"
+
+using namespace std;
+
+void SMS::schedule (gp *payload)
+{
+ buffer[DramExtension::getExtension(payload).getThread()].emplace_back(payload);
+}
+
+std::pair SMS::getNextRequest(Bank bank)
+{
+ return pair(Command::NOP, NULL);
+}
diff --git a/DRAMSys/simulator/src/controller/scheduler/SMS.h b/DRAMSys/simulator/src/controller/scheduler/SMS.h
new file mode 100644
index 00000000..c2c7dfa3
--- /dev/null
+++ b/DRAMSys/simulator/src/controller/scheduler/SMS.h
@@ -0,0 +1,24 @@
+#ifndef SMS_H
+#define SMS_H
+
+#include "IScheduler.h"
+#include "../core/ControllerCore.h"
+#include "../core/configuration/Configuration.h"
+#include "../../common/dramExtension.h"
+
+using namespace std;
+
+class SMS: public sc_module, public IScheduler
+{
+public:
+ SMS(ControllerCore &controllerCore, unsigned int SJFprobability) : IScheduler(controllerCore), SJFprobability(SJFprobability){}
+ virtual ~SMS(){}
+ virtual void schedule(gp *payload) override;
+ virtual std::pair getNextRequest(Bank bank) override;
+
+private:
+ std::map> buffer;
+ unsigned int SJFprobability;
+};
+
+#endif // SMS_H