nki(radix_sort): NKI (Trainium) implementation - #296
Open
bowencui123 wants to merge 5 commits into
Open
bowencui123 wants to merge 5 commits into
bowencui123 wants to merge 5 commits into
Conversation
Split out of the consolidated NKI branch cecilia/feature/nki-vector-add (nki-all-operators, PR #259) so each operator can be reviewed on its own. Supersedes PR #226 (older per-operator branch). - run() calls mark_step() per radix pass -> several compiled graphs; the exact-identity profiler (PR #261) refuses to time a fragment (nki_ms=nan) until multi-graph aggregation lands - also carries the operator's `impl_torch.py` change from the NKI branch Co-Authored-By: Cecilia123li <68335867+Cecilia123li@users.noreply.github.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Q38kGmXvyoeM1qtCbheSL
This was referenced Aug 29, 2026
Tunables mirror the Triton search space (`BLOCK_SIZE`); defaults are the previous constants, so autotune=False is unchanged. timing proxy: one radix pass; end-to-end profiling of this multi-graph operator is a framework follow-up Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Q38kGmXvyoeM1qtCbheSL
…ming note - impl_torch replaced torch.sort globally with a bitonic where-network, which would have silently changed the B200 GPU baseline too. Now only the XLA device (where XLA `sort` is NCC_EVRF029-unsupported on trn2) takes the network; CPU/CUDA keep torch.sort — the CPU reference and the frozen GPU numbers are untouched. - impl_nki still carried the pre-#309 note that the profiler times a single pass; the runtime-trace framework sums every graph a timed run() executes, so NKI(ms) covers the whole 16-pass sort. Validated on trn2 (runtime-trace framework, n=1e6 int32, warmup 2 / repeat 10): NKI default 327.85 ms and autotune 327.72 ms (winner block_size=1024 = default; per-pass proxy timed 3 candidates), 17 graphs per iteration summed; the torch-on-Neuron baseline now verifies and times (2625.4 ms, one graph) instead of nan -> speedup 8.01x. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Wvs1tztZTGQFD78YdZaha
Collaborator
Author
|
Review pass (Bowen's assignment): Triton/cuTile alignment + scaffold removal + real autotune & default runs on trn2 (post-#309 runtime-trace timing framework, case 0, #296 radix_sort — CHANGES PUSHED
🤖 Generated with Claude Code |
Code is AST-identical to the previous commit (verified); the design notes live in the PR review comments and git history. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Wvs1tztZTGQFD78YdZaha
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NKI (AWS Trainium) implementation of radix_sort, split out of the consolidated NKI branch
cecilia/feature/nki-vector-add(nki-all-operators, #259) so each operator can be reviewed independently. Supersedes #226 (older per-operator branch: legacyneuronxcc.nkiimports; this is the migratedimport nkiversion).Files: A benchmarks/operators/radix_sort/impl_nki.py, M benchmarks/operators/radix_sort/impl_torch.py
Status: imports and exposes run()/get_last_config() on trn2 (nki 0.6.0); not individually re-benchmarked in this split
impl_torch.pychange from the NKI branchImplementation by @Cecilia123li. Timing/identity infrastructure: #261; Trainium peak/roofline infra: #262.
🤖 Generated with Claude Code
https://claude.ai/code/session_012Q38kGmXvyoeM1qtCbheSL
Autotune (11f19c5)
block_size(elements per partition block S)BLOCK_SIZEautotune=Falsekeeps the previous constants (default numbers unchanged). Validation on trn2, case 0 (default run + autotune code path with the candidate timer stubbed — no sweep;--autotuneruns a real sweep):