diff options
| author | MDBijman <matthijs@bijman.org> | 2017-01-24 12:15:26 +0100 |
|---|---|---|
| committer | MDBijman <matthijs@bijman.org> | 2017-01-24 12:15:26 +0100 |
| commit | 070ce923574dcc57435cb3fb2dfe86b6a38cd249 (patch) | |
| tree | ffd69a842ac4ad22aaf7161f923b9f0b47c7147a /Simulator/include/simulation/history | |
Initial code commit with organized dependencies
Diffstat (limited to 'Simulator/include/simulation/history')
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 |
