Skip to content

test(integration-tests): re-tier integration bundles per op and make tier cascading explicit - #13198

Merged
adickin-amd merged 8 commits into
developfrom
users/addickin/retier_integration_bundles
Oct 13, 2026
Merged

adickin-amd merged 8 commits into
developfrom
users/addickin/retier_integration_bundles

Conversation

@adickin-amd

@adickin-amd adickin-amd commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Re-distributes the existing integration-test bundle cases across quick/standard/comprehensive/full so every op has its own cover of its option axes at each tier, and makes tier cascading explicit in every provider's category YAML (standard = quick+standard, comprehensive = quick+standard+comprehensive, full = everything). No test is added, removed or modified. Builds on #13089 (merged), which made large bundle suites fast enough to iterate on tiers.

JIRA ID : ALMIOPEN-2851

Partially addresses the ticket: still open are the README tier rules / per-op axis checklist and the coverage-gap report with its Jira issues.

Risk Assessment

Risk 3. Test-infrastructure and test-data only, no product code, but it changes which tests every provider lane selects per tier and moves 5,452 of 10,807 bundle cases. Residual risk is higher until the multi-arch run below passes.

Two behavior changes to be aware of:

  • Nightly selection shrinks. comprehensive no longer runs full_*. The nightly set goes from all 10,807 bundle cases to 4,720 (quick 489 + standard 2,737 + comprehensive 1,494); the other 6,085 run only in full. This is the ticket's target model. This repo's superbuild CI runs plain ctest --test-dir build (all suites), but label-driven lanes (TheRock / rocm-npi-dev) are outside this tree and should be checked by their owners.
  • CPU-reference coverage of SDPA shrinks. K_CPU_TIER_PREFIX = "quick_" (ReferenceOpCoverage.cpp) limits the golden-data CPU cross-check of Sdpa bundles to quick, so SDPA bundles that left quick are checked by the GPU reference only. Harness behavior is unchanged; whether to widen the cap is a decision for the owners.

ASIC Coverage

Arch-independent mechanism, behavior-shifting selection: what runs in the quick/standard/comprehensive lanes changes on every arch. Moved cases keep their own per-engine/arch support claims. Passing PR CI is not sufficient: a multi-arch run is required, because locally only gfx1151/Windows with MIOPEN_ENGINE and HIP_MLOPS_ENGINE executed tests; HIPBLASLT_ENGINE, ASM_SDPA_ENGINE and Reduction skip every case there, and per-arch claims differ by tier directory for Layernorm and RMSNorm.

Testing Summary

  • Case/identity conservation: --gtest_list_tests before vs after lists 10,886 tests both, identical names modulo tier prefix. The tool re-reads the tree from disk and proves, per case, that expanded graph, metadata, tensor_patches, golden pointer and support claims are identical (all 10,807 cases).
  • Reproducibility: retier_bundles.py (commit 1) applied to the pre-change tree with the same assignments produces the bundle tree in commit 2.
  • Cascade: for MIOPEN, HIPBLASLT, HIP_MLOPS and ASM_SDPA, each tier suite's selection satisfies quick < standard < comprehensive < full; comprehensive contains no full_* test; ctest -L <tier> --no-tests=error -N is non-empty for all three providers.
  • Per-op/per-tier runtime measured on gfx1151/Windows (on the perf(integration-tests): cut startup, memory growth and input-generation cost #13089 head before it merged; no C++ differs, the bundle tree is re-derived on develop and re-verified: identical test list, cascade check, tool self-test): MIOPEN cumulative 18 s / 44 s / 79 s / 137 s; HIP_MLOPS 41 s / 6.1 min / 12.7 min / 20.9 min (budgets 5 / 30 / 60 min). One non-reproducible flake in full_LayernormBackward (passes alone on baseline and after, and on a full re-run).

Testing Checklist

  • hipdnn_integration_tests unit tests - hipdnn_integration_tests_unit_tests - Status: Passed (922)
  • Migration tooling self-test incl. new retier_bundles test - python3 migration-scripts/test_migration.py - Status: Passed (15/15)
  • *_test_name_validation with the ROCm bin on PATH - ctest -R test_name_validation -V - Status: Passed (0 invalid names)
  • Bundle and support-claim verifiers - scripts/verify_support_claims.py, reference-data-scripts/verify_golden_bundles.py - Status: Passed (same pre-existing findings as baseline)
  • External integration per op x tier, MIOPEN_ENGINE and HIP_MLOPS_ENGINE - hipdnn_integration_tests --test-engine <E> --gtest_filter=<tier>_<Op>_* - Devices: gfx1151 (Windows) - Status: Passed (1 flake, see above). After commit 5, quick_*:standard_* passes on both engines (0 failures; 43.6 s MIOPEN, 368 s HIP_MLOPS wall).
  • Multi-arch sweep - TheRock multi-arch CI - run 37531786548 (head 05ead89, before commit 5) - Status: Partial. External-integration suites passed on Linux gfx90a/gfx94X/gfx1150/gfx110X/gfx120X and Windows gfx1151. Failures were GPU event timing on Linux gfx1151/gfx1153, a gfx1153 SDPA golden-data hang, rocke hipcc environment errors, and a Windows hipBLASLt test binary that would not start; none depends on the tier layout. gfx950 and Windows gfx120X did not run; gfx1030 timed out.
  • hipBLASLt / ASM_SDPA / gfx950 attention lanes - Status: Pending
  • PR CI - GitHub PR checks - Status: Pending

Technical Changes

Review the commits separately: 2 and 5 are generated data, 1/3/4 are the hand-written changes.

  • Commit 1: migration-scripts/retier_bundles.py (+ README section, self-test): moves cases between tiers from an assignment file and verifies per-case equivalence after writing.
  • Commit 2 (re-tier): bundle tree re-tiered at case granularity with that tool. Fused-pointwise graph templates are unified to the placeholder form with explicit attributes so cases can share a sweep. 11 cases stay in quick because code/tests reference them by tier-qualified name or path (knownReferenceGaps, hip_flash2 golden-ref tests, TestVerificationPaths, TestLoadGraphAndTensors). Tier-prefixed TOML tolerance filters are made tier-agnostic.
  • Commit 3: the SDPA golden/regenerate scripts write each bundle to the tier that holds it instead of recreating the old quick/standard dirs.
  • Commit 4: category YAMLs (miopen, hipblaslt, hip-kernel x3, shared) make the cascade explicit; comprehensive no longer runs full_* and the obsolete full_Layernorm_* carve-out is removed; CTest timeouts set to 2x tier budgets; Gfx950 GTEST_FILTERs cover all tiers; two stale miopen ffm-quick ids replaced; shared YAML enables comprehensive/full for the lowercase golden-data tests only.
  • Commit 5 (promote fast cases): using per-case gtest times from multi-arch run 37531786548, every comprehensive case whose slowest run on any platform is <= 200 ms moves to standard (1,137 cases; <= 7.4 s extra per engine on the worst platform). Eight 3D convolution cases (zero padding, padding 2, dilation 2, grouped), the only axis values quick lacked, move to quick. Same tool and the same per-case equivalence proof.

…tiers

JIRA ID : ALMIOPEN-2851

The bundle re-tier in this PR was produced by this tool, so reviewers can
reproduce it and the next re-tier does not need a one-off script. It moves
existing sweep cases and single-graph bundles between tier directories from an
assignment file, and after --apply re-reads the tree and proves per case that
the expanded graph, metadata, tensor_patches, golden pointer and per-engine
support claims are identical before and after.

Self-test added to test_migration.py: refusal of an unassigned case and of a
duplicate id in one sweep, template unification (a literal moving into a
placeholder template becomes an explicit attribute), claim regrouping, and
single-bundle moves.
JIRA ID : ALMIOPEN-2851

Redistribute the existing bundle cases across quick/standard/comprehensive/full
so each op has its own cover of every option axis at every tier. No case is
added, removed or modified: 10,807 cases before and after, and the set of test
identities modulo tier prefix is identical (gtest_list_tests before/after).
Produced with migration-scripts/retier_bundles.py, which re-reads the tree after
writing and proves per case that the expanded graph, metadata, tensor_patches,
golden pointer and per-engine support claims are unchanged.

- Cases move between tier dirs at case granularity (sweep.json cases and
  single-graph bundle dirs); golden pointers and per-engine support claims move
  with their case.
- Fused-pointwise graph templates are unified to the placeholder form
  (relu_* clips, LayernormBackward normalized_dim_count) so quick-origin and
  full-origin cases can share a sweep; affected cases carry explicit attributes.
- 11 cases stay in quick because code and tests reference them by
  tier-qualified name or path, and moving them would change harness behaviour
  or silently skip tests: the SDPA known-reference-gap bundles
  (ReferenceOpCoverage.cpp knownReferenceGaps; its CPU lane is also gated to
  quick_ bundles), the hip_flash2 golden-reference tests, the TestVerificationPaths
  sweep cases and the TestLoadGraphAndTensors bundle.
- Tier-prefixed tolerance filters in MIOPEN_ENGINE.toml and
  HIPBLASLT_ENGINE.toml are made tier-agnostic.
…hat holds them

JIRA ID : ALMIOPEN-2851

generate_golden_data.sh and regenerate_bundles.sh hard-coded the old
quick/standard output dirs, so regenerating after the re-tier would have
recreated the moved bundles next to the real ones. generate_bundle() now
resolves the tier that already holds "<outdir>/<name>" and falls back to the
tier named in outdir for a bundle that exists nowhere yet.
…ry YAML

JIRA ID : ALMIOPEN-2851

Tiers cascade: standard runs quick + standard, comprehensive runs quick +
standard + comprehensive, full runs everything.

- miopen, hipblaslt, hip-kernel (HIP_MLOPS, ASM_SDPA, Gfx950AttentionDense)
  test_categories_integration.yaml: comprehensive no longer pulls in the
  full-tier bundles (full_*); it selects quick_*, standard_* and
  comprehensive_* (plus the C++ tier prefixes). "full" still runs everything.
  The full_Layernorm_* carve-out in the HIP_MLOPS file is removed, it only
  existed because comprehensive ran full_*.
- Shared integration-tests/test_categories.yaml: enable the comprehensive and
  full categories for the lowercase golden-data tests (the PascalCase
  Comprehensive*/Full* GPU-reference cases stay disabled) and make the labels
  cumulative.
- CTest category timeouts set to 2x the tier runtime budgets (standard 3600 s,
  comprehensive 7200 s); quick kept where it carried a documented workaround.
- hip-kernel Gfx950AttentionDense GTEST_FILTERs now cover every tier of the
  SdpaFwd bshd bundles.
- miopen ffm-quick ids that left the quick tier replaced by quick-tier cases.

Verified by listing each generated CTest suite's selection per engine:
quick < standard < comprehensive < full, comprehensive contains no full_* test.
…, close quick 3D conv gap

JIRA ID : ALMIOPEN-2851

Uses per-case gtest times from the multi-arch CI run (37531786548): every
comprehensive case whose slowest run on any platform is <= 200 ms moves
to standard (1137 cases, <= 7.4 s extra per engine on the worst platform).
Eight 3D convolution cases (zero padding, padding 2, dilation 2, grouped)
move to quick, the only axis values quick lacked.

Moved with migration-scripts/retier_bundles.py; per-case graph, metadata,
golden pointer and support claims are verified identical before and after.
Conflicts:
- HIP_MLOPS_ENGINE_test_categories_integration.yaml: keep the cascaded
  comprehensive tier (no full_*), which makes develop's full_Layernorm*
  carve-out (#13180) unnecessary.
- hip-kernel-provider/src/integration_tests/CMakeLists.txt: keep the
  all-tier GTEST_FILTER and take develop's ENVIRONMENT_MODIFICATION (#12804).
@therock-pr-bot

therock-pr-bot Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
📝 PR Description ✅ Pass —
⛔ Forbidden Files ✅ Pass —
🧪 Unit Test ✅ Pass —
🔎 pre-commit ✅ Pass —
🚫 Draft PR 🔜 To Be Enabled —
🚩 Feature Flag 🔜 To Be Enabled —
📊 Code Coverage 🔜 To Be Enabled —
🤖 therock-pr-bot ✅ Pass —

🎉 All checks passed! This PR is ready for review.

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@therock-pr-bot

therock-pr-bot Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

🎉 All checks passed! This PR is ready for review.

@adickin-amd
adickin-amd marked this pull request as ready for review October 8, 2026 16:06
@adickin-amd
adickin-amd requested review from a team as code owners October 8, 2026 16:06
…ier_integration_bundles

# Conflicts:
#	dnn-providers/hip-kernel-provider/hipkernel_Gfx950AttentionDense_test_categories_integration.yaml
#	dnn-providers/hip-kernel-provider/src/CMakeLists.txt
#	dnn-providers/hip-kernel-provider/src/integration_tests/CMakeLists.txt
#	dnn-providers/integration-tests/integration-test-bundles/comprehensive/SdpaFwd/bshd/bf16/hd128_causal_gqa/Small.json
#	dnn-providers/integration-tests/integration-test-bundles/comprehensive/SdpaFwd/bshd/bf16/hd128_causal_gqa/Small.support.json
#	dnn-providers/integration-tests/integration-test-bundles/comprehensive/SdpaFwd/bshd/fp16/hd128_causal_mha/Small.json
#	dnn-providers/integration-tests/integration-test-bundles/comprehensive/SdpaFwd/bshd/fp16/hd128_causal_mha/Small.support.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_causal_mha/Prefill.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_causal_mha/Prefill.support.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_nomask_bm128/Prefill.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_nomask_bm128/Prefill.support.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_nomask_gqa/Prefill.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd128_nomask_gqa/Prefill.support.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd64_causal_gqa/Small.json
#	dnn-providers/integration-tests/integration-test-bundles/full/SdpaFwd/bshd/bf16/hd64_causal_gqa/Small.support.json
#	dnn-providers/integration-tests/integration-test-bundles/quick/SdpaFwd/bshd/fp16/hd128_causal_crossattn/Prefill.json
#	dnn-providers/integration-tests/integration-test-bundles/quick/SdpaFwd/bshd/fp16/hd128_causal_crossattn/Prefill.support.json
#	dnn-providers/integration-tests/integration-test-bundles/standard/SdpaFwd/bshd/bf16/hd128_causal_mha/Small.json
#	dnn-providers/integration-tests/integration-test-bundles/standard/SdpaFwd/bshd/bf16/hd128_causal_mha/Small.support.json
#	dnn-providers/integration-tests/integration-test-bundles/standard/SdpaFwd/bshd/fp16/hd64_causal_gqa/Small.json
#	dnn-providers/integration-tests/integration-test-bundles/standard/SdpaFwd/bshd/fp16/hd64_causal_gqa/Small.support.json

@bghimireamd bghimireamd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall the PR looks good! Did not see any missing tests and the number of tests before and after matched.

…ecar form

retier_bundles.py ordered claim groups by arrival and used plain json.dumps, so 22 re-tiered support.json files did not round-trip through support_sidecar.py (hipdnn_support_sidecar_python_tests). Render them with support_sidecar.render instead and re-render the 22 files; claims are unchanged.
bghimireamd added a commit that referenced this pull request Oct 9, 2026
…laims (ALMIOPEN-2332)

RFC 0015 §11 renderer, ported onto current develop. render_support_matrix.py
joins every committed support sidecar to its graph and emits a combined
markdown (or JSON) matrix of engine x (arch, platform) verdicts, with a
committed overview kept fresh by a pre-commit check. bundle_discovery.py
mirrors BundleDiscovery.hpp so the Python tools and the C++ harness agree
on what a bundle is.

The matrix is independent of bundle tiers, which move (ALMIOPEN-2851,
retier_bundles.py). Tier and op come from the path (<tier>/<op>/...), with
no tier or op names hardcoded. A unit's identity is its path below the tier
plus case id (sweeps) or graph file (single bundles); copies in several
tiers merge into one unit with claims unioned and every tier listed, and
copies holding different graphs are an error, as are orphaned sidecars.
Rendering develop's tree and the #13198 retiered tree gives identical
output apart from tiers.

Co-Authored-By: Claude <noreply@anthropic.com>
@adickin-amd

Copy link
Copy Markdown
Contributor Author

bghimireamd added a commit that referenced this pull request Oct 9, 2026
…laims (ALMIOPEN-2332)

RFC 0015 §11 renderer, ported onto current develop. render_support_matrix.py
joins every committed support sidecar to its graph and emits a combined
markdown (or JSON) matrix of engine x (arch, platform) verdicts, with a
committed overview kept fresh by a pre-commit check. bundle_discovery.py
mirrors BundleDiscovery.hpp so the Python tools and the C++ harness agree
on what a bundle is.

The matrix is independent of bundle tiers, which move (ALMIOPEN-2851,
retier_bundles.py). Tier and op come from the path (<tier>/<op>/...), with
no tier or op names hardcoded. A unit's identity is its path below the tier
plus case id (sweeps) or graph file (single bundles); copies in several
tiers merge into one unit with claims unioned and every tier listed, and
copies holding different graphs are an error, as are orphaned sidecars.
Rendering develop's tree and the #13198 retiered tree gives identical
output apart from tiers.

Co-Authored-By: Claude <noreply@anthropic.com>
bghimireamd added a commit that referenced this pull request Oct 10, 2026
…laims (ALMIOPEN-2332)

RFC 0015 §11 renderer, ported onto current develop. render_support_matrix.py
joins every committed support sidecar to its graph and emits a combined
markdown (or JSON) matrix of engine x (arch, platform) verdicts, with a
committed overview that CI keeps fresh. bundle_discovery.py
mirrors BundleDiscovery.hpp so the Python tools and the C++ harness agree
on what a bundle is.

The matrix is independent of bundle tiers, which move (ALMIOPEN-2851,
retier_bundles.py). Tier and op come from the path (<tier>/<op>/...), with
no tier or op names hardcoded. A unit's identity is its path below the tier
plus case id (sweeps) or graph file (single bundles); copies in several
tiers merge into one unit with claims unioned and every tier listed, and
copies holding different graphs are an error, as are orphaned sidecars.
Rendering develop's tree and the #13198 retiered tree gives identical
output apart from tiers.

The renderer and bundle-discovery pytest suites are registered as ctests,
so hipdnn-superbuild-ci runs them on every dnn-providers/ change. They
include real-tree checks: the full matrix renders and the committed overview
matches a fresh render. Those checks carry the bundle data, because the
top-level pre-commit exclude hides integration-test-bundles/ from every
hook; the pre-commit hooks give quick feedback on script changes.

Co-Authored-By: Claude <noreply@anthropic.com>
bghimireamd added a commit that referenced this pull request Oct 10, 2026
…laims (ALMIOPEN-2332)

RFC 0015 §11 renderer, ported onto current develop. render_support_matrix.py
joins every committed support sidecar to its graph and emits a combined
markdown (or JSON) matrix of engine x (arch, platform) verdicts, with a
committed overview that CI keeps fresh. bundle_discovery.py
mirrors BundleDiscovery.hpp so the Python tools and the C++ harness agree
on what a bundle is.

The matrix is independent of bundle tiers, which move (ALMIOPEN-2851,
retier_bundles.py). Tier and op come from the path (<tier>/<op>/...), with
no tier or op names hardcoded. A unit's identity is its path below the tier
plus case id (sweeps) or graph file (single bundles); copies in several
tiers merge into one unit with claims unioned and every tier listed, and
copies holding different graphs are an error, as are orphaned sidecars.
Rendering develop's tree and the #13198 retiered tree gives identical
output apart from tiers.

The renderer and bundle-discovery pytest suites are registered as ctests,
so hipdnn-superbuild-ci runs them on every dnn-providers/ change. They
include real-tree checks: the full matrix renders and the committed overview
matches a fresh render. Those checks carry the bundle data, because the
top-level pre-commit exclude hides integration-test-bundles/ from every
hook; the pre-commit hooks give quick feedback on script changes.

Co-Authored-By: Claude <noreply@anthropic.com>
@adickin-amd

Copy link
Copy Markdown
Contributor Author

Workflow run summary
image

There is no way to trigger a comprehensive test run via the workflow so it defaulted to quick. Will need to watch the nightly CI to check for any failures.

@mousdahl-amd mousdahl-amd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, had a closer look at new code (retier_bundles.py) but nothing earth-shattering came up.

@adickin-amd
adickin-amd merged commit 0025266 into develop Oct 13, 2026
687 of 707 checks passed
@adickin-amd
adickin-amd deleted the users/addickin/retier_integration_bundles branch October 13, 2026 16:44
yassinsolim added a commit that referenced this pull request Oct 13, 2026
Resolve the SdpaBackward quick sweep conflict with #13198. Keep develop's
re-tiered cases and give each case's stats tensor the rank-4 shape this
branch uses (append 1 to its dims and strides). Applying the same transform
to the merge base reproduces this branch's file byte for byte.
@assistant-librarian

Copy link
Copy Markdown
Contributor

TheRock Submodule Bump Activity

Newest first

adickin-amd added a commit that referenced this pull request Oct 14, 2026
Conflicts in the three provider test_categories_integration.yaml files:
take develop (#13198 re-tiered bundles and removed full_* from the
comprehensive tier), which supersedes this branch's earlier change.

Restore the RMSNorm runtime_epsilon claim groups in the four
quick/RMSNorm support.json files: #12932 restored the case in the sweeps,
so the claims are no longer stale.

Update running-tests.md for the new comprehensive tier contents and the
ASM_SDPA lane, and note HIPDNN_LOG_GRAPH_DIR as a graph source in
adding-tests.md.
bghimireamd added a commit that referenced this pull request Oct 15, 2026
Conflicts: quick/BatchnormBackward/Default/sweep.json and
quick/BatchnormPointwise/Default/sweep.json. Develop's re-tier (#13198)
moved most cases out of quick; this branch had only removed one case from
each file. Resolved as develop's file minus that case: runtime_epsilon
(tensor uids 6-7, template holds 0-5) and runtime_epsilon_momentum
(uids 8-12, template holds 0-7) still cannot load against develop's
templates.

Co-Authored-By: Claude <noreply@anthropic.com>
bghimireamd added a commit that referenced this pull request Oct 19, 2026
Resolve conflicts with #13198 and #11956: keep develop's generator
default and missing-reference_source warning after the sidecar read,
update docs/adding-tests.md for sidecar handling, and expect the
generator key in the no-sidecar test.

Co-Authored-By: Claude <noreply@anthropic.com>
adickin-amd added a commit that referenced this pull request Oct 21, 2026
…d remove covered C++ tests (#13418)

## Summary
Ports the last C++ graph-test cases that had no bundle equivalent
(batchnorm "Upcast", standalone unary activation) into bundles, then
deletes the C++ graph tests that bundles now fully cover. Stacked on
#13198 (re-tier); the base branch is that PR's head.

JIRA ID : ALMIOPEN-2349

## Risk Assessment
Risk 2. Test data, test-harness tolerance mapping and test-source
removal only, no product code. New bundle cases are additive; the C++
graph tests removed do not build by default
(`BUILD_CPP_GRAPH_TESTS=OFF`), so CI never ran them. Residual risks:
- The new cases add 462 tests across quick/standard/comprehensive/full
on every provider lane (432 Upcast/Activation + 30 NCHW/NCDHW
batchnorm-backward).
- The removed tests' parameter counts were matched to bundles by capture
provenance, not re-derived.
- `ResampleFwd` bundle cases now resolve their tolerance per dtype (fp32
1e-5, fp16 1e-3, bf16 1e-2; the deleted C++ test's values) instead of
the 1e-3 fallback. fp32 is 100x tighter on every provider lane that runs
them. Verified on gfx942 only.

## ASIC Coverage
Arch-independent mechanism. Behavior-shifting selection: every arch's
lanes gain the new cases and the ResampleFwd tolerance change. Executed
so far: gfx942 (Linux, mi300x) and gfx1151 (Windows). hipBLASLt,
ASM_SDPA, gfx90a, gfx950 and gfx12 were not run, so a multi-arch run is
recommended before merge (the Upcast cases skip on engines that decline
output-widening graphs, so skip counts per arch should be checked).

## Testing Summary
- **gfx942 (mi300x, Linux), quick tier (`ctest -L quick`)**: 39/39
passed, including `*_test_name_validation` for hipdnn,
hipdnn-integration-tests and miopen-provider.
- **New Upcast + Activation cases, all tiers, gfx942**: 
- HIP_MLOPS_ENGINE: 200 pass, 232 skip, 0 fail. The 232 skips are 72
`Pointwise/Activation` (no standalone pointwise) + 160 Upcast (1D and
other declined cases). Upcast pass/skip by tier: quick 22/10, standard
100/46, comprehensive 22/16, full 56/88. So HIP_MLOPS executes 78 of the
182 full/comprehensive Upcast cases.
- MIOPEN_ENGINE: 72 `Pointwise/Activation` pass; all 360 Upcast skip
(engine declines them). 0 fail.
- gfx1151/Windows (earlier run): same pass/skip counts for the 432
cases.
- **New NCHW/NCDHW batchnorm-backward cases (30)**, MIOPEN_ENGINE,
gfx942: 62/62 passed (30 new + their NHWC/NDHWC siblings + the ConvWrw
large-values case), no skips.
- **ResampleFwd**, HIP_MLOPS_ENGINE, gfx942: 48/48 pass at the new
per-dtype tolerances. MIOPEN_ENGINE skips all 48 (not supported).
- `TestToleranceResolver.*`: 11/11 pass. 
- Build with `-DBUILD_CPP_GRAPH_TESTS=ON` after the deletions configures
(orphan/allow-list checks pass) and `hipdnn_integration_tests` and
`hipdnn_integration_tests_unit_tests` build; unit tests pass (993, 4
skipped, 0 failed).
- Bundle and migration tooling verifiers pass
(`verify_golden_bundles.py` finding counts unchanged from base;
`test_migration.py` 15/15).
- Filter match counts checked with `--gtest_list_tests` on gfx942:
CalcStats3d override 3, RMSNormBackward skip 12 (Default + Variant2),
SDPA backward tolerance 8 fp16 + 8 bf16.

## Testing Checklist
- [x] hipdnn_integration_tests unit tests -
`hipdnn_integration_tests_unit_tests` - Status: Passed (993, 4 skipped)
- [x] Migration tooling self-test - `python3
migration-scripts/test_migration.py` - Status: Passed (15/15)
- [x] Support-claim verifier - `scripts/verify_support_claims.py` -
Status: Passed
- [x] Bundle verifier -
`reference-data-scripts/verify_golden_bundles.py` - Status: no new
findings (pre-existing findings elsewhere)
- [x] Quick tier - `ctest -L quick` - Devices: gfx942 (Linux) - Status:
Passed (39/39)
- [x] New bundles, MIOPEN_ENGINE and HIP_MLOPS_ENGINE -
`hipdnn_integration_tests --test-engine <E>
--gtest_filter='*_upcast:*Pointwise_Activation*'` - Devices: gfx1151
(Windows), gfx942 (Linux) - Status: Passed (0 failures; see skips above)
- [x] New NCHW/NCDHW batchnorm-backward cases and ConvWrw large-values
case - MIOPEN_ENGINE - Devices: gfx942 - Status: Passed (62/62)
- [x] ResampleFwd per-dtype tolerance - HIP_MLOPS_ENGINE - Devices:
gfx942 - Status: Passed (48/48)
- [x] `*_test_name_validation` - Devices: gfx942 (Linux superbuild) -
Status: Passed (the Windows check was not re-run)
- [ ] Multi-arch sweep - TheRock multi-arch CI - Status: Pending
- [ ] PR CI - GitHub PR checks - Status: Pending

## Technical Changes
- **Ported cases**: 360 Upcast cases (fp16/bf16 in, fp32 out) appended
to the `BatchnormInference`, `...VarianceExt`, `...Pointwise` and
`...VarianceExtPointwise` sweeps, in the same tier as the same-shape
non-upcast case (ids end `_upcast`). New `Pointwise/Activation` topology
(relu, relu6, clamp, leaky, sigmoid, tanh x NCHW/NHWC x fp32/fp16), one
shape per tier in quick, standard and comprehensive. Graphs derived from
existing cases and the C++ case generators, not captured.
- **Removed C++**: the C++ graph tests whose cases are all bundled, the
shared test-case headers nothing else includes, and their CMake
registration. Kept: conv serialize round-trip, `is_supported_ext`
timing, resample backward and MoE grouped matmul (need input-fill
recipes; ALMIOPEN-2880, ALMIOPEN-2881), and the SDPA forward and chained
tests.
- **Provider TOML**:
- Dropped overrides that matched only deleted C++ names and whose cases
are already covered by bundles.
- Retargeted to bundle names: the MIOPEN BatchnormBackward 3D tolerance
override (`*_BatchnormBackward_Default.1_16_8_112_112_*_ncdhw`), the
HIP_MLOPS RMSNormBackward Pure-bf16 skip (now covers Default and
Variant2), the HIP_MLOPS Layernorm backward dtype entries, and the
ASM_SDPA SdpaBwd tolerance overrides (`*_SdpaBackward_*.*_fp16_*` /
`*_bfp16_*`).
- Removed, not retargeted: the MIOPEN #6979 CBA skip and the hipBLASLt
#8033 gfx12 skip. Retargeted to bundle names they became sweep-wide
skips that hid cases the support-claim sidecars say pass on
RDNA/gfx1200. They matched no bundle case at the base, so behavior is
unchanged; unsupported cases skip on their own and claim regressions
still fail.
- **Coverage restored after review**: 30 NCHW/NCDHW cases (`1_4_2_2` and
`2_3_2_4_4`, fp32/fp16/bf16) in `BatchnormBackward` Default and Variant2
and `BatchnormInferencePointwiseBatchnormBackward`, which the deleted
C++ suites ran in both layouts; and the [-10, 10] input range
(`metadata.inputs`) on the ConvWrw large-values case.
- **Harness**: `ToleranceResolver` maps `ResampleFwdAttributes` to
`resample::getTolerance<T>()` (it fell through to 1e-3 before), with a
unit test.
- **Docs**: README notes updated; tracker IDs removed from committed
docs.
- Layernorm backward `fp16_`/`bfp16_` filters also match Mixed/Upcast
cases (the dtype tag is the input dtype). This predates the PR; a
dtype-aware override is tracked separately.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants