Repository navigation
fix(rocke): compare arch-domain baselines across compiler builds - #15025
tenpercent wants to merge 12 commits into
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues remain for the cross-build arch-domain validation update.
No open issues 🎉
What changed in this PR
This PR updates rocKE’s arch-domain validation to compare baselines across compiler builds within the same LLVM flavor. Compiler identity remains diagnostic provenance; measurement and other metadata differences still fail validation.
Changes:
- Remove the compiler-identity mismatch skip and exclude only
toolchain.clangfrom artifact comparison. - Add regression coverage for unchanged results, measurement drift, probe execution, and baseline immutability.
- Update the documented reproducibility and skip behavior.
| File | Description |
|---|---|
dnn-providers/hip-kernel-provider/rocke/TESTING.md |
Documents cross-build comparison and remaining skip conditions. |
dnn-providers/hip-kernel-provider/rocke/platform/tools/gen_arch_domain.py |
Compares measurements despite differing compiler identities. |
dnn-providers/hip-kernel-provider/rocke/platform/tests/tools/test_arch_domain_artifact.py |
Tests cross-build pass/fail behavior and applies mechanical formatting. |
Review effort: Balanced
✅ All Checks Passed — Ready for Review
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
|
🎉 All checks passed! This PR is ready for review. |
There was a problem hiding this comment.
🟡 Changes recommended
The artifact checker accepts missing required diagnostics, unusable compiler provenance, and invalid probe witnesses that can cause ArchDomain.lookup() to raise ValueError.
4 open issues
4 resolved since last review
Review effort: Max
Require nonblank compiler identities and negative diagnostics in both comparison columns. Reject present probe witnesses unless they are non-boolean integers on successful cells. Preserve cross-build support gains, diagnostic wording freedom, and the positive-witness equality guard. Add symmetric malformed-record regressions, CLI exit/immutability controls, and committed-artifact schema assertions. The new rejection tests reproduce the prior comparison gaps. Validation: 166 owner tests and 19444 subtests passed in each of 12 LLVM-profile/backend runs with a fresh native binding; 45 native CTests passed; real LLVM24 source and relocated support CTests passed; 28 real CLI controls passed without changing baselines.
|
Automated review: Model - qwen3.6:35b-a3b-coding-mtp-q4_K_M, effort: max PR #15025 — fix(rocke): compare arch-domain baselines across compiler builds (tenpercent, AICK-2970) — 🟠 First-round: rules duplicated, tests outside CI
Utility: 🟢 Positive — CI now checks the support floor instead of skipping the gate. Legend: 🔴 blocking · 🟠 should-fix · 🟡 minor nit · 🟢 info/good · ⚪ retracted First-round review: first pass by a local qwen3.6 model, verified by the orchestrator (Claude Opus 5.5). Checks: merge with develop, build + ctest, differential golden, changed tests (forced and unforced flavor), CI shard logs, the real gate on this host's llvm24 build, record probes and mutants, rule scan, code quality. Flags whether a closer look is needed; not an approval or rejection. |
|
Thanks for the review. Addressed N1/N2 and the accepted smaller suggestions in 9194745f2e16, keeping the follow-up to seven files.
Evaluation: all 12 source profile/backend runs passed with 173 tests and 19,457 subtests per run; full relocated The transition matrix, probe algorithm, runtime/emitter code, and committed baselines are unchanged. The existing relative-path-guard finding at |
|
Automated review: Model - qwen3.6:35b-a3b-coding-mtp-q4_K_M, effort: max PR #15025 — fix(rocke): compare arch-domain baselines across compiler builds (tenpercent, AICK-2970) — 🟡 Follow-up: fixes hold; CMake comment conflict
Utility: 🟢 Positive — policy tests now run in CI; one validator owns the record rules. Legend: 🔴 blocking · 🟠 should-fix · 🟡 minor nit · 🟢 info/good · ⚪ retracted Follow-up review: first pass by a local qwen3.6 model, verified by the orchestrator (Claude Opus 5.5). Checks: merge with develop (before and after 14811; conflict resolved and tested), build + ctest, differential golden, changed tests (installed tree too), CI shard logs, validator mutants, saved probes, rule scan, code quality. Flags whether a closer look is needed; not an approval or rejection. |
…erage Merge develop while keeping monotonic support tests in their installed module. Use architecture-specific fixtures in CLI controls and run the support-policy cases for gfx942 and gfx950.



Summary
Make arch-domain validation a monotonic support check rather than exact compiler-snapshot reproduction. Compiler identity remains diagnostic provenance, and an explicit transition matrix allows support gains while failing loss of previously working support.
JIRA ID : AICK-2970
This changes the comparison policy and its validation/test coverage only. It does not introduce per-compiler baseline storage, change runtime baseline selection, or re-bless any committed baseline. Related history: #14692 and #14328.
Context: hashes and baseline comparisons
clang --version, persisted intoolchain.clang.Neither compiler identity nor IR byte stability establishes numerical correctness. This PR changes neither numerical references nor their tolerances.
Risk Assessment
Risk level 3: this changes the pass/fail contract of a host-side compiler-validation gate. The changes are confined to comparison/validation tooling, tests, installation comments, and documentation. There is no kernel emission, runtime API, artifact-schema, or compiler-probe algorithm change. Host-only policy tests now join the existing installed
rocke_pytestentry; the dedicated compiler-sweep registration is unchanged.ASIC Coverage
The real-toolchain checks are offline compilation, linking, and target assembly—not GPU execution. Each full sweep covers 247 intrinsic keys × 18 targets = 4,446 cells.
The current head was replayed with the cached 2026-11-04 LLVM 24 installation reporting ROCm LLVM revision
36c1564ff815158e4fdff0880ba90b5d628aa045. The four-flavor test matrix exercises rocKE's software profiles and policies; it is not evidence that four real compiler majors were installed. No new numerical, performance, or blanket release qualification is claimed.Technical Changes
okcells must remainok, and accepted processor names must remain accepted.verified_on, usable compiler provenance, diagnostic evidence for non-okcells and rejected processors, and integer witnesses only onokcells. Diagnostic wording and canonical-name changes remain observations.--check. Reviewed gains need a separate baseline update to protect them from future loss and update runtime availability policy._validate_column()from cross-document comparison, while retaining independent structural assertions and malformed-input tests.probe_error, which the comparer treats as an invalid probe rather than reportable unqualified data.Testing Summary — current head
9194745f2e16both, with a fresh native binding: 173 tests and 19,457 subtests passed per run, zero skips across all 12 runs. The committed head was replayed successfully.rocke_pytestCTest passed with the source tree hidden: 9,725 passed, 1,063 skipped, 3 deselected, and 14,864 subtests passed. All 24 support-policy cases ran. Skipped cases remain uncovered.The relocated validation used the matching nightly COMGR/LLVM environment,
pytest-timeout2.4.0, andml_dtypes0.6.0. An initial broad run exposed missing dependencies and a mismatched COMGR; correcting the environment, without project-code changes, produced the passing result above. Provider-layout assets and verbatim CMake-generated test entries were exercised locally; this is not a claim of a full CI superbuild replay.Known unchanged limitation: the developer relative-path guard still flags the monorepo bundle reference at
platform/CMakeLists.txt:428. The prior head reproduces the same failure. It was left outside this seven-file follow-up, so a clean complete developerrun_all.pyverdict is not claimed.Historical validation
The earlier comparison-policy implementation was tested against seven cached nightly installations. These are prior-head results, not seven fresh sweeps of
9194745f2e16:9628a5b15b30be73e6533a1431f85926ea08de1e4208a88993d31a4311127ddae671ec6a6b1000c6e095f1b3becf0c1bfdc5e7647003d60976a2460be095f1b3becf0c1bfdc5e7647003d60976a2460b9fa7f0cb60bbe1b4f9e602b1bf12a94df7e53cf736c1564ff815158e4fdff0880ba90b5d628aa04536c1564ff815158e4fdff0880ba90b5d628aa045These existing ROCm-cache binaries report ROCm source revisions, but their original download/build provenance was not independently audited. Earlier third-party LLVM-fork runs are diagnostic only, not official ROCm qualification evidence.
The prior-head hipDNN Linux superbuild failure reported 186 passed and one failed. Its 87 changes were three BF16
gfx1250cells changingarch_absent -> okand 84 cells changingtoolchain_crash -> arch_absent, with no reported loss of working support. This is the gain/improvement scenario the new policy accepts.Testing Checklist
python -m pytest tests/tools/test_arch_domain_artifact.py tests/tools/test_arch_domain_support.py tests/tools/test_gen_arch_domain_cpp.py tests/tools/test_run_all.py -q -rsfromplatform/— passed with the fresh binding.python tools/gen_arch_domain.py --check --unvalidated-exit-code 77 --jobs 4— passed without filters or baseline writes.rocke_pytestCTest, source hidden — passed in the matching toolchain environment.