Files
GR-raytracing/benchmarks/hip_psf_replay_2026-09-07/analyze.py
T
wyj 11e703e33d Doc: record bounded HIP PSF replay results and provenance
Archive fixed catalog subsets and captured events, manifests, reproducible commands, raw timing and regression logs, and device resource evidence. Document distribution-dependent tile reduction gains and independent indexed producer throughput.

Update the GPU plan and renderer design while retaining the production atomic path. Preserve historical measurement metadata and exclude generated Python bytecode.
2026-09-11 16:45:48 -04:00

33 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Summarize raw runs; create artifact provenance and actual coverage metadata."""
from pathlib import Path
import hashlib,json,re,statistics
base=Path(__file__).resolve().parent
manifest={}
for p in sorted(base.glob('*.events')):
lines=p.read_text().splitlines();header=lines[0].split();events=[list(map(float,s.split())) for s in lines[1:]]
assert len(events)==int(header[3])
tiles={}
for e in events:
tile=f'{int(e[0]//32)},{int(e[1]//32)}';tiles[tile]=tiles.get(tile,0)+1
manifest[p.name]={'sha256':hashlib.sha256(p.read_bytes()).hexdigest(),'events':len(events),
'bbox_xy':[min(e[0] for e in events),min(e[1] for e in events),max(e[0] for e in events),max(e[1] for e in events)] if events else [],
'flux_range':[min(e[5] for e in events),max(e[5] for e in events)] if events else [],
'support_range':[min(e[6] for e in events),max(e[6] for e in events)] if events else [],
'occupied_center_tiles_32':len(tiles),'max_centers_per_tile_32':max(tiles.values(),default=0),
'centers_per_tile_32':tiles}
(base/'events_manifest.json').write_text(json.dumps(manifest,indent=2)+'\n')
for version in ['v2','v3','final']:
groups={}
for p in sorted(base.glob(version+'_*.log')):
text=p.read_text();matches=re.findall(r'(\w+)=([-+0-9.eE]+)',text)
row=dict(matches)
if 'replay_wall' not in row or 'EXIT 0' not in text:continue
key=p.stem.rsplit('_',1)[0];groups.setdefault(key,[]).append(row)
print(version)
for key,rows in groups.items():
ms=statistics.median(float(r['replay_wall'])*1000 for r in rows)
complete=statistics.median((float(r['replay_wall'])+float(r['create']))*1000 for r in rows)
print(key,'repeats',len(rows),'replay_ms',round(ms,3),'with_create_ms',round(complete,3),
'range_ms',[round(min(float(r['replay_wall'])*1000 for r in rows),3),round(max(float(r['replay_wall'])*1000 for r in rows),3)])