Skip to content

Commit

Permalink
adding a size sweep script
Browse files Browse the repository at this point in the history
  • Loading branch information
Ravenwater committed Dec 7, 2024
1 parent c5ff98c commit 6b427c8
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
11 changes: 11 additions & 0 deletions energysim/execution/spm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions energysim/operator/matvec.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
15 changes: 15 additions & 0 deletions scripts/shmoo/README.md
Original file line number Diff line number Diff line change
@@ -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



31 changes: 31 additions & 0 deletions scripts/shmoo/operator_size.py
Original file line number Diff line number Diff line change
@@ -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()


0 comments on commit 6b427c8

Please sign in to comment.