Repository navigation
Conversation
GPUArrays 12.2's sparse reduction kernels return wrong real parts for ComplexF16 when compiled by the LTS IGC (2.11) with Julia 1.13, which broke the Aurora CI. IGC's load/store combining packs the accumulator into a layout struct and miscompiles a copy of it. The bug reproduces on DG2 with IGC 2.11.7, and was fixed upstream in IGC 2.26.0 by intel/intel-graphics-compiler@15614f2, which has not been backported to the 2.11 LTS line.
Contributor
|
Documentation preview: https://juliagpu.github.io/oneAPI.jl/previews/PR760/ |
This branch has not been deployed
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.
Since GPUArrays 12.2, the Aurora
test:lts:1.13job failsgpuarrays/sparse:sum(A; dims)of a ComplexF16 sparse matrix returns wrong real parts, while the imaginary parts are correct. Julia 1.10 on the same machine passes, and so does every other device.This is an IGC bug in the 2.11 LTS line. IGC's load/store combining packs the complex accumulator of the new sparse reduction kernel into a layout struct, and copying that struct emits a stray
movthat overwrites the real field with another lane's data. It reproduces on an Arc A770 with the kernel compiled by the LTS IGC 2.11.7. Bisecting over IGC releases, 2.24.8 is wrong and 2.27.10 is correct. The fix is intel/intel-graphics-compiler@15614f2 (IGC 2.26.0, backported to 2.25.10). It is not onreleases/2.11.x, up to and including v2.11.54. Building with-igc_opts 'EnableLdStCombine=0'also avoids it.This PR drops ComplexF16 from the sparse tests on the LTS stack, as #710 did for ComplexF32 accumulate, and documents the issue in
docs/src/lts.md. A backport to the LTS IGC is being requested separately.Locally,
gpuarrays/sparsepasses withONEAPI_LTS=1(898 tests, ComplexF16 dropped) and without it (1174 tests, unchanged). The ALCF job on this PR is the real check.