Files
gopeed/experiments/moejs/summarize.py
T

21 lines
1.0 KiB
Python

#!/usr/bin/env python3
"""Summarize saved Go benchmark samples; times are medians, not best runs."""
import json
from pathlib import Path
import re
import statistics
root = Path(__file__).resolve().parent
samples = {}
for line in (root/'results/bench.txt').read_text().splitlines():
match = re.match(r'(Benchmark\S+)\s+\d+\s+([\d.]+) ns/op\s+([\d.]+) B/op\s+([\d.]+) allocs/op',line)
if match:
key, *values = match.groups()
samples.setdefault(key, []).append(list(map(float,values)))
summary = {}
for key, rows in samples.items():
summary[key] = dict(samples=len(rows),ns_median=statistics.median(r[0] for r in rows),ns_min=min(r[0] for r in rows),ns_max=max(r[0] for r in rows),bytes_median=statistics.median(r[1] for r in rows),allocs_median=statistics.median(r[2] for r in rows))
(root/'results/bench-summary.json').write_text(json.dumps(summary,indent=2)+'\n')
for key, row in summary.items():
print(f'{key}: {row["ns_median"]/1e6:.3f} ms/op; {row["bytes_median"]/1024:.1f} KiB/op; samples={row["samples"]}')