diff --git a/energysim/execution/spm.py b/energysim/execution/spm.py index d81cfb1..0a4d772 100644 --- a/energysim/execution/spm.py +++ b/energysim/execution/spm.py @@ -17,6 +17,17 @@ def __init__(self, name: str, db: 'EnergyDatabase'): self.l3_write = 0 self.memory_read = 0 self.memory_write = 0 + # consolidate sets + self.cache_read = 0 + self.cache_write = 0 + self.compute = 0 + self.l1 = 0 + self.l2 = 0 + self.l3 = 0 + self.cache = 0 + self.memory = 0 + self.data_movement = 0 + self.total = 0 def report(self): total_compute = self.instruction + self.execute + self.register_read + self.register_write diff --git a/energysim/operator/matvec.py b/energysim/operator/matvec.py index 3d304b4..c1af691 100644 --- a/energysim/operator/matvec.py +++ b/energysim/operator/matvec.py @@ -75,4 +75,16 @@ def flat_mv_spm(rows, cols, energies: 'EnergyDatabase') -> 'StoredProgramMachine energy.memory_read = total_cache_lines_in * energies.dram_read energy.memory_write = total_cache_lines_out * energies.dram_write + # consolidate sets + energy.compute = energy.instruction + energy.execute + energy.register_read + energy.register_write + energy.l1 = energy.l1_read + energy.l1_write + energy.l2 = energy.l2_read + energy.l2_write + energy.l3 = energy.l3_read + energy.l3_write + energy.cache_read = energy.l1_read + energy.l2_read + energy.l3_read + energy.cache_write = energy.l1_write + energy.l2_write + energy.l3_write + energy.cache = energy.cache_read + energy.cache_write + energy.memory = energy.memory_read + energy.memory_write + energy.data_movement = energy.cache + energy.memory + energy.total = energy.compute + energy.data_movement + return energy diff --git a/scripts/shmoo/README.md b/scripts/shmoo/README.md new file mode 100644 index 0000000..91452e7 --- /dev/null +++ b/scripts/shmoo/README.md @@ -0,0 +1,15 @@ +# Shmoo + +This scripts directory contains shmoo sweeps of energy estimates across different dimensions. + +Fundamentally, the energysim combines an operator with an execution model to model the +energy consumption of the combination. These combinations can then be shmoo'ed across +different dimensions, such as, algorithm/data structure size. + +Metrics of interest are: + +- energy per operator as a function of algorithm size +- operator per Watt + + + diff --git a/scripts/shmoo/operator_size.py b/scripts/shmoo/operator_size.py new file mode 100644 index 0000000..c415bf9 --- /dev/null +++ b/scripts/shmoo/operator_size.py @@ -0,0 +1,31 @@ +# Sweep energies per operator as a function of operator size +import pandas as pd +import matplotlib.pyplot as plt + +from energysim.database.energy import EnergyDatabase +from energysim.operator.matvec import flat_mv_spm + + +def sweep_operator_size(sizes): + energies = [] + + energydb = EnergyDatabase() + for size in sizes: + energy = flat_mv_spm(size, size, energydb) + energies.append(energy.total*1e-9) + + data = {'Size': sizes, 'Energy (mJ)': energies} + df = pd.DataFrame(data) + return df + + + +if __name__ == '__main__': + # create the sweep sizes + sizes = [16, 32, 64, 128, 256, 512, 1024] + df = sweep_operator_size(sizes) + print(df) + df.plot(x='Size', y='Energy (mJ)', title='Flat Matvec Energy (mJ)', kind='line') + plt.show() + +