Download code/scripts/prof_gaps.py from changh95/hamer-p150: direct link, hf CLI and curl.
- Browser
- Download file 1.15 kB
-
https://huggingface.co/changh95/hamer-p150/resolve/main/code/scripts/prof_gaps.py
- Command line
-
hf download hf://changh95/hamer-p150/code/scripts/prof_gaps.py
-
curl -L -o prof_gaps.py https://huggingface.co/changh95/hamer-p150/resolve/main/code/scripts/prof_gaps.py
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}") | |