Download native-eiffel/profile_render.py from peih/matrix-shooter-train: direct link, hf CLI and curl.
- Browser
- Download file 1.21 kB
-
https://huggingface.co/peih/matrix-shooter-train/resolve/main/native-eiffel/profile_render.py
- Command line
-
hf download hf://peih/matrix-shooter-train/native-eiffel/profile_render.py
-
curl -L -o profile_render.py https://huggingface.co/peih/matrix-shooter-train/resolve/main/native-eiffel/profile_render.py
1.21 kB
| """Where a native render's time goes: top CUDA kernels and host-side syncs.""" | |
| import torch | |
| from torch.profiler import profile, ProfilerActivity | |
| from engine_client import Engine | |
| from native_render import NativeRenderer | |
| engine = Engine() | |
| renderer = NativeRenderer(engine.scene, engine.scene_arrays) | |
| frames = [] | |
| for i in range(200): | |
| events = [{'action': 'enter', 'phase': 'down'}, {'action': 'enter', 'phase': 'up'}] if i == 5 else [] | |
| header, frame = engine.advance(round((i + 1) * 60 / 24), events, capture=i % 4 == 0, state=False) | |
| if i % 4 == 0: | |
| frames.append({k: v.copy() for k, v in frame.items()}) | |
| engine.close() | |
| for f in frames[:20]: | |
| renderer.render(f) | |
| torch.cuda.synchronize() | |
| with profile(activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA]) as prof: | |
| for f in frames[20:40]: | |
| renderer.render(f) | |
| torch.cuda.synchronize() | |
| print(prof.key_averages().table(sort_by='cuda_time_total', row_limit=14, max_name_column_width=60)) | |
| syncs = [e for e in prof.key_averages() if any(k in e.key for k in ('Synchronize', 'cudaMemcpy', 'item', 'nonzero', 'local_scalar'))] | |
| for e in syncs: | |
| print('HOST', e.key, e.count, round(e.cpu_time_total / 20 / 1000, 3), 'ms/frame') | |