Skip to content

[DO NOT REVIEW] Drop null problem-cache sentinels on load, keep in-run dedup (gpuep-rel-2610) - #5207

Closed
danieyan-amd wants to merge 1 commit into
gpuep-releases/gpuep-rel-2610from
problem-cache-null-drop-2610
Closed

[DO NOT REVIEW] Drop null problem-cache sentinels on load, keep in-run dedup (gpuep-rel-2610)#5207
danieyan-amd wants to merge 1 commit into
gpuep-releases/gpuep-rel-2610from
problem-cache-null-drop-2610

Conversation

@danieyan-amd

Copy link
Copy Markdown
Contributor

Problem

A null mark() entry in the problem cache is a transient, in-run "benchmark in progress" sentinel. It was stored in the same map that is persisted to disk, so a null that never got overwritten (a failed or interrupted benchmark) could be persisted, shipped, and re-loaded. On the next run get() returned that stale null and the op was skipped forever, leaving it unresolved → 0xC0000005 / "No valid tuned compilation" (AIRADSW-871, BERT pooler on Navi48/gfx1201). Deleting problem_cache.json cleared the nulls and worked around it.

Fix

Drop null sentinels at the load boundary in the json and sqlite backends, so a persisted or shipped null can never come back. The in-run dedup is unchanged: get() still returns the in-memory mark(), and compile_ops skips on a null so a repeated problem is benchmarked once, not once per instruction. Also guards is_module_fusible against a null or non-string solution.

This is the gpuep-rel-2610 counterpart of develop PR #5204. It supersedes #5201, which treated a null as a cache miss — that fixed the crash but removed the in-run dedup and re-benchmarked a repeated problem once per instruction (raised in review).

Tests

Backend round-trip tests updated: a null sentinel no longer survives save/load (real solutions still do).

Note: not built on this box (the 2610 build needs MIOpen, not installed here). The identical change is build- and test-verified on develop #5204 — reduced MLIR-off gfx1100 build, all four problem-cache test binaries pass — and CI validates here.

A null mark() sentinel is a transient in-run 'benchmark in progress' signal that compile_ops relies on to benchmark a repeated problem only once. It must not be persisted: a shipped or stale null that is re-loaded makes the op skip forever, leaving it unresolved (0xC0000005 / 'No valid tuned compilation', AIRADSW-871).

Drop null sentinels at the load boundary in the json and sqlite backends so a persisted null cannot come back, while the in-run dedup (get()/compile_ops) is unchanged. Also guards is_module_fusible against a null or non-string solution. Updates the backend round-trip tests (a sentinel no longer survives save/load).

Co-authored-by: Uros Petkov <[email protected]>
Signed-off-by: danieyan-amd <[email protected]>
@danieyan-amd
danieyan-amd requested a review from causten as a code owner August 27, 2026 22:38
@danieyan-amd
danieyan-amd deleted the problem-cache-null-drop-2610 branch August 27, 2026 22:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant