summaryrefslogtreecommitdiff
path: root/Simulator/include/simulation/history
diff options
context:
space:
mode:
authorMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
committerMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
commit070ce923574dcc57435cb3fb2dfe86b6a38cd249 (patch)
treeffd69a842ac4ad22aaf7161f923b9f0b47c7147a /Simulator/include/simulation/history
Initial code commit with organized dependencies
Diffstat (limited to 'Simulator/include/simulation/history')
-rw-r--r--Simulator/include/simulation/history/History.h43
-rw-r--r--Simulator/include/simulation/history/MachineSnapshot.h17
-rw-r--r--Simulator/include/simulation/history/SimulationHistory.h81
-rw-r--r--Simulator/include/simulation/history/WorkloadSnapshot.h13
4 files changed, 154 insertions, 0 deletions
diff --git a/Simulator/include/simulation/history/History.h b/Simulator/include/simulation/history/History.h
new file mode 100644
index 00000000..f1d826eb
--- /dev/null
+++ b/Simulator/include/simulation/history/History.h
@@ -0,0 +1,43 @@
+#pragma once
+#include <stdint.h>
+#include <map>
+
+namespace Simulation {
+ template<typename Type>
+ class History {
+ public:
+ void addSnapshotAtTick(uint32_t tick, Type snapshot)
+ {
+ history.insert(std::make_pair(tick, snapshot));
+ }
+
+ const auto& snapshotsAtTick(uint32_t tick)
+ {
+ return history.equal_range(tick);
+ }
+
+ typename std::unordered_map<uint32_t, Type>::const_iterator begin()
+ {
+ return history.begin();
+ }
+
+ typename std::unordered_map<uint32_t, Type>::const_iterator end()
+ {
+ return history.end();
+ }
+
+ void clear()
+ {
+ history.clear();
+ }
+
+ size_t size()
+ {
+ return history.size();
+ }
+
+ private:
+ // Maps ticks to histories of workloads
+ std::unordered_multimap<uint32_t, Type> history;
+ };
+} \ No newline at end of file
diff --git a/Simulator/include/simulation/history/MachineSnapshot.h b/Simulator/include/simulation/history/MachineSnapshot.h
new file mode 100644
index 00000000..49ce1313
--- /dev/null
+++ b/Simulator/include/simulation/history/MachineSnapshot.h
@@ -0,0 +1,17 @@
+#pragma once
+
+namespace Simulation {
+ /*
+ POD class that represents the state of a machine.
+ */
+ class MachineSnapshot {
+ public:
+ MachineSnapshot(int id, int currentWorkload, float temp, float load, uint32_t mem) : id(id), currentWorkload(currentWorkload), temperature(temp), loadFraction(load), usedMemory(mem) {}
+
+ int id;
+ int currentWorkload;
+ float temperature;
+ float loadFraction;
+ uint32_t usedMemory;
+ };
+} \ No newline at end of file
diff --git a/Simulator/include/simulation/history/SimulationHistory.h b/Simulator/include/simulation/history/SimulationHistory.h
new file mode 100644
index 00000000..f43968b7
--- /dev/null
+++ b/Simulator/include/simulation/history/SimulationHistory.h
@@ -0,0 +1,81 @@
+#pragma once
+#include "History.h"
+#include "WorkloadSnapshot.h"
+#include "MachineSnapshot.h"
+
+#include <unordered_map>
+
+namespace Simulation
+{
+ using WorkloadHistory = History<WorkloadSnapshot>;
+ using MachineHistory = History<MachineSnapshot>;
+ using HistoryRef = std::tuple<std::reference_wrapper<WorkloadHistory>, std::reference_wrapper<MachineHistory>>;
+
+ class SimulationHistory
+ {
+ public:
+ /*
+ Adds the workload snapshot at the given tick.
+ */
+ void addSnapshot(uint32_t tick, WorkloadSnapshot snapshots)
+ {
+ workloadHistory.addSnapshotAtTick(tick, snapshots);
+ }
+
+ /*
+ Adds the machine snapshot at the given tick.
+ */
+ void addSnapshot(uint32_t tick, MachineSnapshot snapshots)
+ {
+ machineHistory.addSnapshotAtTick(tick, snapshots);
+ }
+
+ /*
+ Returns the equal_range of the workload snapshots at the given tick.
+ */
+ auto getWorkloadSnapshot(uint32_t tick)
+ {
+ return workloadHistory.snapshotsAtTick(tick);
+ }
+
+ /*
+ Returns the equal_range of the machine snapshots at the given tick.
+ */
+ auto getMachineSnapshot(uint32_t tick)
+ {
+ return machineHistory.snapshotsAtTick(tick);
+ }
+
+ /*
+ Returns a const tuple ref of the entire cached history of machines and workloads.
+ */
+ const HistoryRef getHistory()
+ {
+ return std::make_tuple(
+ std::ref(workloadHistory),
+ std::ref(machineHistory)
+ );
+ }
+
+ /*
+ Clears the cache of history.
+ */
+ void clearHistory()
+ {
+ workloadHistory.clear();
+ machineHistory.clear();
+ }
+
+ /*
+ Returns the number of snapshots that are in the history cache.
+ */
+ size_t historySize()
+ {
+ return workloadHistory.size();
+ }
+
+ private:
+ WorkloadHistory workloadHistory;
+ MachineHistory machineHistory;
+ };
+} \ No newline at end of file
diff --git a/Simulator/include/simulation/history/WorkloadSnapshot.h b/Simulator/include/simulation/history/WorkloadSnapshot.h
new file mode 100644
index 00000000..1e7e2695
--- /dev/null
+++ b/Simulator/include/simulation/history/WorkloadSnapshot.h
@@ -0,0 +1,13 @@
+#pragma once
+
+namespace Simulation
+{
+ class WorkloadSnapshot
+ {
+ public:
+ WorkloadSnapshot(uint32_t id, uint32_t flopsDone) : flopsDone(flopsDone), id(id) {}
+
+ uint32_t flopsDone;
+ uint32_t id;
+ };
+} \ No newline at end of file