49trials = int(sys.argv[2])
51df = pl.read_csv(sys.argv[1], has_header=
False)
52df.columns = [
"value",
"col1",
"event",
"timestamp",
"cpu%",
"derived",
"label"]
56 "instr":
"instructions:u",
57 "cache_loads":
"cache-references:u",
58 "cache_miss":
"cache-misses:u",
59 "l1_loads":
"L1-dcache-loads:u",
60 "l1_misses":
"L1-dcache-load-misses:u",
65 "tlb_loads":
"dTLB-loads:u",
66 "tlb_misses":
"dTLB-load-misses:u",
67 "branch_instr":
"branch-instructions:u",
68 "branch_misses":
"branch-misses:u",
71event_to_key = {v: k
for k, v
in field_map.items()
if v !=
"NA"}
72filtered = df.filter(pl.col(
"event").is_in(event_to_key.keys()))
76 pl.when(pl.col(
"value").cast(pl.Float64, strict=
False).is_null())
78 .otherwise(pl.col(
"value").cast(pl.Utf8))
81filtered = filtered.with_columns([to_clean.alias(
"clean_value")])
83values = {key:
"NA" for key
in field_map}
85for row
in filtered.iter_rows(named=
True):
86 cli_key = event_to_key[row[
"event"]]
87 values[cli_key] = row[
"clean_value"]
89values[
"ipc"] = safe_div(values[
"instr"], values[
"cycles"])
90values[
"miss_per_trial"] = safe_div(values[
"cache_miss"], trials)
91values[
"cycles_per_trial"] = safe_div(values[
"cycles"], trials)
95 "cycles",
"instr",
"ipc",
96 "cache_loads",
"cache_miss",
97 "l1_loads",
"l1_misses",
98 "l2_loads",
"l2_misses",
99 "l3_loads",
"l3_misses",
100 "tlb_loads",
"tlb_misses",
101 "branch_instr",
"branch_misses",
102 "miss_per_trial",
"cycles_per_trial"
107 for k
in ordered_keys:
108 print(f
"[DEBUG] {k} = {values.get(k)}", file=sys.stderr)
112 f
"{k.upper()}={values[k]}"
113 for k
in ordered_keys