hamer-p150 / code /scripts /prof_gaps.py
changh95's picture
Optimized build (2026-10-03): model call 3.49 ms, device 3.36 ms
58ba6df verified
Raw History Blame Contribute Delete
1.15 kB
"""ETH vs worker op-to-op gap attribution: per (previous op, op) pair, mean gap under each dispatch.
usage: python scripts/prof_gaps.py <eth ops_perf.csv> <worker ops_perf.csv> (last forward of scripts/prof.py)"""
import csv,sys,statistics
from collections import defaultdict
def load(p):
rows=[r for r in csv.DictReader(open(p)) if r.get("DEVICE KERNEL DURATION [ns]")]
starts=[i for i,r in enumerate(rows[:-1]) if r["OP CODE"].startswith("GenericOp") and rows[i+1]["OP CODE"].startswith("MinimalMatmul")]
return rows[starts[-1]:]
E=load(sys.argv[1]); W=load(sys.argv[2])
g=defaultdict(lambda:[0,0.,0.,0.,0.])
for i,(e,w) in enumerate(zip(E,W)):
if i==0: continue
k=(E[i-1]["OP CODE"][:22],e["OP CODE"][:22])
s=g[k]; s[0]+=1; s[1]+=float(e["OP TO OP LATENCY [ns]"] or 0)/1e3; s[2]+=float(w["OP TO OP LATENCY [ns]"] or 0)/1e3
s[3]+=float(E[i-1]["DEVICE KERNEL DURATION [ns]"])/1e3; s[4]+=float(e["CORE COUNT"])
for k,s in sorted(g.items(),key=lambda kv:-(kv[1][1]-kv[1][2])):
print(f"{k[0]:22s} -> {k[1]:22s} n={s[0]:4d} ethgap={s[1]/s[0]:6.2f} wgap={s[2]/s[0]:6.2f} prevdur={s[3]/s[0]:6.1f} cores={s[4]/s[0]:.0f}")