perf: add direct subgroup scan path - #17
Merged
Merged
Conversation
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.
Summary
Why it was slower
The corrected scan still copied the entire input before doing useful work. At 100M items that was a 400 MB GPU copy. Its VT=8 shader also made neighboring lanes access values 32 bytes apart and used a Hillis-Steele workgroup scan with 16 barriers. Massively reads separate input/output buffers, accesses contiguous lane data, and uses subgroup operations with two workgroup barriers.
Results
Speedup is Massively time divided by wgpu-primitives time.
Jetson 10M bounded and full-width sort controls stayed within 0.12% of their published baselines.
Full medians and method:
benchmarks/2026-08-08-direct-subgroup-scan.md.Validation
cargo fmt --all --checkcargo test --lib --tests(63 passed)SUBGROUPfallback testcargo clippy --all-targets --all-features -- -D warningscargo doc --no-depscargo package --allow-dirty