Skip to content

ci(hipdnn): run the IngestorGenerator and DescriptorGenerator pytest suites in superbuild CI - #13385

Merged
adickin-amd merged 20 commits into
developfrom
users/ggilbert/ALMIOPEN-2843/tooling-tests-in-superbuild-ci
Oct 22, 2026
Merged

adickin-amd merged 20 commits into
developfrom
users/ggilbert/ALMIOPEN-2843/tooling-tests-in-superbuild-ci

Conversation

@GarbyGilbertAMD

@GarbyGilbertAMD GarbyGilbertAMD commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The IngestorGenerator and DescriptorGenerator pytest suites never ran in the hipDNN superbuild lanes: the CI venv had no PyYAML or Jinja2, nothing registered them with ctest, and several of their tests skipped silently without their inputs. This runs both suites as ordinary ctest entries in the Linux and Windows superbuild jobs (not TheRock) under a small pytest plugin that fails any skip a test has not explicitly allowed, and replaces the packaging-probe junit check with a configure-time minimum.

JIRA ID : ALMIOPEN-2843

Risk Assessment

Risk 3 of 5: no product code changes, but a new gate lands in the superbuild lanes, so a regression in these tools can now turn them red, and a lane that discovers fewer packaging probes than it requires now fails at configure. The suites register behind HIPDNN_ENABLE_TOOLING_TESTS, which defaults to OFF and is enabled only in hipdnn-superbuild-ci.yml; the probe minimum defaults to 0 and only the two superbuild lanes set it. TheRock and developer builds are unchanged.

ASIC Coverage

Host-only: the tests drive Python generators and compile generated C++ with -fsyntax-only, and the probe check runs at configure time. No device code, dispatch default or support surface changes, so passing PR CI is sufficient.

Testing Summary

  • Both suites through ctest on Linux (ROCm container, the lane's flags, a built gfx942 packing tree) and on Windows. On Linux the ingestor suite also passes with no system C++ compiler on PATH, using only the compiler that builds the tree.
  • The plugin's own unit tests: a throwaway suite run with and without the plugin covers plain, skipif, fixture and module-level skips, xfail, and the allow_skip marker with and without a reason.
  • The packaging-probe minimum through real configures on Linux and Windows: it passes with the probes option ON, fails with a minimum above the declared count, and fails when set with the probes option OFF.

Testing Checklist

  • DescriptorGenerator suite under the plugin (Linux, Windows) - ctest -R hipdnn_descriptor_generator_pytest - Status: Passed (695, none skipped)
  • IngestorGenerator suite under the plugin (Linux, Windows) - ctest -R hipdnn_ingestor_generator_pytest - Status: Passed with rocm_kpack installed, as the lanes do
  • Plugin tests - python -m pytest projects/hipdnn/tools/IngestorGenerator/tests/test_strict_skips_plugin.py - Status: Passed (3)
  • Packaging-probe minimum (Linux, Windows) - configure with -DHIPKERNELPROVIDER_ENABLE_PACKAGING_PROBES=ON and -DHIPKERNELPROVIDER_MIN_PACKAGING_PROBES set to 1, 99, and 1 with the probes option OFF - Status: passes, fails, fails as intended
  • hkp-pack tests touched here (Linux, Windows) - python -m pytest tests -m quick in descriptor-packaging - Status: Passed
  • PR CI - GitHub PR checks - Status: Pending

Technical Changes

  • HIPDNN_ENABLE_TOOLING_TESTS registers the two suites as ctest tests (build tree only). Configure fails if pytest, PyYAML, Jinja2 or the kernel ingestor is missing, and the CI requirements file gains PyYAML and Jinja2.
  • hipdnn_strict_skips (projects/hipdnn/tools/pytest_plugins/) is a pytest plugin that turns any skipped or xfailed test into a failure. A skip that is correct by design opts out with @pytest.mark.allow_skip(reason=...) beside the code that skips: the POSIX-only sweep tests and the coverage-gate test that runs a shebang script. A skip raised while a module is imported fails the collection. Run by hand the plugin is not loaded, so tests skip as before.
  • The gates the lanes can satisfy now run: ctest supplies the validator binary, the flatbuffers/HIP include directories, and puts the directory of the compiler that builds the tree on the test PATH, so the native-stub tests need no separate C++ compiler. The DescriptorGenerator CLI tests use sys.executable, and its file lists use as_posix() (23 Windows failures before).
  • TestAgainstTheRealBuild is deselected in the ingestor ctest entry: it gates a build packed with the gfx950 attention engine, which neither lane packs.
  • HIPKERNELPROVIDER_MIN_PACKAGING_PROBES fails configure when probe discovery declares fewer probes than a lane requires, or when it is set without the probes option. Both superbuild lanes set it to 1 and run ctest with --no-tests=error, which replaces check_probe_junit.py, its tests and the manifest it read.
  • hkp-pack: test_specialization_agreement.py moves to the quick tier, and the worker sys.path tests no longer depend on HIPKERNELPROVIDER_ROCM_KPACK_DIR or pass vacuously where the default start method forks.

Related PRs

The IngestorGenerator and DescriptorGenerator pytest suites never ran in the superbuild lanes: the CI venv lacked PyYAML and Jinja2, and nothing registered them with ctest. Register both as ctest tests behind HIPDNN_ENABLE_TOOLING_TESTS, which is off by default and fails configure when pytest, PyYAML or Jinja2 is missing from the interpreter, and enable it in the Linux superbuild job.

ctest reports a suite whose every case skips as a pass, so check_pytest_junit.py reads the pytest junit and fails on any skip that hipdnn-tooling-allowed-skips.txt does not name, and on any allow-list entry that no longer matches a skip.

The gates that skipped for want of an input are closed where the build can supply it. ctest exports HIPDNN_VALIDATE_DESCRIPTORS for the round-trip tests and writes the flatbuffers and HIP include directories to a file named by HIPDNN_INGESTOR_STUB_INCLUDE_FILE for the native-stub tests, where a bad value now fails instead of skipping. The DescriptorGenerator CLI tests run under sys.executable instead of skipping without a local .venv, and the dispatch-parity tests fail, rather than skip, when the shipped profile names a module the in-tree rocKE does not provide.

ALMIOPEN-2843
…tier and make the sys.path probe self-contained

test_specialization_agreement.py needs neither hipcc nor comgr, so it belongs to the quick tier; the marker moves its 73 tests from the hkp-pack ctest entry to hkp-pack-quick.

test_worker_inherits_parent_sys_path watched HIPKERNELPROVIDER_ROCM_KPACK_DIR, which made it skip when the variable was unset and pass without checking anything when the directory was already a site-packages directory that the child sees regardless. It now prepends a directory it creates itself, so the premise holds in every environment.

ALMIOPEN-2843
…cKE dispatcher

The rocKE dispatcher replaced dense_spec_for_request and the dense_* request fields with opt-in dense candidates selected by algorithm and spec_id, so the shipped gfx950 dense profile named modules and fields that no longer exist and its dispatch-parity tests failed. The profile now selects the non-persistent grid body through a dispatch.pin and resolves it with dispatch_attention, and the reference-candidates family follows the new algorithm name.

dispatch_parity.py reads four optional keys from the profile's dispatch block. The pin is merged into every request and outranks the shape, so a shape cannot mix another kernel family into the catalog. The result_attr and spec_attr keys walk the dispatcher's return value down to the architecture's spec, and refusal_exception names the class the dispatcher raises to decline a shape, which is reported as a per-shape decline as the predicate's was. reconcile_applicability.py inherits the pin for its reference requests, since an opt-in candidate declines every request that does not name it.

The shipped-profile tests resolve through the tool and check that the grid body is non-persistent, that pinning the persistent body flips it, that a head size the body refuses is a decline, that a shape naming another candidate aborts, and that the reference oracle reaches the pinned candidate. The test that pinned dense_persistent as a YAML string is removed because the field no longer exists.

ALMIOPEN-2843
The renderers returned str(rel_path) for each file they wrote, which is a backslash path on Windows. The returned lists name files for downstream consumers and for the preview output, so a Windows run produced a different list than a Linux one. Use as_posix() so the lists are identical on every platform; all 695 DescriptorGenerator tests pass on Windows, where 23 failed before.

ALMIOPEN-2843
Enable HIPDNN_ENABLE_TOOLING_TESTS in the Windows job and check its junit with the same checker as the Linux lane. The flatbuffers and HIP include list is written on Windows as well, and the build's own clang++ directory is prepended to the ingestor test's PATH, since the native-stub tests look for g++ or clang++ there and the lane only puts the ROCm bin directory on PATH. The MSVC environment the lane already configures gives that clang its standard library headers.

check_pytest_junit.py accepts --allow-skips more than once and pools the lists, so the Windows lane adds its own entries to the shared ones; Linux reads only the shared list, where a Windows-only entry would be stale. The Windows list covers the sweep tests, which drive a benchmark on an allocated Linux device host by design.

ALMIOPEN-2843
Give the script the shape of its sibling: a shebang, a usage and exit-code section in the module docstring, type hints, and Path-typed arguments.

ALMIOPEN-2843
@therock-pr-bot

therock-pr-bot Bot commented Oct 9, 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 9, 2026 •

Copy link
Copy Markdown

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

@codecov

codecov Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #13385      +/-   ##
===========================================
- Coverage    75.95%   71.96%   -3.99%     
===========================================
  Files         2880     2885       +5     
  Lines       479003   478200     -803     
  Branches     71955    70691    -1264     
===========================================
- Hits        363791   344092   -19699     
- Misses       90349   110137   +19788     
+ Partials     24863    23971     -892     
Flag Coverage Δ *Carryforward flag
TensileLite-CPP 49.67% <ø> (+0.74%) ⬆️ Carriedforward from f7976bb
TensileLite-Unit 83.36% <ø> (-0.29%) ⬇️ Carriedforward from f7976bb
hipBLAS 90.62% <ø> (ø) Carriedforward from f7976bb
hipBLASLt 42.71% <ø> (-21.72%) ⬇️ Carriedforward from f7976bb
hipCUB 82.68% <ø> (ø) Carriedforward from f7976bb
hipDNN 86.79% <ø> (+<0.01%) ⬆️
hipFFT 42.52% <ø> (+0.51%) ⬆️ Carriedforward from f7976bb
hipRAND 76.12% <ø> (ø) Carriedforward from f7976bb
hipSOLVER 68.96% <ø> (-0.71%) ⬇️ Carriedforward from f7976bb
hipSPARSE 86.99% <ø> (ø) Carriedforward from f7976bb
rocBLAS 48.17% <ø> (-20.56%) ⬇️ Carriedforward from f7976bb
rocFFT 46.51% <ø> (-1.59%) ⬇️ Carriedforward from f7976bb
rocRAND 57.45% <ø> (+0.15%) ⬆️ Carriedforward from f7976bb
rocSOLVER 76.83% <ø> (+0.09%) ⬆️ Carriedforward from f7976bb
rocSPARSE 74.07% <ø> (-2.84%) ⬇️ Carriedforward from f7976bb
rocThrust 93.15% <ø> (ø) Carriedforward from f7976bb

*This pull request uses carry forward flags. Click here to find out more.
see 940 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

…s beside the suites

The allow-lists now live in projects/hipdnn/tools next to the tests they excuse and the ctest names they key on, so hipdnn-core maintains them and the list headers cite the KNOWN_BAD and KNOWN_VIOLATIONS rule that a list only shrinks. The Windows list names the eight sweep-test classes that carry the POSIX-only markers instead of the whole module, so a new environment-gated skip elsewhere in it still fails the check. The header example no longer uses a bracketed test id, which fnmatch reads as a character class.

HIPDNN_ENABLE_TOOLING_TESTS now fails configure when the kernel ingestor is off, because the IngestorGenerator suite runs the validator that option builds and registering only the other suite would leave it silently absent, and it says so when HIPDNN_SKIP_TESTS makes it a no-op.

The pin dialect of dispatch_parity.py gains tests that need no rocKE, covering the route-only guard, a missing attribute, a non-refusal exception staying fatal and a malformed refusal_exception. The provider-root lookup in the dispatch-parity tests goes through launch_surface.find_repo_root like the tool does, and two comments that described a lane and a try-block structure no longer true are dropped or reworded.

The two pool tests that check sys.path reaches a worker no longer pass vacuously on Linux, where the default start method forks and the child copies the parent's memory: they pin the pool to spawn, and the first drops an assertion that could not fail. The checker's tests use unittest like the rest of their directory and assert the exact failure ids, the counts in the OK line and the skip reason. In the dispatch-parity tests the pin-conflict case moves to the class that needs no rocKE, the stub proves the pin reaches every request, and the refusal test no longer asserts rocKE's own wording.

ALMIOPEN-2843
…IOPEN-2843/tooling-tests-in-superbuild-ci

The one conflict, in the Linux "Run tests" step of hipdnn-superbuild-ci.yml, keeps both the step id that the tooling junit check depends on and the ROCKE_COMGR_LIB environment that develop added for the native rocKE tests.

ALMIOPEN-2843
@GarbyGilbertAMD
GarbyGilbertAMD marked this pull request as ready for review October 13, 2026 13:14
@GarbyGilbertAMD
GarbyGilbertAMD requested review from a team as code owners October 13, 2026 13:14
The gfx950 dense ingestor profile named a rocKE dispatcher entry point, a request field and spec ids the dispatcher no longer has, and the tests that read it skipped without rocKE, so nothing flagged the drift. Porting it to the current dispatcher only restated in YAML what the dispatcher registry already answers, and the next dispatcher change would break it again, so the profile is deleted rather than maintained. The repository ships no profile again, and dispatch_parity.py, reconcile_applicability.py and knob_sweep.py take the author's own through --profile.

The pin dialect that the earlier port added to dispatch_parity.py (dispatch.pin, result_attr, spec_attr and refusal_exception) and the pin inheritance in reconcile_applicability.py existed only to serve that profile, so both are removed with their tests, which returns the two tools to their form before the port. The dispatch-parity tests that resolved the profile through the real dispatcher or checked its provider_root are removed as well, along with the two config-loader tests that required a profile under configs/. The stub-based tests of the tools remain.

ALMIOPEN-2843

@BrianHarrisonAMD BrianHarrisonAMD 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 thanks.
Lets get this merged, and we can update #13024 with these changes + figure out the way forward.

…IOPEN-2843/tooling-tests-in-superbuild-ci

# Conflicts:
#	.github/workflows/hipdnn-superbuild-ci.yml
@GarbyGilbertAMD
GarbyGilbertAMD enabled auto-merge (squash) October 14, 2026 22:03
@GarbyGilbertAMD

Copy link
Copy Markdown
Contributor Author

Tagging @geomin12 for review as well

…IOPEN-2843/tooling-tests-in-superbuild-ci

# Conflicts:
#	projects/hipdnn/test_categories.yaml
#	projects/hipdnn/tools/IngestorGenerator/tests/test_native_stub.py
@GarbyGilbertAMD
GarbyGilbertAMD requested a review from a team as a code owner October 16, 2026 21:34

@geomin12 geomin12 left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

some comments, but would prefer to fix the root cause of pytest skipping tests rather than this workaround

if this is needed though, i would like a better explanation in the check_pytest_junit.py (i'm an external contributor and would need to understand context via code)

Comment thread .github/scripts/check_pytest_junit.py Resolved
Comment thread .github/scripts/check_pytest_junit.py Resolved
Comment thread .github/scripts/check_pytest_junit.py Resolved
…ng junit

ctest reports a pytest run as passed when every case skips, so a compiler, a validator binary or a kpack that is missing at run time left the IngestorGenerator and DescriptorGenerator suites green without running part of them. Both suites run under a pytest plugin, hipdnn_strict_skips, that turns any skipped or xfailed test into a failure. A skip that is correct by design, such as an author-supplied input or the POSIX-only sweep tests on Windows, opts out with @pytest.mark.allow_skip(reason=...) beside the code that skips, and a skip raised while a module is imported fails the collection. This replaces check_pytest_junit.py with its allow-lists and the separate junit step in each lane, so the suites run in the ordinary ctest step.

The packaging-probe gate follows the same reasoning. HIPKERNELPROVIDER_MIN_PACKAGING_PROBES fails configure when probe discovery declares fewer probes than a lane requires, or when it is set without the probes option, so a lane that must always have a probe cannot pass with none. Both superbuild lanes set it to 1 and run ctest with --no-tests=error, which replaces check_probe_junit.py and the manifest it read.

The native-stub tests get the compiler that builds the tree by putting its directory on the test PATH on every platform, so the Linux runner needs no separate C++ compiler.

ALMIOPEN-2843
…IOPEN-2843/tooling-tests-in-superbuild-ci

# Conflicts:
#	projects/hipdnn/tools/IngestorGenerator/tests/test_config_loader.py
#	projects/hipdnn/tools/IngestorGenerator/tests/test_coverage_gate.py
#	projects/hipdnn/tools/IngestorGenerator/tests/test_dispatch_parity.py
#	projects/hipdnn/tools/IngestorGenerator/tests/test_variant_reachability.py
…f the tooling suite

TestAgainstTheRealBuild gates a build packed with the gfx950 attention engine and runs against any build directory that holds a validator and a packed tree. The superbuild lanes pack other descriptors, so the class fails on Linux, where the packed tree holds the example engines, and cannot find the packed tree on Windows, where the plugin tree lives under bin. The ingestor ctest entry deselects it rather than counting a skip, since no lane is expected to pack that engine.

The coverage-gate test that serves a threshold the tool cannot check uses a shebang script as its stand-in validator, which Windows cannot execute directly, so it skips off POSIX and is allowed to skip under the strict-skips plugin.

ALMIOPEN-2843
test_registry_regeneration.py diffs the regenerated catalog against the
shipped gfx950 attention KDP, which is DVC-managed. The Linux lane packs the
example descriptors rather than the production tree, so nothing fetched it
and both tests skipped. The tooling suite fails skips inside pytest, so the
lane failed. Pull the descriptors tree the way the Windows lane does, and
check that a pointer-backed KDP landed.

ALMIOPEN-2843
…IOPEN-2843/tooling-tests-in-superbuild-ci

test_native_stub.py: keep both imports (os for the include-file lookup, re for
the placeholder check).

Adapt develop's new IngestorGenerator tests to the strict-skip suite run:
- test_inventory: the RUNBOOK-recipe case skips on Windows by design, so it is
  allow_skip; a POSIX host without bash/sha256sum now fails instead of skipping.
- test_packs_formatting skips without clang-format. Install the pre-commit
  hook's clang-format==18.1.4 in the lane venv and hand it to the suite as
  HIPDNN_CLANG_FORMAT, since the venv's scripts directory is not on PATH.

@geomin12 geomin12 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm, but would love to cover these testing gaps in TheRock CI, so we don't maintain these other workflows!

@BrianHarrisonAMD

Copy link
Copy Markdown
Contributor

lgtm, but would love to cover these testing gaps in TheRock CI, so we don't maintain these other workflows!

@geomin12 did we want dev-tooling, dev-builds, and non-production testing added to TheRock CI?

I thought this split made sense, but if preferred we could try land future things in TheRock CI, and eventually migrate these.
The reason I thought this split made sense, is that these things don't get installed, and don't impact TheRock (build, packaging, or release artifacts).

# Conflicts:
#	.github/requirements-hipdnn-superbuild-ci.txt
#	projects/hipdnn/tools/CMakeLists.txt
…lates

The live packs moved to hipdnn_plugin_sdk/ingestor/NativeHooks.hpp; the templates
still emitted hipdnn_plugin_sdk/NativeRegistry.hpp, so the census regeneration and
clang-format fixed-point tests failed once they ran in CI.
@adickin-amd

Copy link
Copy Markdown
Contributor

issuing override merge

@adickin-amd
adickin-amd merged commit dfab2e3 into develop Oct 22, 2026
411 of 439 checks passed
@adickin-amd
adickin-amd deleted the users/ggilbert/ALMIOPEN-2843/tooling-tests-in-superbuild-ci branch October 22, 2026 15:21
BrianHarrisonAMD added a commit that referenced this pull request Oct 22, 2026
…olved (#14209)

## Summary

Fixes the `hipdnn_ingestor_generator_pytest` failure on the Linux hipDNN
Superbuild lane. The ctest entry now passes `HKP_HIPCC`, so the
multi-launch rocKE tests from #14158 find the compiler. Before this
change they found it only when hipcc was on `PATH`, which is true on
Windows but not on Linux.

JIRA ID : ALMIOPEN-2973

Related: #14158 added the test; #13385 made the suite a superbuild ctest
entry. Each PR passed its own CI; the failure appears only with both
merged.

## Risk Assessment

Risk 1 of 5. The change only sets an environment variable on one test
entry. That entry is registered only when
`HIPDNN_ENABLE_TOOLING_TESTS=ON`, which only superbuild CI turns on.

## ASIC Coverage

Host-only test wiring with no device code. Passing PR CI is sufficient.

## Testing Summary

- The four cases in `test_verify_variant_sets_multi_launch_rocke.py`
reproduce the CI error without hipcc and pass with `HKP_HIPCC` set.
- Configuring hipDNN with the tooling tests on writes `HKP_HIPCC` into
the test's environment in the generated ctest file.

## Testing Checklist

- [x] Reproduction - `pytest
tests/test_verify_variant_sets_multi_launch_rocke.py` with
`PATH=/usr/bin:/bin` - Status: 4 errors (`hipcc not found`), matching CI
- [x] Fix - same command with `HKP_HIPCC=/opt/rocm/bin/hipcc` - Status:
Passed (4)
- [x] CMake wiring - configure `projects/hipdnn` with
`HIPDNN_ENABLE_KERNEL_INGESTOR=ON` and `HIPDNN_ENABLE_TOOLING_TESTS=ON`
- Status: `HKP_HIPCC` set on `hipdnn_ingestor_generator_pytest`
- [ ] PR CI - HipDNN Linux and Windows Superbuild - Status: Pending

## Technical Changes

- The test entry takes the hipcc that `find_package(hip)` resolves, the
same source the descriptor-packaging ctest entries use. The alternative,
putting the ROCm bin directory on `PATH` in the Linux workflow, would
change the environment of every Linux test.
CMiservaAMD added a commit that referenced this pull request Oct 22, 2026
Conflicts resolved, keeping the behaviour of both sides:
- Container.cpp (#13028, UHD runtime): engine creation now takes the whole
  descriptor set. Pass withComputedBehaviorNotes(set) to it, so the plan
  serialization note and the prediction and selector inputs both survive.
- ConvNative.cpp, PointwiseNative.cpp (#13028): include lists; keep both.
- kernel_ingestor_engine tests CMakeLists.txt (#14158, multi-launch rocKE
  kernels): keep TestLaunchKernelDefinition.cpp and TestRestoredIngestorPlan.cpp.
- TestKernelIngestorEngine.cpp (#13028): DispatchRegistry moved to
  NativeHooks.hpp; keep all tests of both sides.
- IKernelDispatchHandler.hpp (#14158): include list; launchNames() and the
  save, restore and supportsSaving() hooks all stay.
- TestBenchmarkPlan.cpp (#13028): include list and appended tests; keep both.
- hipdnn-superbuild-ci.yml (#13385, tooling tests in CI): both lanes pass
  HIPDNN_ENABLE_TOOLING_TESTS and HIPKERNELPROVIDER_GENERATE_SERIALIZE_HEADERS.
- PluginDevelopment.md, RFC 0009 (#13763, docs sweep and RFC status): keep
  the status header and the drift fixes. The RFC now says that
  hip-kernel-provider exports the serialization hooks.

Testing (gfx942 MI300X, image hipdnn_20261017_gfx942):
- Baseline, clean develop 0bb1c36: build OK, quick set 62/62 (job 68147020).
- Merged tree: build OK, quick set 62/62 (job 68147243).
- Targeted provider tests: unit 195/195, IntegrationGpuKernelIngestor* 26/26
  (job 68147244). Plugin SDK targeted tests 309/309 (job 68147245).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ThruptiRajLakshmanaGowda added a commit that referenced this pull request Oct 23, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
@assistant-librarian

Copy link
Copy Markdown
Contributor

TheRock Submodule Bump Activity

Newest first

ThruptiRajLakshmanaGowda added a commit that referenced this pull request Oct 26, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
ThruptiRajLakshmanaGowda added a commit that referenced this pull request Oct 30, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
ThruptiRajLakshmanaGowda added a commit that referenced this pull request Nov 1, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
ThruptiRajLakshmanaGowda added a commit that referenced this pull request Nov 2, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
ThruptiRajLakshmanaGowda added a commit that referenced this pull request Nov 3, 2026
…ons from the registry

registry_enumerator:
- enumerate.also sections may be space: full. Each section projects its own
  varying performance knobs; the catalog's projected knobs are their union, in
  reduction.fields.performance order, and --plan-space counts every section.
- A manifest `launches` block (launch name -> override, two or more) is copied
  onto every kernel's kernel_source, for a builder returning a KernelModule.
- A registry candidate that pairs its kernel with a reduce kernel (reduce_spec
  beside kernel_spec) without `launches` exits 2: the catalog would otherwise
  ship the kernel without the reduce the dispatcher launches after it.

Regeneration gates (test_registry_regeneration.py):
- g1 keys every kernel on its launches (name, builder, role), and reads the spec
  fields a kernel omits from the selection kernel, so a field dropped from
  every kernel is still compared with its default (negative control added).
- g3 compares a space: full catalog as a --subset: variant reduction ships a
  strict subset of the enumeration by design.
- g4 compares the selection's launch set with the manifest's.
- g6 hydrates and predicate-checks every launch of a multi-launch kernel, and
  checks a module builder yields exactly the launched roles.
- A manifest without its selection, or without a *Native.cpp mirror, fails
  instead of skipping, as the strict-skip CTest lane (#13385) would.

Co-Authored-By: Claude <noreply@anthropic.com>
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.

4 participants