Repository navigation
Conversation
christiangnrd
force-pushed
the
noka0.9
branch
6 times, most recently
from
October 21, 2026 14:27
67d0704 to
79012cf
Compare
christiangnrd
force-pushed
the
noka0.9
branch
from
October 22, 2026 14:34
79012cf to
0b309e0
Compare
All back-ends, JLArrays included, have moved to KernelAbstractions 0.10. Update the back-end interface docs to define a KernelInterface back-end.
KA 0.9's CPU back-end split kernels at every `@synchronize`, so values live across a barrier had to be `@uniform`, `@private` or recomputed. KA 0.10 runs kernels on POCL, which needs none of that: compute the global indices once and accumulate into a plain variable.
The kernel always launches a 2D grid of fixed-size work-groups and indexes by work-group and local id, which is what KernelInterface exposes directly; KernelAbstractions' `@kernel` transformations add nothing here. Performance is unchanged.
The padding avoided bank conflicts for row-major access, but work-items with consecutive local ids access consecutive elements of a column-major tile (or all read one element of `tile2`), which is conflict-free without it. Padding instead misaligned the columns of `tile2`, keeping each work-item from reading its column with vector loads. On an RTX 5080, 2048x2048 matmul takes 3.5 instead of 5.1 ms for Float32, 4.4 instead of 5.2 ms for ComplexF32, and 3.2 instead of 5.1 ms for Float16. Float64, bound by this GPU's FP64 throughput, stays within 5%.
christiangnrd
force-pushed
the
noka0.9
branch
from
November 5, 2026 22:26
100f023 to
11da6e8
Compare
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.
With JLArrays on KernelAbstractions 0.10, GPUArrays no longer needs to support 0.9: all vendor back-ends have moved to 0.10.
That lets the generic matmul kernel lose the workarounds for KA 0.9's CPU back-end, which split kernels at every
@synchronize(@uniform,@private, and recomputing the global indices after each barrier). The kernel is now written against KernelInterface directly: it always launches a 2D grid of fixed-size work-groups and indexes by work-group and local id, so@kerneladds nothing.It also drops the local-memory padding. The padding avoids bank conflicts for row-major access, but here consecutive work-items access consecutive elements of a column-major tile, or all read the same element, which is conflict-free without it. The padding only misaligned the tile's columns, which kept the work-items from reading them with vector loads. On an RTX 5080, 2048×2048 matmul: