Modifying scripts
This commit is contained in:
@@ -1,23 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -eu
|
|
||||||
. "$(dirname "$0")/env.sh"
|
|
||||||
|
|
||||||
run_case () {
|
|
||||||
W=$1; CORE=$2; DV=$3; D=$4; L2=$5
|
|
||||||
sh "$(dirname "$0")/run_one.sh" "$W" "$CORE" "$DV" "$D" "$L2" 16GB
|
|
||||||
}
|
|
||||||
|
|
||||||
for W in tinyml_kws sensor_fusion aes_ccm attention_kernel; do
|
|
||||||
for DV in high low; do
|
|
||||||
for D in 0 1; do
|
|
||||||
for L2 in 512kB 1MB; do
|
|
||||||
run_case "$W" big "$DV" "$D" "$L2"
|
|
||||||
run_case "$W" little "$DV" "$D" "$L2"
|
|
||||||
run_case "$W" hybrid "$DV" "$D" "$L2"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "[run_all] ALL DONE"
|
|
||||||
|
|
||||||
@@ -1,48 +1,51 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import csv, os, sys
|
import csv
|
||||||
|
import os
|
||||||
|
|
||||||
ROOT = "/home/carlos/projects/gem5"
|
ROOT = "/home/carlos/projects/gem5"
|
||||||
OUT_DATA = os.path.join(ROOT, "gem5-data", "SmartEdgeAI", "results")
|
OUT_DATA = os.path.join(ROOT, "gem5-data", "SmartEdgeAI", "results")
|
||||||
OUT_IOT = os.path.join(ROOT, "iot", "results")
|
OUT_IOT = os.path.join(ROOT, "iot", "results")
|
||||||
|
|
||||||
src = os.path.join(OUT_DATA, "summary.csv")
|
src = os.path.join(OUT_DATA, "summary.csv")
|
||||||
dst_data = os.path.join(OUT_DATA, "summary_energy.csv")
|
dst_data = os.path.join(OUT_DATA, "summary_energy.csv")
|
||||||
dst_iot = os.path.join(OUT_IOT, "summary_energy.csv")
|
dst_iot = os.path.join(OUT_IOT, "summary_energy.csv")
|
||||||
|
|
||||||
# modeling constants (document in your Methods)
|
# Your model constants (document in Methods)
|
||||||
EPI_PJ = {'big':200.0,'little':80.0,'hybrid':104.0} # pJ/inst
|
EPI_PJ = {"big": 200.0, "little": 80.0, "hybrid": 104.0}
|
||||||
E_MEM_PJ = 600.0 # pJ per L2 miss
|
E_MEM_PJ = 600.0
|
||||||
DROWSY_SCALE = 0.85 # 15% energy drop when drowsy=1
|
DROWSY_SCALE = 0.85
|
||||||
|
|
||||||
rows=[]
|
rows = []
|
||||||
with open(src) as f:
|
with open(src) as f:
|
||||||
r=csv.DictReader(f)
|
r = csv.DictReader(f)
|
||||||
for row in r:
|
for row in r:
|
||||||
insts=float(row['insts'])
|
insts = float(row["insts"])
|
||||||
secs=float(row['sim_seconds'])
|
secs = float(row["sim_seconds"])
|
||||||
core=row['core']; drowsy=int(row['drowsy'])
|
core = row["core"]
|
||||||
epi=EPI_PJ.get(core, EPI_PJ['little'])
|
drowsy = int(row["drowsy"])
|
||||||
mr=float(row['l2_miss_rate']) if row['l2_miss_rate'] else 0.0
|
epi = EPI_PJ.get(core, EPI_PJ["little"])
|
||||||
|
mr = float(row["l2_miss_rate"]) if row["l2_miss_rate"] else 0.0
|
||||||
|
|
||||||
l2_misses = mr * insts
|
l2_misses = mr * insts
|
||||||
energy_J = (epi*1e-12)*insts + (E_MEM_PJ*1e-12)*l2_misses
|
energy = (epi * 1e-12) * insts + (E_MEM_PJ * 1e-12) * l2_misses
|
||||||
if drowsy==1:
|
if drowsy == 1:
|
||||||
energy_J *= DROWSY_SCALE
|
energy *= DROWSY_SCALE
|
||||||
|
power = energy / secs if secs > 0 else 0.0
|
||||||
|
edp = energy * secs
|
||||||
|
|
||||||
power_W = energy_J/secs if secs>0 else 0.0
|
row.update(
|
||||||
edp = energy_J * secs # J*s
|
{
|
||||||
|
"energy_J": f"{energy:.6f}",
|
||||||
row.update({
|
"power_W": f"{power:.6f}",
|
||||||
'energy_J': f"{energy_J:.6f}",
|
"edp": f"{edp:.6e}",
|
||||||
'power_W': f"{power_W:.6f}",
|
"epi_model_pJ": f"{epi:.1f}",
|
||||||
'edp': f"{edp:.6e}",
|
}
|
||||||
'epi_model_pJ': f"{epi:.1f}",
|
)
|
||||||
})
|
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
|
|
||||||
for path in (dst_data, dst_iot):
|
for path in (dst_data, dst_iot):
|
||||||
with open(path, 'w', newline='') as f:
|
with open(path, "w", newline="") as f:
|
||||||
w=csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
||||||
w.writeheader(); w.writerows(rows)
|
w.writeheader()
|
||||||
|
w.writerows(rows)
|
||||||
print(f"[energy] wrote {dst_data} and mirrored to {dst_iot}")
|
print(f"[energy] wrote {dst_data} and mirrored to {dst_iot}")
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,34 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os, csv
|
import csv
|
||||||
import matplotlib.pyplot as plt
|
import os
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
ROOT="/home/carlos/projects/gem5"
|
import matplotlib.pyplot as plt
|
||||||
OUT_DATA=os.path.join(ROOT,"gem5-data","SmartEdgeAI","results")
|
|
||||||
OUT_IOT =os.path.join(ROOT,"iot","results")
|
|
||||||
src=os.path.join(OUT_DATA,"summary_energy.csv")
|
|
||||||
out_data=os.path.join(OUT_DATA,"fig_epi_across_workloads.png")
|
|
||||||
out_iot =os.path.join(OUT_IOT ,"fig_epi_across_workloads.png")
|
|
||||||
|
|
||||||
epi_by_core=defaultdict(list)
|
ROOT = "/home/carlos/projects/gem5"
|
||||||
|
OUT_DATA = os.path.join(ROOT, "gem5-data", "SmartEdgeAI", "results")
|
||||||
|
OUT_IOT = os.path.join(ROOT, "iot", "results")
|
||||||
|
src = os.path.join(OUT_DATA, "summary_energy.csv")
|
||||||
|
out_data = os.path.join(OUT_DATA, "fig_epi_across_workloads.png")
|
||||||
|
out_iot = os.path.join(OUT_IOT, "fig_epi_across_workloads.png")
|
||||||
|
|
||||||
|
epi_by_core = defaultdict(list)
|
||||||
with open(src) as f:
|
with open(src) as f:
|
||||||
r=csv.DictReader(f)
|
r = csv.DictReader(f)
|
||||||
for row in r:
|
for row in r:
|
||||||
insts=float(row['insts']); energy=float(row['energy_J'])
|
insts = float(row["insts"])
|
||||||
epi = 1e12*energy/insts if insts>0 else 0.0
|
energy = float(row["energy_J"])
|
||||||
epi_by_core[row['core']].append(epi)
|
epi = 1e12 * energy / insts if insts > 0 else 0.0
|
||||||
|
epi_by_core[row["core"]].append(epi)
|
||||||
|
|
||||||
cores=['big','little','hybrid']
|
cores = ["big", "little", "hybrid"]
|
||||||
vals=[sum(epi_by_core[c])/max(1,len(epi_by_core[c])) for c in cores]
|
vals = [sum(epi_by_core[c]) / max(1, len(epi_by_core[c])) for c in cores]
|
||||||
|
|
||||||
plt.figure()
|
plt.figure()
|
||||||
plt.bar(cores, vals)
|
plt.bar(cores, vals)
|
||||||
plt.ylabel('EPI (pJ/inst)')
|
plt.ylabel("EPI (pJ/inst)")
|
||||||
plt.title('Energy per Instruction across workloads (avg by core mode)')
|
plt.title("Energy per Instruction across workloads (avg by core mode)")
|
||||||
plt.tight_layout(); plt.savefig(out_data); plt.savefig(out_iot)
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_data)
|
||||||
|
plt.savefig(out_iot)
|
||||||
print(f"[plot] wrote {out_data} and mirrored to {out_iot}")
|
print(f"[plot] wrote {out_data} and mirrored to {out_iot}")
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,32 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os, csv
|
import csv
|
||||||
|
import os
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
ROOT="/home/carlos/projects/gem5"
|
ROOT = "/home/carlos/projects/gem5"
|
||||||
OUT_DATA=os.path.join(ROOT,"gem5-data","SmartEdgeAI","results")
|
OUT_DATA = os.path.join(ROOT, "gem5-data", "SmartEdgeAI", "results")
|
||||||
OUT_IOT =os.path.join(ROOT,"iot","results")
|
OUT_IOT = os.path.join(ROOT, "iot", "results")
|
||||||
src=os.path.join(OUT_DATA,"summary_energy.csv")
|
src = os.path.join(OUT_DATA, "summary_energy.csv")
|
||||||
out_data=os.path.join(OUT_DATA,"fig_tinyml_edp.png")
|
out_data = os.path.join(OUT_DATA, "fig_tinyml_edp.png")
|
||||||
out_iot =os.path.join(OUT_IOT ,"fig_tinyml_edp.png")
|
out_iot = os.path.join(OUT_IOT, "fig_tinyml_edp.png")
|
||||||
|
|
||||||
labels=[]; edps=[]
|
labels = []
|
||||||
|
edps = []
|
||||||
with open(src) as f:
|
with open(src) as f:
|
||||||
r=csv.DictReader(f)
|
r = csv.DictReader(f)
|
||||||
for row in r:
|
for row in r:
|
||||||
if row['workload']!='tinyml_kws': continue
|
if row["workload"] != "tinyml_kws":
|
||||||
|
continue
|
||||||
labels.append(f"{row['core']}-{row['dvfs']}-L2{row['l2']}-d{row['drowsy']}")
|
labels.append(f"{row['core']}-{row['dvfs']}-L2{row['l2']}-d{row['drowsy']}")
|
||||||
edps.append(float(row['edp']))
|
edps.append(float(row["edp"]))
|
||||||
|
|
||||||
plt.figure()
|
plt.figure()
|
||||||
plt.bar(labels, edps)
|
plt.bar(labels, edps)
|
||||||
plt.ylabel('EDP (J·s)')
|
plt.ylabel("EDP (J·s)")
|
||||||
plt.title('TinyML: EDP by configuration')
|
plt.title("TinyML: EDP by configuration")
|
||||||
plt.xticks(rotation=60, ha='right')
|
plt.xticks(rotation=60, ha="right")
|
||||||
plt.tight_layout(); plt.savefig(out_data); plt.savefig(out_iot)
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_data)
|
||||||
|
plt.savefig(out_iot)
|
||||||
print(f"[plot] wrote {out_data} and mirrored to {out_iot}")
|
print(f"[plot] wrote {out_data} and mirrored to {out_iot}")
|
||||||
|
|
||||||
|
|||||||
@@ -1,34 +1,45 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import csv, os
|
import csv
|
||||||
|
import os
|
||||||
|
|
||||||
root = os.path.dirname(os.path.dirname(__file__))
|
root = os.path.dirname(os.path.dirname(__file__))
|
||||||
src = os.path.join(root, "results", "phase3_summary_energy.csv")
|
src = os.path.join(root, "results", "phase3_summary_energy.csv")
|
||||||
dst = os.path.join(root, "results", "phase3_drowsy_deltas.csv")
|
dst = os.path.join(root, "results", "phase3_drowsy_deltas.csv")
|
||||||
|
|
||||||
# group by key without drowsy; compare d0 vs d1
|
# group by key without drowsy; compare d0 vs d1
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
bykey = defaultdict(dict)
|
bykey = defaultdict(dict)
|
||||||
|
|
||||||
with open(src) as f:
|
with open(src) as f:
|
||||||
r=csv.DictReader(f)
|
r = csv.DictReader(f)
|
||||||
for row in r:
|
for row in r:
|
||||||
key = (row['workload'], row['core'], row['dvfs'], row['l2'])
|
key = (row["workload"], row["core"], row["dvfs"], row["l2"])
|
||||||
bykey[key][row['drowsy']] = row
|
bykey[key][row["drowsy"]] = row
|
||||||
|
|
||||||
rows=[]
|
rows = []
|
||||||
for k, d in bykey.items():
|
for k, d in bykey.items():
|
||||||
if '0' in d and '1' in d:
|
if "0" in d and "1" in d:
|
||||||
a=d['0']; b=d['1']
|
a = d["0"]
|
||||||
e0=float(a['energy_J']); e1=float(b['energy_J'])
|
b = d["1"]
|
||||||
edp0=float(a['edp']); edp1=float(b['edp'])
|
e0 = float(a["energy_J"])
|
||||||
rows.append({
|
e1 = float(b["energy_J"])
|
||||||
'workload':k[0],'core':k[1],'dvfs':k[2],'l2':k[3],
|
edp0 = float(a["edp"])
|
||||||
'energy_drop_%': f"{100*(e0-e1)/e0:.2f}",
|
edp1 = float(b["edp"])
|
||||||
'edp_drop_%': f"{100*(edp0-edp1)/edp0:.2f}"
|
rows.append(
|
||||||
})
|
{
|
||||||
|
"workload": k[0],
|
||||||
|
"core": k[1],
|
||||||
|
"dvfs": k[2],
|
||||||
|
"l2": k[3],
|
||||||
|
"energy_drop_%": f"{100*(e0-e1)/e0:.2f}",
|
||||||
|
"edp_drop_%": f"{100*(edp0-edp1)/edp0:.2f}",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
with open(dst,'w',newline='') as f:
|
with open(dst, "w", newline="") as f:
|
||||||
w=csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
||||||
w.writeheader(); w.writerows(rows)
|
w.writeheader()
|
||||||
|
w.writerows(rows)
|
||||||
|
|
||||||
print(f"[delta] wrote {dst}")
|
print(f"[delta] wrote {dst}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user