[HRR](1)

πŸ“¦ version 10.0, in ubuntu stonking

πŸ’– NAME πŸ’–

okay bestie, so this is HRR β€” the HIP Record & Replay workload replay tool. that's it, that's the whole name section, we move ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

hrr-playback <capture.hrr> [options]

literally just hand it your capture file and whatever options you're feeling, and she goes πŸ’…


πŸŽ€ OPTIONS πŸŽ€

  • --info β€” prints the archive summary and dips. no GPU required, so you can snoop on a capture from your sad little laptop with no card in it 🫢
  • --repair β€” rewrites a crash-truncated archive into a clean one, then bails. yes she can fix your messy recording, we love a healer πŸ’–
  • --events β€” only means something next to --info: also dumps the full event log
  • --verbose β€” prints each event as it gets processed. chatty queen πŸ‘‘
  • --skip-device-sync β€” skip the device/stream synchronize events entirely
  • --multi-thread β€” enables multi-threaded replay. (default: single-threaded, fyi)
  • --timing β€” reports wall time and total GPU kernel time. numbers girlies rise ⏱️
  • --kernel-filter STR β€” only launches kernels whose name contains STR. note: a silent full warm-up pass runs first, so don't be spooked, that's intentional
  • --replace-kernel N=P β€” launches the kernel whose recorded name is exactly N from code object P (.hsaco) instead of the recorded one. N has to be the full recorded symbol (go look at --info; it's mangled for C++/chevron kernels). repeatable, so stack it for multiple kernels. recorded args/grid/block get reused, and the archive is not modified. swap the code, keep the fit πŸ’…
  • --sync-after-launch β€” hipDeviceSynchronize after every kernel launch
  • --sync-after-event β€” hipDeviceSynchronize after EVERY event. slowest, most precise. the drama is the point 😭
  • --sync-watchdog-ms N β€” aborts with a diagnostic if any device synchronize doesn't complete within N ms. catches hung/deadlocked kernels, like StreamK flag spin-waits πŸ‘€. 0 = disabled
  • --trace-kernels β€” prints one compact line before every kernel launch
  • --trace-sync β€” prints sync begin/done markers around kernel syncs
  • --progress-kernels N β€” prints a heartbeat every N launched kernels
  • --progress-seconds S β€” prints a heartbeat at most every S seconds
  • --help β€” shows this message 🫢

🌸 Environment (replay device allocation padding ??? see hip_playback.cpp) 🌸

that ??? is literally in the source, not me being mysterious, iykyk 🧚

  • HIP_HRR_REPLAY_ALLOC_PAD_FACTOR β€” unsigned, default 1 (exact recorded sizes). use 256 for legacy pool-style headroom, which means more VRAM being eaten. your call bestie
  • HIP_HRR_REPLAY_ALLOC_PAD_MAX β€” bytes, default 1073741824 (that's a 1 GiB cap per alloc)

✨ Environment (lightweight replay tracing) ✨

same energy as the flags above, just dropped through the environment instead:

  • HIP_HRR_REPLAY_TRACE_KERNELS=1 β€” same as --trace-kernels
  • HIP_HRR_REPLAY_TRACE_SYNC=1 β€” same as --trace-sync
  • HIP_HRR_REPLAY_PROGRESS_KERNELS=N β€” same as --progress-kernels N
  • HIP_HRR_REPLAY_PROGRESS_SECONDS=S β€” same as --progress-seconds S
  • HIP_HRR_REPLAY_SYNC_WATCHDOG_MS=N β€” same as --sync-watchdog-ms N

okay so, default mode: single-threaded, serialize GPU after the pass, abort on the first error. if you need to pinpoint the exact event causing a GPU fault or hang, that's what --sync-after-event is for. it's slow and it's worth it, no cap πŸ’…

and the usage line, verbatim:

Usage: debian/tmp/usr/bin/hrr-playback <capture.hrr> [options]

πŸ’€ real talk: this manpage prints that whole options block twice. flags, env vars, the default-mode paragraph β€” the whole thing, again, right after itself. the second copy is the one that carries the Usage: line above. so if you're skimming and feel deja vu… you're not losing it, the page really did that. iconic of her, honestly πŸ™ˆ

that's the whole thing bestie, go replay some workloads and slay πŸ’–βœ¨ β€” this was the hrr-playback page, HRR(1), dated October 2026 🌈

πŸ“¦ where this page comes from