File size: 1,149 Bytes
58ba6df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"""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}")