Skip to content

ci(ck): arch-prefix dispatcher lane result JSON so gfx942 and gfx950 stop overwriting each other - #14265

Merged
illsilin merged 1 commit into
developfrom
users/muozturk/ck/dispatcher-results-arch-prefix
Oct 28, 2026
Merged

illsilin merged 1 commit into
developfrom
users/muozturk/ck/dispatcher-results-arch-prefix

Conversation

@ozturkosu

@ozturkosu ozturkosu commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

DISPATCHER_PERF and DISPATCHER_CORRECTNESS run gfx942 and gfx950 as parallel branches of the same build, and both archive projects/composablekernel/build/*_results.json under identical names. Jenkins keeps one artifact per path, so whichever lane archives last wins and the other arch's results are dropped every night (e.g. build #2866 has a single gemm_universal_results.json, and all dispatcher_* files are gfx950). The tile_engine JSON carries no arch field, so a consumer cannot even tell which GPU a surviving file came from.

Change

One helper in vars/ck.groovy, archiveArchResults(arch, glob), renames each matching file to <arch>_<name> and archives the prefixed glob. Both finally blocks call it:

  • perf lane: archiveArchResults(gpuTarget, "*_results.json")
  • correctness lane: archiveArchResults(arch, "dispatcher_*_results.json")

Archived names become e.g. gfx942_gemm_universal_results.json / gfx950_dispatcher_gemm_results.json, so both arches survive and the arch is in the name. The existing *_results.json glob still matches.

The helper never throws (returnStatus: true + allowEmptyArchive: true), so a cmake/ninja failure before any JSON exists is still reported as the real error rather than masked by the archive step. Each lane starts with deleteDir(), so no stale prefixed file can be renamed twice.

Consumers

Anything keyed on the exact old names (e.g. the CK legacy perf dashboard ingest) needs to strip the <arch>_ prefix, and can now key on it instead of guessing.

Testing

Ran the real runDispatcherPerfTests / runDispatcherCorrectnessTests from ck.groovy under Groovy 4 with only the Jenkins steps mocked: buildAndTest writes exactly the files named by --json in the real execute_cmd, sh executes for real, and archiveArtifacts stores into one map keyed by path (one artifact per path, like a Jenkins build). Four lanes (perf/correctness x gfx942/gfx950), each in its own workspace:

ck.groovy archived artifacts
develop 22, all from gfx950 (gfx942 lost)
this PR 42 = 20 gfx942 + 22 gfx950 (the 2 extra are the gfx950-only mx_gemm / gemm_bquant)
this PR, buildAndTest throws the real build error propagates; archive step does not throw

End-to-end check on Jenkins needs a run of this PR with USE_CURRENT_BRANCH_FOR_CK_GROOVY=true (otherwise the ck library loads from develop and the old archive step runs) plus RUN_DISPATCHER_PERF_TESTS=true and RUN_DISPATCHER_CORRECTNESS_TESTS=true. Expected: gfx942_*_results.json and gfx950_*_results.json both archived.

JIRA: AICK-2692

DISPATCHER_PERF and DISPATCHER_CORRECTNESS run gfx942 and gfx950 as
parallel branches of one build and archive the same build-relative
*_results.json names. Jenkins keeps one artifact per path, so the last
lane to archive silently replaced the other arch's results, and
tile_engine JSON has no arch field to tell them apart.

Add archiveArchResults(arch, glob), which renames each file to
<arch>_<name> and archives the prefixed glob, and call it from both
finally blocks. It never throws (returnStatus + allowEmptyArchive), so
it cannot mask the lane's real failure. Each lane starts with
deleteDir(), so no stale prefixed file can be renamed twice.
@therock-pr-bot

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

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
📝 PR 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.

🙋 Wish to Override Policy?

@therock-pr-bot

Copy link
Copy Markdown

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

@ozturkosu
ozturkosu marked this pull request as ready for review October 23, 2026 07:23
@ozturkosu
ozturkosu requested a review from a team as a code owner October 23, 2026 07:23
@illsilin illsilin added the ci:skip Skip all CI builds/tests for this PR label Oct 28, 2026
@illsilin
illsilin merged commit e7f5a60 into develop Oct 28, 2026
70 of 72 checks passed
@illsilin
illsilin deleted the users/muozturk/ck/dispatcher-results-arch-prefix branch October 28, 2026 14:43
assistant-librarian Bot pushed a commit to ROCm/composable_kernel that referenced this pull request Oct 28, 2026
ci(ck): arch-prefix dispatcher lane result JSON so gfx942 and
 gfx950 stop overwriting each other (#14265)

## Summary

`DISPATCHER_PERF` and `DISPATCHER_CORRECTNESS` run gfx942 and gfx950 as
parallel branches of the same build, and both archive
`projects/composablekernel/build/*_results.json` under identical names.
Jenkins keeps one artifact per path, so whichever lane archives last
wins and the other arch's results are dropped every night (e.g. build
#2866 has a single `gemm_universal_results.json`, and all `dispatcher_*`
files are gfx950). The tile_engine JSON carries no arch field, so a
consumer cannot even tell which GPU a surviving file came from.

## Change

One helper in `vars/ck.groovy`, `archiveArchResults(arch, glob)`,
renames each matching file to `<arch>_<name>` and archives the prefixed
glob. Both `finally` blocks call it:

- perf lane: `archiveArchResults(gpuTarget, "*_results.json")`
- correctness lane: `archiveArchResults(arch,
"dispatcher_*_results.json")`

Archived names become e.g. `gfx942_gemm_universal_results.json` /
`gfx950_dispatcher_gemm_results.json`, so both arches survive and the
arch is in the name. The existing `*_results.json` glob still matches.

The helper never throws (`returnStatus: true` + `allowEmptyArchive:
true`), so a cmake/ninja failure before any JSON exists is still
reported as the real error rather than masked by the archive step. Each
lane starts with `deleteDir()`, so no stale prefixed file can be renamed
twice.

## Consumers

Anything keyed on the exact old names (e.g. the CK legacy perf dashboard
ingest) needs to strip the `<arch>_` prefix, and can now key on it
instead of guessing.

## Testing

Ran the real `runDispatcherPerfTests` / `runDispatcherCorrectnessTests`
from `ck.groovy` under Groovy 4 with only the Jenkins steps mocked:
`buildAndTest` writes exactly the files named by `--json` in the real
`execute_cmd`, `sh` executes for real, and `archiveArtifacts` stores
into one map keyed by path (one artifact per path, like a Jenkins
build). Four lanes (perf/correctness x gfx942/gfx950), each in its own
workspace:

| ck.groovy | archived artifacts |
|---|---|
| develop | 22, all from gfx950 (gfx942 lost) |
| this PR | 42 = 20 gfx942 + 22 gfx950 (the 2 extra are the gfx950-only
`mx_gemm` / `gemm_bquant`) |
| this PR, `buildAndTest` throws | the real build error propagates;
archive step does not throw |

End-to-end check on Jenkins needs a run of this PR with
`USE_CURRENT_BRANCH_FOR_CK_GROOVY=true` (otherwise the `ck` library
loads from develop and the old archive step runs) plus
`RUN_DISPATCHER_PERF_TESTS=true` and
`RUN_DISPATCHER_CORRECTNESS_TESTS=true`. Expected:
`gfx942_*_results.json` and `gfx950_*_results.json` both archived.

JIRA: AICK-2692

Co-authored-by: Muhammed Emin Ozturk <3836908+ozturkosu@users.noreply.github.com>
@assistant-librarian

Copy link
Copy Markdown
Contributor

TheRock Submodule Bump Activity

Newest first

shumway pushed a commit to ROCm/composable_kernel that referenced this pull request Nov 4, 2026
ci(ck): arch-prefix dispatcher lane result JSON so gfx942 and
 gfx950 stop overwriting each other (#14265)

## Summary

`DISPATCHER_PERF` and `DISPATCHER_CORRECTNESS` run gfx942 and gfx950 as
parallel branches of the same build, and both archive
`projects/composablekernel/build/*_results.json` under identical names.
Jenkins keeps one artifact per path, so whichever lane archives last
wins and the other arch's results are dropped every night (e.g. build
#2866 has a single `gemm_universal_results.json`, and all `dispatcher_*`
files are gfx950). The tile_engine JSON carries no arch field, so a
consumer cannot even tell which GPU a surviving file came from.

## Change

One helper in `vars/ck.groovy`, `archiveArchResults(arch, glob)`,
renames each matching file to `<arch>_<name>` and archives the prefixed
glob. Both `finally` blocks call it:

- perf lane: `archiveArchResults(gpuTarget, "*_results.json")`
- correctness lane: `archiveArchResults(arch,
"dispatcher_*_results.json")`

Archived names become e.g. `gfx942_gemm_universal_results.json` /
`gfx950_dispatcher_gemm_results.json`, so both arches survive and the
arch is in the name. The existing `*_results.json` glob still matches.

The helper never throws (`returnStatus: true` + `allowEmptyArchive:
true`), so a cmake/ninja failure before any JSON exists is still
reported as the real error rather than masked by the archive step. Each
lane starts with `deleteDir()`, so no stale prefixed file can be renamed
twice.

## Consumers

Anything keyed on the exact old names (e.g. the CK legacy perf dashboard
ingest) needs to strip the `<arch>_` prefix, and can now key on it
instead of guessing.

## Testing

Ran the real `runDispatcherPerfTests` / `runDispatcherCorrectnessTests`
from `ck.groovy` under Groovy 4 with only the Jenkins steps mocked:
`buildAndTest` writes exactly the files named by `--json` in the real
`execute_cmd`, `sh` executes for real, and `archiveArtifacts` stores
into one map keyed by path (one artifact per path, like a Jenkins
build). Four lanes (perf/correctness x gfx942/gfx950), each in its own
workspace:

| ck.groovy | archived artifacts |
|---|---|
| develop | 22, all from gfx950 (gfx942 lost) |
| this PR | 42 = 20 gfx942 + 22 gfx950 (the 2 extra are the gfx950-only
`mx_gemm` / `gemm_bquant`) |
| this PR, `buildAndTest` throws | the real build error propagates;
archive step does not throw |

End-to-end check on Jenkins needs a run of this PR with
`USE_CURRENT_BRANCH_FOR_CK_GROOVY=true` (otherwise the `ck` library
loads from develop and the old archive step runs) plus
`RUN_DISPATCHER_PERF_TESTS=true` and
`RUN_DISPATCHER_CORRECTNESS_TESTS=true`. Expected:
`gfx942_*_results.json` and `gfx950_*_results.json` both archived.

JIRA: AICK-2692

Co-authored-by: Muhammed Emin Ozturk <3836908+ozturkosu@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants