Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
a85f881
feat(hrr): record pointed-to payloads and replay the handler families
danielbolsson Aug 24, 2026
6aca419
hrr: skip playback of APIs amdhip.def.in does not export
danielbolsson Aug 27, 2026
58399d3
feat(hrr): refuse the calls replay cannot reproduce, by name
danielbolsson Aug 24, 2026
60fe125
fix(hrr): translate kernel arguments that hide a pointer, keep the on…
danielbolsson Aug 24, 2026
c159515
fix(hrr): route joined scalar halves through the shared pointer path
danielbolsson Aug 27, 2026
ea84489
Merge branch 'users/danielbolsson/hrr-api-matrix' into users/danielbo…
danielbolsson Sep 1, 2026
25601a7
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 1, 2026
c82d943
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 1, 2026
b0c7a03
fix(hrr): compare ptr-dump live values numerically, not as formatted …
danielbolsson Sep 1, 2026
815d0cb
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 1, 2026
74a6796
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 1, 2026
d19a85f
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 1, 2026
43455dd
test(hrr): disable Unit_HRR_KernelArgs cases on amd_windows/linux/wsl
danielbolsson Sep 1, 2026
31f50ec
Merge branch 'users/danielbolsson/hrr-api-matrix' into users/danielbo…
danielbolsson Sep 1, 2026
25174df
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 1, 2026
c242b31
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 1, 2026
7a3e7d2
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 2, 2026
21560a7
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 2, 2026
0647943
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 2, 2026
0535635
test(hrr): hide Unit_HRR_KernelArgs string-literal case with [.]
danielbolsson Sep 2, 2026
5deaf9f
Merge branch 'users/danielbolsson/hrr-api-matrix' into users/danielbo…
danielbolsson Sep 7, 2026
1961354
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 7, 2026
88ee3c0
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 7, 2026
87ac47a
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 8, 2026
847eb16
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 8, 2026
085c1d1
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 8, 2026
f477844
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 8, 2026
12e3ba9
Merge commit 'f47784457c' into hrr/10642
danielbolsson Sep 8, 2026
6c1dadc
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 8, 2026
a5ab390
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 9, 2026
0267701
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 9, 2026
d1d8628
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 9, 2026
2de8a4a
fix(hrr): drop the NOOP entry the migration merge revived
danielbolsson Sep 9, 2026
20afbdb
Merge branch 'fix/hrr-noop-overlap' into fix/hrr-scope-exclusions
danielbolsson Sep 9, 2026
54698fd
Merge branch 'fix/hrr-scope-exclusions' into fix/hrr-kernel-args
danielbolsson Sep 9, 2026
1c0f91a
chore(hrr): reject an API that names two replay classification sets
danielbolsson Sep 9, 2026
70106f0
Merge branch 'fix/hrr-noop-overlap' into fix/hrr-scope-exclusions
danielbolsson Sep 9, 2026
43d431c
chore(hrr): include UNREPLAYABLE in the replay-class overlap check
danielbolsson Sep 9, 2026
0d3c331
Merge branch 'fix/hrr-scope-exclusions' into fix/hrr-kernel-args
danielbolsson Sep 9, 2026
8f12c04
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 9, 2026
7d7df0b
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 9, 2026
ce31eb9
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 9, 2026
ce28ac2
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 9, 2026
3630ee7
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 9, 2026
2d6497d
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 9, 2026
ba17745
fix(hrr): stop replay dereferencing capture-process pointers
danielbolsson Sep 9, 2026
5a661a3
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 10, 2026
604fe2d
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 10, 2026
8171cf0
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 10, 2026
5316cb2
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 10, 2026
9de5afe
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 10, 2026
561e18f
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 10, 2026
85baac2
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 14, 2026
563b31d
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 14, 2026
b84a338
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 14, 2026
91e4c84
Merge branch 'users/danielbolsson/hrr-api-matrix' into users/danielbo…
danielbolsson Sep 15, 2026
c3b4ee3
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 15, 2026
ddf4acf
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 15, 2026
711171a
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 16, 2026
8faaa7b
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 16, 2026
4632a60
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 16, 2026
3a7a59e
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 16, 2026
affec6a
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 16, 2026
d5158bf
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 16, 2026
b19cc53
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 16, 2026
9d4b11a
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 16, 2026
c52a835
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 16, 2026
b72164a
fix(hrr): route clr capture diagnostics through clr's logging macros
danielbolsson Sep 16, 2026
61cc566
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 16, 2026
d92a463
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 16, 2026
42b28e8
fix(hrr): route the unreplayable-API notice through clr's logging
danielbolsson Sep 17, 2026
d57f269
feat(hrr): record argument truncation as unreplayable in the manifest
danielbolsson Sep 17, 2026
77d3010
fix(hrr): declare the log-level flags the generated capture file uses
danielbolsson Sep 17, 2026
caedcb8
fix(hrr): declare the log-level flags the generated capture file uses
danielbolsson Sep 17, 2026
5a8b8b2
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 17, 2026
155d5bc
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 17, 2026
f410585
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 17, 2026
4686de5
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 17, 2026
5f555d5
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 17, 2026
587ee56
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 17, 2026
2fc2c3f
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 17, 2026
d18581d
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 17, 2026
b28fa16
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 17, 2026
284ae9f
fix(hrr): re-apply the archive-incomplete logging conversion
danielbolsson Sep 17, 2026
f7b5414
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 17, 2026
a5ebfc4
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 17, 2026
1171979
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-matr…
danielbolsson Sep 17, 2026
01e9238
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
danielbolsson Sep 17, 2026
890e9b8
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 17, 2026
d413593
Merge branch 'develop' into users/danielbolsson/hrr-api-payloads
danielbolsson Sep 21, 2026
40600d0
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 21, 2026
025d2b9
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 21, 2026
85d616d
Merge branch 'develop' into users/danielbolsson/hrr-api-payloads
danielbolsson Sep 22, 2026
4ebf70a
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 22, 2026
d2284e5
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 22, 2026
df73fb5
Merge remote-tracking branch 'origin/develop' into users/danielbolsso…
danielbolsson Sep 23, 2026
d791c6f
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 23, 2026
4f0424d
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 23, 2026
abc0168
fix(hrr): note unreplayable APIs only when their event is recorded
danielbolsson Sep 23, 2026
c7627fb
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 23, 2026
51bd73f
Merge branch 'users/danielbolsson/hrr-api-payloads' into users/daniel…
danielbolsson Sep 25, 2026
aea07be
Merge branch 'develop' into users/danielbolsson/hrr-api-payloads
danielbolsson Sep 25, 2026
dcfc02e
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 25, 2026
1395ec9
fix(hrr): report every unreplayable reason, JSON-escape the manifest …
danielbolsson Sep 25, 2026
f804a1a
Merge step2-scope fix into step3-kargs
danielbolsson Sep 25, 2026
5ffcb0c
Merge remote-tracking branch 'origin/develop' into users/danielbolsso…
cursoragent Sep 25, 2026
9c16927
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
cursoragent Sep 25, 2026
4e64e01
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
cursoragent Sep 25, 2026
3260c11
Merge remote-tracking branch 'origin/develop' into users/danielbolsso…
cursoragent Sep 28, 2026
59e827d
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-api-payl…
cursoragent Sep 28, 2026
da0d1e4
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
cursoragent Sep 28, 2026
7039999
Merge remote-tracking branch 'origin/develop' into cascade2-payloads
danielbolsson Sep 28, 2026
23142be
Merge branch 'cascade2-payloads' into c2-scope
danielbolsson Sep 28, 2026
54bd6d8
Merge branch 'c2-scope' into c2-kargs
danielbolsson Sep 28, 2026
b1aea34
Merge branch 'develop' into users/danielbolsson/hrr-scope-exclusions
danielbolsson Sep 28, 2026
ddb1fca
Merge branch 'users/danielbolsson/hrr-scope-exclusions' into users/da…
danielbolsson Sep 28, 2026
37a37e6
Merge remote-tracking branch 'origin/develop' into hrr-scope-exclusions
danielbolsson Sep 29, 2026
91144e8
Merge remote-tracking branch 'origin/users/danielbolsson/hrr-scope-ex…
danielbolsson Sep 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 120 additions & 0 deletions projects/clr/hipamd/src/hrr/hip_capture_generated.cpp

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions projects/clr/hipamd/src/hrr/hip_capture_metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ extern hipError_t ihipGetDeviceProperties(hipDeviceProp_t* props, hipDevice_t de

namespace hrr_cap {
namespace metadata {
namespace {

std::string json_escape(const char* s) {
std::string out;
Expand Down Expand Up @@ -54,7 +53,9 @@ std::string json_escape(const char* s) {
return out;
}

std::string json_escape(const std::string& s) { return json_escape(s.c_str()); }
namespace {

std::string json_escape(const std::string& s) { return metadata::json_escape(s.c_str()); }

std::string quote(const std::string& s) { return "\"" + json_escape(s) + "\""; }

Expand Down
5 changes: 5 additions & 0 deletions projects/clr/hipamd/src/hrr/hip_capture_metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,10 @@ namespace metadata {
// APIs that would re-enter hip::init().
std::string collect_json();

// Escapes `s` for use inside a JSON string literal (quotes not included):
// backslash, double quote, the short control escapes and any other byte below
// 0x20 as \u00XX. A null `s` yields "".
std::string json_escape(const char* s);

} // namespace metadata
} // namespace hrr_cap
48 changes: 48 additions & 0 deletions projects/clr/hipamd/src/hrr/hip_capture_writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@
#include <cstring>
#include <cerrno>
#include <filesystem>
#include <map>
#include <mutex>
#include <set>
#include <string>
#include <unordered_set>
#include <algorithm>
Expand Down Expand Up @@ -216,6 +218,15 @@ static std::atomic<uint64_t> g_blob_count{0};
static std::mutex g_blob_mu;
static std::unordered_set<std::string> g_written_blobs;

// APIs recorded in this archive that replay cannot reproduce (note_unreplayable).
// Listed in manifest.json so the gap is a property of the archive rather than
// something only visible in a replay log.
static std::mutex g_unreplayable_mu;
// api -> distinct reasons it was noted for. One API can be unreplayable for
// several reasons (e.g. a different truncated argument on different calls),
// and each is worth reporting.
static std::map<std::string, std::set<std::string>> g_unreplayable_apis;

// ---------------------------------------------------------------------------
// Low-level fd helpers
// ---------------------------------------------------------------------------
Expand Down Expand Up @@ -499,6 +510,26 @@ static void write_manifest_stdio(const char* output_dir, bool complete) {
complete ? "true" : "false",
static_cast<unsigned long long>(g_event_count.load()),
static_cast<unsigned long long>(g_blob_count.load()));
{
std::lock_guard<std::mutex> lk(g_unreplayable_mu);
if (!g_unreplayable_apis.empty()) {
fprintf(mf, ",\n \"unreplayable_apis\": {");
bool first_api = true;
for (const auto& [api, reasons] : g_unreplayable_apis) {
fprintf(mf, "%s\n \"%s\": [", first_api ? "" : ",",
metadata::json_escape(api.c_str()).c_str());
bool first_reason = true;
for (const auto& reason : reasons) {
fprintf(mf, "%s\"%s\"", first_reason ? "" : ", ",
metadata::json_escape(reason.c_str()).c_str());
first_reason = false;
}
fprintf(mf, "]");
first_api = false;
}
fprintf(mf, "\n }");
}
}
if (g_metadata_json_len > 0) {
fprintf(mf, ",\n \"metadata\": %.*s\n",
static_cast<int>(g_metadata_json_len), g_metadata_json);
Expand Down Expand Up @@ -751,6 +782,23 @@ void mark_incomplete(const char* reason) {

bool is_incomplete() { return g_capture_incomplete.load(std::memory_order_relaxed); }

void note_unreplayable(const char* api, const char* reason) {
if (!api) return;
if (!reason) reason = "(unspecified)";
{
std::lock_guard<std::mutex> lk(g_unreplayable_mu);
if (!g_unreplayable_apis[api].insert(reason).second) return;
}
// Warning, not Error: unlike mark_incomplete() the archive is well-formed and
// every event is present — only the ability to re-execute this one call is
// lost. That is a degradation, not a failure.
// log_printf appends its own newline, so the format string omits it.
LogPrintfWarning(
"[HRR capture] %s cannot be replayed: %s. The call is recorded, but "
"replay will report it as unreplayable rather than reproduce it",
api, reason);
}

void flush(const char* /*output_dir*/) {
// Always finalize the *effective* directory this process actually wrote to
// (g_output_dir), which is always a pid-<pid> sub-archive. The caller passes
Expand Down
16 changes: 16 additions & 0 deletions projects/clr/hipamd/src/hrr/hip_capture_writer.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,22 @@ void mark_incomplete(const char* reason);
// Returns true if mark_incomplete() has been called.
bool is_incomplete();

// Record that `api` was captured but cannot be replayed faithfully — the call
// is in the archive, its effect is not reproducible (a host callback belonging
// to this process, a handle only meaningful to another rank, an argument
// truncated at capture, ...). Warns once per distinct (api, reason) at capture
// time, so the gap is visible when the recording is made rather than only when
// someone tries to replay it, and lists it in manifest.json as
// "unreplayable_apis": {"<api>": ["<reason>", ...]}. Both strings are
// JSON-escaped on write, so any text is safe to pass.
//
// Deliberately NOT mark_incomplete(): that means an event was dropped or torn
// and suppresses the clean-shutdown trailer. Here every event is present and
// the archive is well-formed; what is missing is the ability to re-execute
// this particular call. Thread-safe; the warning fires once per (api, reason)
// per process.
void note_unreplayable(const char* api, const char* reason);

// Write a buffer as a content-addressed blob. Returns hash.
// Thread-safe. Skips write if blob already exists on disk.
Hash128 write_blob(const void* data, size_t len);
Expand Down
36 changes: 31 additions & 5 deletions projects/hrr/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -1426,11 +1426,37 @@ manifest classifies it as payload loss and `derive_manifest.py` fails the build
count drifts from its recorded baseline, so a newly-captured struct-input API cannot
lose its payload unnoticed.

### Recorded Failures Are Not Replay Failures

A recorded call that *failed* is reproduced, not repaired: when the archived return is
non-zero and replay reproduces the same error, that is the faithful outcome and the
dispatcher reports it as such instead of as a handler failure.
### Fail-Loud Scope Exclusions

Some calls cannot be reproduced in a different process no matter how much of the
argument is recorded. Rather than pass a null or a stale value and let the runtime
report something unattributable, these are `UNREPLAYABLE_PLAYBACK_APIS`: the handler
returns `hipErrorNotSupported` (fatal unless `--continue-on-error`), names itself and
its reason on stderr, and the replay summary lists the archive as incomplete. Capture
warns once at record time as well, so the incompleteness is visible when the recording
is made and not only when someone tries to replay it. The exclusions are:

- **Host callbacks** — `hipLaunchHostFunc`, `hipLaunchHostFunc_spt`,
`hipStreamAddCallback`, `hipStreamAddCallback_spt`. The callback is a function pointer
in the recording process; there is nothing to call at replay.
- **Host nodes in a graph** — `hipGraphAddHostNode`, `hipGraphHostNodeSetParams`,
`hipGraphExecHostNodeSetParams`: the same function pointer reached through the graph
API. Like every exclusion these stop the replay at the call itself. Under
`--continue-on-error` the replay goes on, so the handler also marks the owning graph
incomplete, and instantiating that graph is then refused rather than run short a node.
- **Cross-process handle import** — `hipMemImportFromShareableHandle`,
`hipMemPoolImportFromShareableHandle`. The exported fd or HANDLE is meaningful only
inside the exporting process and its peers, which a later replay is not.
- **Multi-device launch by host function address** —
`hipLaunchCooperativeKernelMultiDevice`, `hipExtLaunchMultiKernelMultiDevice`.
`hipLaunchParams` names each kernel by a host function address and, unlike the
single-device spellings, has no entry point that takes a `hipFunction_t` instead.
- **Host-object lifetime callbacks** — `hipUserObjectCreate`, whose destructor is a host
function pointer with the same problem as a stream callback.

A recorded call that *failed* is a separate case and is not an exclusion: when the
archived return is non-zero and replay reproduces the same error, that is the faithful
outcome and the dispatcher reports it as such instead of as a handler failure.

## Relationship to Original HRR Code

Expand Down
8 changes: 7 additions & 1 deletion projects/hrr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,13 @@ the next event, so the divergence is confined to the launch under examination.
| `HIP_HRR_REPLAY_NO_RESCAN` | off | Disable suballoc pointer rescan at replay |
| `HIP_HRR_PTR_RELAX` | off | Disable replay-side stale-pointer guard (debug only) |
| `HIP_HRR_REPLAY_FORCE_EXT_CIJK` | off | Force external Cijk kernel binding workaround (debug) |
| `HIP_HRR_REPLAY_DUMP_PTRS_ORDINAL` | `0` | Dump pointer translation map at event ordinal `N` (debug) |
| `HIP_HRR_REPLAY_DUMP_PTRS_ORDINAL` | `0` | Dump pointer translation map, and the allocation each argument lands in, at kernel ordinal `N` (debug) |
| `HIP_HRR_REPLAY_SCAN_ARGS_ORDINAL` | `0` | Before kernel `N`, read back each pointer argument's allocation and report words that are recorded addresses (debug) |
| `HIP_HRR_REPLAY_SCAN_ARGS_BYTES` | `4096` | Per-allocation cap for the argument scan |
| `HIP_HRR_REPLAY_SCAN_H2D` | off | Report recorded addresses inside replayed H2D payloads (debug) |
| `HIP_HRR_REPLAY_AUDIT_HOST_ARGS` | off | Report kernels taking a pointer into host memory, whose contents replay cannot restore (debug) |
| `HIP_HRR_REPLAY_FILL_BYTE` | `0` | Byte to fill fresh allocations with; set it to e.g. `0xa5` to expose kernels reading memory nothing wrote (debug) |
| `HIP_HRR_REPLAY_EXPLAIN_ADDR` | unset | At the scan ordinal, report whether an address is recorded, live, or neither, and whether the GPU can read it (debug) |

### D2H validation

Expand Down
Loading
Loading