Skip to content

feat(hip-kernel-provider): Wire rocKE C++ smoke tests into provider CI lane#8864

Merged
yraparti merged 12 commits into
developfrom
users/yraparti/hkp-rocke-cxx-smoke-wiring
Jun 29, 2026
Merged

feat(hip-kernel-provider): Wire rocKE C++ smoke tests into provider CI lane#8864
yraparti merged 12 commits into
developfrom
users/yraparti/hkp-rocke-cxx-smoke-wiring

Conversation

@yraparti

@yraparti yraparti commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Summary

ISSUE ID : AICK-1470

  • Build + install the rocKE engine's two C++ smoke tests alongside the hip-kernel-provider tests, behind HIPKERNELPROVIDER_ENABLE_ROCKE_TESTS (defaults to HIPKERNELPROVIDER_ENABLE_TESTS), so they run in TheRock's hip_kernel_provider CTest bucket.
  • To land in TheRock's test artifact with no descriptor edit: that artifact only captures bin/hip_kernel_provider*_test*, so in provider mode the two C++ smoke binaries install at bare bin/ under a <subdir>_<target>_test name (e.g. hip_kernel_provider_rocke_ir_serialize_roundtrip_test) and are referenced from the provider CTestTestfile.cmake via ../.
  • Standalone builds are unchanged: plain target names under bin/, CTestTestfile in bin/rocke/, all three smoke tests (incl. the Python import smoke) registered.
  • Restore the gfx1151 WMMA GEMM verification module path with a wrapper so test_wmma_gemm can launch the existing f16 verifier.

Why the Python smoke is deferred in the provider lane

The Python import smoke (rocke_installed_smoke.py) imports the rocke package and reads core/arch/data/arch_specs.json. Neither the script (a .py) nor the package (a directory tree) can match the bin/hip_kernel_provider*_test* Ant-style glob, and the package isn't routed into the provider test artifact today. So it would be "Not Run" in the provider lane. It remains fully exercised in standalone mode; wiring it into the provider lane needs the rocke package added to TheRock's ml-libs/artifact-hipkernelprovider.toml test component (or a self-contained zipapp) and is left as a follow-up.

Test plan

  • Provider mode (-DROCKE_INSTALL_PROVIDER_CTEST_SUBDIR=hip_kernel_provider -DROCKE_INSTALL_STANDALONE_CTEST=OFF): clang build+install puts the two renamed C++ tests at bare bin/; ctest passes 2/2 resolving via ../.
  • Standalone mode: clang build+install puts all three tests under bin/; ctest passes 3/3.
  • cmake-lint (pre-commit) passes on all changed CMake files.
  • CI: confirm the two C++ smoke tests run (not "Not Run") in TheRock's hip-kernel-provider lane.

Made with Cursor

… lane

Build and install the rocKE engine's two C++ smoke tests alongside the
hip-kernel-provider tests so they run in TheRock's hip_kernel_provider CTest
bucket, behind HIPKERNELPROVIDER_ENABLE_ROCKE_TESTS (defaults to
HIPKERNELPROVIDER_ENABLE_TESTS).

To get the C++ tests into TheRock's test artifact with no descriptor edit, the
provider test artifact only captures bin/hip_kernel_provider*_test*, so in
provider mode the two C++ smoke binaries are installed at bare bin/ under a
<subdir>_<target>_test name (e.g.
hip_kernel_provider_rocke_ir_serialize_roundtrip_test) and referenced from the
provider CTestTestfile via "../". Standalone builds keep the plain target names
under bin/ with the CTestTestfile in bin/rocke/.

The Python import smoke and the rocke package cannot match that name pattern, so
they are staged only in standalone mode; wiring them into the provider lane
needs the rocke package added to TheRock's artifact descriptor and is deferred.

Validated with a clang build+install in both modes: provider mode installs the
two renamed C++ tests at bare bin/ and ctest passes 2/2 via "../"; standalone
installs all three tests and passes 3/3.

Co-authored-by: Cursor <cursoragent@cursor.com>
@therock-pr-bot

therock-pr-bot Bot commented Jun 26, 2026

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
🌿 Branch Name ✅ Pass
📝 PR Title/Description ✅ Pass
Forbidden Files ✅ Pass
🧪 Unit Test ✅ Pass PR does not contain code files — Unit Test auto-passed
🔎 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.

@therock-pr-bot

therock-pr-bot Bot commented Jun 26, 2026

Copy link
Copy Markdown

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

@yraparti yraparti changed the title [hip-kernel-provider] Wire rocKE C++ smoke tests into the provider CI lane [hip-kernel-provider] Feature: Wire rocKE C++ smoke tests into the provider CI lane Jun 26, 2026
@yraparti yraparti changed the title [hip-kernel-provider] Feature: Wire rocKE C++ smoke tests into the provider CI lane [hip-kernel-provider] feat: Wire rocKE C++ smoke tests into the provider CI lane Jun 26, 2026
@yraparti yraparti changed the title [hip-kernel-provider] feat: Wire rocKE C++ smoke tests into the provider CI lane feat(hip-kernel-provider): Wire rocKE C++ smoke tests into provider CI lane Jun 26, 2026
Cover the gfx1151 WMMA compatibility entry point with a CPU-only delegation test so the PR bot sees test coverage for the wrapper change.

Co-authored-by: Cursor <cursoragent@cursor.com>
Clarify rocKE agent guidance for GPU numeric testing: require a real ROCm GPU
and ROCm torch for local numeric lanes, and point users without local hardware
to the remote Slurm-based test orchestrator. Also make cross-platform script
guidance explicit, add dsl_docs authoring/optimization pointers, and document
that torch should be preinstalled from the ROCm wheel index before resolving the
rest of requirements.txt.

Co-authored-by: Cursor <cursoragent@cursor.com>
yraparti and others added 2 commits June 27, 2026 17:16
Clarify where new kernel builders, optimization recipes, workload case studies,
and reusable optimization lessons should live. Add concise agent-facing rules and
expand the authoring model with replayability and wiring expectations for
accepted optimizations.

Co-authored-by: Cursor <cursoragent@cursor.com>
Make the rocKE agent guidance easier to find by linking AGENTS.md from the
engine build reference and from the CK DSL optimization utilities docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
Comment thread dnn-providers/hip-kernel-provider/rocKE/dsl_docs/architecture/authoring_model.md Outdated
Comment thread dnn-providers/hip-kernel-provider/rocKE/AGENTS.md Outdated
Comment thread dnn-providers/hip-kernel-provider/rocKE/BUILD.md Outdated
Comment thread dnn-providers/hip-kernel-provider/rocKE/requirements.txt Outdated
Comment thread projects/composablekernel/python/ck_dsl/dsl_docs/optimization/utilities/README.md Outdated
yraparti and others added 3 commits June 27, 2026 19:32
Move the AGENTS.md, requirements.txt, authoring-model, build-doc, and CK DSL
utility README guidance updates out of the hip-kernel-provider C++ smoke wiring
PR. They now live on users/yraparti/rocke-agent-guidance-docs to keep PRs
separated by concern.

Co-authored-by: Cursor <cursoragent@cursor.com>
Move the WMMA verify wrapper unit test out of the hip-kernel-provider C++ smoke
wiring PR. The test now lives on users/yraparti/rocke-agent-guidance-docs to keep
this PR focused on provider C++ smoke test wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
Move the gfx1151 WMMA verify wrapper out of the hip-kernel-provider C++ smoke
wiring PR. The wrapper now lives on users/yraparti/rocke-agent-guidance-docs with
its corresponding unit test.

Co-authored-by: Cursor <cursoragent@cursor.com>

@shumway shumway 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.

This looks good to me. I still have more to learn about this CMake setup and how the local rocKE tests work and how they integrate into hipDNN provider testing, but I don't want that to block CI coverage. We should get @BrianHarrisonAMD 's approval before merging. Most importantly, we should test any path that Rock CI might run to make sure we can't break the large CI project at this PR or later. We want to make sure there aren't different build and test paths between presubmit CI testing and other CI across TheRock.

Comment thread dnn-providers/hip-kernel-provider/rocKE/CMakeLists.txt
Comment thread dnn-providers/hip-kernel-provider/rocKE/CMakeLists.txt
Comment thread dnn-providers/hip-kernel-provider/CMakeLists.txt Outdated
Comment thread dnn-providers/hip-kernel-provider/rocKE/CMakeLists.txt Outdated
Make the rocKE provider integration opt-in by default so it is not built or
included in TheRock unless explicitly enabled. Rename the option to
HIPKERNELPROVIDER_ENABLE_ROCKE because it gates the entire rocKE subdirectory,
not just the smoke tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
Refresh the rocKE CTest install comment to match the current provider-mode
layout: CTest metadata is appended to the provider subdir, while C++ smoke
binaries install at bare bin/ with hip_kernel_provider*_test names so TheRock's
existing test artifact patterns capture them.

Co-authored-by: Cursor <cursoragent@cursor.com>

@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

@yraparti yraparti merged commit 9774cbb into develop Jun 29, 2026
25 checks passed
@yraparti yraparti deleted the users/yraparti/hkp-rocke-cxx-smoke-wiring branch June 29, 2026 18:31
BrianHarrisonAMD added a commit that referenced this pull request Jun 30, 2026
## Summary

Adds a skeleton `rocKEclient` project under
`dnn-providers/hip-kernel-provider/rocKE-client`, gated by the rocKE
provider flag from [PR
#8864](#8864). When enabled,
the project builds and installs `librocKEclient.so` beside the existing
hip-kernel-provider plugin so hipDNN can load it, while the skeleton
reports no applicable engines yet. This is the start of the rocKE client
library, and will be directly exposing the hipDNN provider API to start
with. Later on rocKE client & rocKE provider will be split into two
different projects.

JIRA ID : AICK-1470

## Risk Assessment

Low risk. This adds opt-in provider build/install and plugin-loading
infrastructure, plus a new engine ID, but it is gated off by default and
the new plugin intentionally rejects all graphs so it does not change
existing dispatch behavior unless explicitly enabled.

## ASIC Coverage

ASIC-independent wiring only. The plugin currently performs no GPU
execution, exposes no supported operation surface, and returns no
applicable engines for every graph; passing standard PR CI plus the
local opt-in build/load smoke tests is sufficient, with no dedicated
multi-arch sweep required for this skeleton.

## Testing Summary

- Full opt-in provider configure/build/install validated that
`HIPKERNELPROVIDER_ENABLE_ROCKE=ON` builds rocKE, rocKEclient, hipDNN,
and hip-kernel-provider together.
- Installed smoke tests validated the plugin metadata, engine ID query,
non-applicability behavior, and hipDNN loading `rocKEclient` from the
installed plugin directory.
- Targeted unit coverage validates the registered `ROCKE_ENGINE` name/id
mapping and default `RocKEContext` instantiation.
- Commit hooks completed through `git commit`.

## Testing Checklist

- [x] Commit hooks - `git commit -m "feat(hipdnn): add rocKEclient
provider plugin skeleton" && git commit -m "test(hipdnn): cover
rocKEclient skeleton wiring"` - Status: Passed
- [x] Full opt-in provider configure - `cmake --preset
hip-kernel-provider -B build-rocke-client-full-install
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON -DHIPKERNELPROVIDER_ENABLE_TESTS=OFF
-DROCKE_CLIENT_ENABLE_TESTS=ON -DENABLE_ASM_SDPA_ENGINE=OFF
-DENABLE_HIP_MLOPS_ENGINE=ON -DENABLE_CLANG_TIDY=OFF
-DENABLE_CLANG_FORMAT=OFF` - Status: Passed
- [x] Full opt-in provider build/install - `cmake --build
build-rocke-client-full-install && cmake --install
build-rocke-client-full-install --prefix
build-rocke-client-full-install/install` - Status: Passed
- [x] Installed rocKEclient smoke tests - `ctest --test-dir
build-rocke-client-full-install/install/bin/rocKEclient
--output-on-failure` - Status: Passed
- [x] Targeted EngineNames and rocKEclient tests - `cmake --preset
hip-kernel-provider -B build-rocke-client-test-expansion
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON -DHIPKERNELPROVIDER_ENABLE_TESTS=OFF
-DROCKE_CLIENT_ENABLE_TESTS=ON -DENABLE_ASM_SDPA_ENGINE=OFF
-DENABLE_HIP_MLOPS_ENGINE=ON -DENABLE_CLANG_TIDY=OFF
-DENABLE_CLANG_FORMAT=OFF && cmake --build
build-rocke-client-test-expansion --target hipdnn_data_sdk_tests
rocke_client_tests rocke_client_integration_tests &&
./build-rocke-client-test-expansion/bin/hipdnn_data_sdk_tests
--gtest_filter='TestEngineNames.*' &&
./build-rocke-client-test-expansion/bin/rocke_client_tests
--gtest_filter='TestRocKEContext.*:TestRocKEContainer.*:TestRocKEEngine.*:TestPluginPublic.*'
&&
./build-rocke-client-test-expansion/bin/rocke_client_integration_tests`
- Status: Passed
- [ ] PR CI - GitHub PR checks - Status: Pending

## Technical Changes

- Adds the `rocKE-client` C++ project with version generation, plugin
SDK wiring, `rocKEclient` shared-library target, and install rules for
the hipDNN engine plugin directory.
- Exposes the hipDNN engine plugin C API through
`hipdnn_plugin_sdk/EnginePluginImpl.inl` using rocKEclient container,
handle, context, settings, and skeleton engine types.
- Registers a `ROCKE_ENGINE` ID and implements a skeleton engine that
advertises the ID but returns no applicability and rejects
workspace/context creation with `HIPDNN_PLUGIN_STATUS_NOT_APPLICABLE`.
- Wires `rocKE-client` into the existing
`HIPKERNELPROVIDER_ENABLE_ROCKE` block beside the merged rocKE project
so both build as part of hip-kernel-provider only when the flag is
enabled.
- Adds unit and integration smoke tests, including explicit
`ROCKE_ENGINE` registry coverage, default `RocKEContext` construction
coverage, and an installed CTest entry that verifies hipDNN loads
`rocKEclient` from the installed plugin path.
JP-Fernando pushed a commit that referenced this pull request Jul 1, 2026
…I lane (#8864)

## Summary

ISSUE ID : AICK-1470

- Build + install the rocKE engine's two C++ smoke tests alongside the
hip-kernel-provider tests, behind `HIPKERNELPROVIDER_ENABLE_ROCKE_TESTS`
(defaults to `HIPKERNELPROVIDER_ENABLE_TESTS`), so they run in TheRock's
`hip_kernel_provider` CTest bucket.
- To land in TheRock's test artifact **with no descriptor edit**: that
artifact only captures `bin/hip_kernel_provider*_test*`, so in provider
mode the two C++ smoke binaries install at bare `bin/` under a
`<subdir>_<target>_test` name (e.g.
`hip_kernel_provider_rocke_ir_serialize_roundtrip_test`) and are
referenced from the provider `CTestTestfile.cmake` via `../`.
- Standalone builds are unchanged: plain target names under `bin/`,
CTestTestfile in `bin/rocke/`, all three smoke tests (incl. the Python
import smoke) registered.
- Restore the gfx1151 WMMA GEMM verification module path with a wrapper
so `test_wmma_gemm` can launch the existing f16 verifier.

## Why the Python smoke is deferred in the provider lane

The Python import smoke (`rocke_installed_smoke.py`) imports the `rocke`
package and reads `core/arch/data/arch_specs.json`. Neither the script
(a `.py`) nor the package (a directory tree) can match the
`bin/hip_kernel_provider*_test*` Ant-style glob, and the package isn't
routed into the provider test artifact today. So it would be "Not Run"
in the provider lane. It remains fully exercised in standalone mode;
wiring it into the provider lane needs the `rocke` package added to
TheRock's `ml-libs/artifact-hipkernelprovider.toml` `test` component (or
a self-contained zipapp) and is left as a follow-up.

## Test plan

- [x] Provider mode
(`-DROCKE_INSTALL_PROVIDER_CTEST_SUBDIR=hip_kernel_provider
-DROCKE_INSTALL_STANDALONE_CTEST=OFF`): clang build+install puts the two
renamed C++ tests at bare `bin/`; ctest passes 2/2 resolving via `../`.
- [x] Standalone mode: clang build+install puts all three tests under
`bin/`; ctest passes 3/3.
- [x] `cmake-lint` (pre-commit) passes on all changed CMake files.
- [ ] CI: confirm the two C++ smoke tests run (not "Not Run") in
TheRock's hip-kernel-provider lane.

Made with [Cursor](https://cursor.com)

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
JP-Fernando pushed a commit that referenced this pull request Jul 1, 2026
## Summary

Adds a skeleton `rocKEclient` project under
`dnn-providers/hip-kernel-provider/rocKE-client`, gated by the rocKE
provider flag from [PR
#8864](#8864). When enabled,
the project builds and installs `librocKEclient.so` beside the existing
hip-kernel-provider plugin so hipDNN can load it, while the skeleton
reports no applicable engines yet. This is the start of the rocKE client
library, and will be directly exposing the hipDNN provider API to start
with. Later on rocKE client & rocKE provider will be split into two
different projects.

JIRA ID : AICK-1470

## Risk Assessment

Low risk. This adds opt-in provider build/install and plugin-loading
infrastructure, plus a new engine ID, but it is gated off by default and
the new plugin intentionally rejects all graphs so it does not change
existing dispatch behavior unless explicitly enabled.

## ASIC Coverage

ASIC-independent wiring only. The plugin currently performs no GPU
execution, exposes no supported operation surface, and returns no
applicable engines for every graph; passing standard PR CI plus the
local opt-in build/load smoke tests is sufficient, with no dedicated
multi-arch sweep required for this skeleton.

## Testing Summary

- Full opt-in provider configure/build/install validated that
`HIPKERNELPROVIDER_ENABLE_ROCKE=ON` builds rocKE, rocKEclient, hipDNN,
and hip-kernel-provider together.
- Installed smoke tests validated the plugin metadata, engine ID query,
non-applicability behavior, and hipDNN loading `rocKEclient` from the
installed plugin directory.
- Targeted unit coverage validates the registered `ROCKE_ENGINE` name/id
mapping and default `RocKEContext` instantiation.
- Commit hooks completed through `git commit`.

## Testing Checklist

- [x] Commit hooks - `git commit -m "feat(hipdnn): add rocKEclient
provider plugin skeleton" && git commit -m "test(hipdnn): cover
rocKEclient skeleton wiring"` - Status: Passed
- [x] Full opt-in provider configure - `cmake --preset
hip-kernel-provider -B build-rocke-client-full-install
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON -DHIPKERNELPROVIDER_ENABLE_TESTS=OFF
-DROCKE_CLIENT_ENABLE_TESTS=ON -DENABLE_ASM_SDPA_ENGINE=OFF
-DENABLE_HIP_MLOPS_ENGINE=ON -DENABLE_CLANG_TIDY=OFF
-DENABLE_CLANG_FORMAT=OFF` - Status: Passed
- [x] Full opt-in provider build/install - `cmake --build
build-rocke-client-full-install && cmake --install
build-rocke-client-full-install --prefix
build-rocke-client-full-install/install` - Status: Passed
- [x] Installed rocKEclient smoke tests - `ctest --test-dir
build-rocke-client-full-install/install/bin/rocKEclient
--output-on-failure` - Status: Passed
- [x] Targeted EngineNames and rocKEclient tests - `cmake --preset
hip-kernel-provider -B build-rocke-client-test-expansion
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON -DHIPKERNELPROVIDER_ENABLE_TESTS=OFF
-DROCKE_CLIENT_ENABLE_TESTS=ON -DENABLE_ASM_SDPA_ENGINE=OFF
-DENABLE_HIP_MLOPS_ENGINE=ON -DENABLE_CLANG_TIDY=OFF
-DENABLE_CLANG_FORMAT=OFF && cmake --build
build-rocke-client-test-expansion --target hipdnn_data_sdk_tests
rocke_client_tests rocke_client_integration_tests &&
./build-rocke-client-test-expansion/bin/hipdnn_data_sdk_tests
--gtest_filter='TestEngineNames.*' &&
./build-rocke-client-test-expansion/bin/rocke_client_tests
--gtest_filter='TestRocKEContext.*:TestRocKEContainer.*:TestRocKEEngine.*:TestPluginPublic.*'
&&
./build-rocke-client-test-expansion/bin/rocke_client_integration_tests`
- Status: Passed
- [ ] PR CI - GitHub PR checks - Status: Pending

## Technical Changes

- Adds the `rocKE-client` C++ project with version generation, plugin
SDK wiring, `rocKEclient` shared-library target, and install rules for
the hipDNN engine plugin directory.
- Exposes the hipDNN engine plugin C API through
`hipdnn_plugin_sdk/EnginePluginImpl.inl` using rocKEclient container,
handle, context, settings, and skeleton engine types.
- Registers a `ROCKE_ENGINE` ID and implements a skeleton engine that
advertises the ID but returns no applicability and rejects
workspace/context creation with `HIPDNN_PLUGIN_STATUS_NOT_APPLICABLE`.
- Wires `rocKE-client` into the existing
`HIPKERNELPROVIDER_ENABLE_ROCKE` block beside the merged rocKE project
so both build as part of hip-kernel-provider only when the flag is
enabled.
- Adds unit and integration smoke tests, including explicit
`ROCKE_ENGINE` registry coverage, default `RocKEContext` construction
coverage, and an installed CTest entry that verifies hipDNN loads
`rocKEclient` from the installed plugin path.
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