Repository navigation
Skip ComplexF32 accumulate tests on the LTS stack - #710
Merged
Merged
Conversation
Since AcceleratedKernels 0.5.7, `cumprod` of a ComplexF32 vector returns wrong results on Aurora's LTS stack with Julia 1.13 (1.10 passes). Every PR's ALCF job fails on it, and main will too. It does not reproduce on Xe-LP with the same NEO 25.18 / IGC 2.11 user-mode driver, so it needs an IGC fix for PVC; document it as a known LTS issue in the meantime.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #710 +/- ##
==========================================
- Coverage 83.70% 83.07% -0.64%
==========================================
Files 52 51 -1
Lines 4376 4253 -123
==========================================
- Hits 3663 3533 -130
- Misses 713 720 +7 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
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 AcceleratedKernels 0.5.7 (released 2026-10-17), every ALCF job fails, and main's next one will too. On Aurora with Julia 1.13,
cumprodandcumprod!of aComplexF32vector return wrong results (GPUArraystest/testsuite/accumulate.jl:13and:15). This PR skipsComplexF32in the accumulate tests whenONEAPI_LTS=1and documents the bug as a known LTS issue indocs/src/lts.md. The skip uses the existing per-testsupported_eltypesfilter, so other test files still exerciseComplexF32on LTS. Locally, the accumulate tests run 328 tests withONEAPI_LTS=1and 362 without. The difference is exactly theComplexF32testset.This only gets CI green. Aurora users still get wrong
ComplexF32cumprodresults until IGC is fixed.@michel2323, a report for you below: what we know, what to run on Aurora, and what to ask Intel.
Failure
Seen in both Julia 1.13 runs since AK 0.5.7: 39018094747 (#709) and 39060435368 (#704, GitLab pipeline 70454, PBS job 8939625).
ZE_FLAT_DEVICE_HIERARCHY=FLAT, one tile per workerjuliamodulefile (2.11.x, LLVM 15; please confirm the exact build)ONEAPI_LTS=1)What passes and what fails
cumprodComplexF32cumsumComplexF32 (up to 100 000 elements)cumprodComplex{Int32}, ComplexF16, ComplexF64, Float32ONEAPI_LTS=1What we know about the kernel
_slice_scan_tiles!, compiled withSubgroupSize 32.ComplexF32has no native sub-group shuffle, so each value is shuffled as two 32-bit words withOpGroupNonUniformShuffle.OpFMul), and the shuffle lane indexmax(lane - 1, 0)becomes the OpenCL builtinu_sub_sat.u_sub_satand the same two-word shuffles. What only the failing kernel has is complex float multiplication combined with those shuffles.ocloc -device pvc, every kernel is SIMD32 with 128 GRFs and similar flag spills. Nothing stands out, so finding the bug needs PVC hardware.What to run on Aurora first
Run this on one tile, in an environment with oneAPI.jl and AcceleratedKernels 0.5.7 (also in the gist):
repro.jlnosubgroupstells us whether the sub-group shuffle path is involved. If it passes, AK could switch that path off on LTS as a stopgap.ONEAPI_LTS=1so the SPIR-V is identical. This only works if Aurora's kernel driver accepts the newer user-mode driver. If it passes, the bug is fixed upstream and the fix needs a backport. If it fails, it's a current IGC bug on PVC.IGC_DisableLoopUnroll=1,IGC_DisableCodeSinking=1,IGC_VISAOptions="-noSchedule".What to ask Intel
New, wrong results: IGC miscompiles a SIMD32 sub-group scan on Xe-HPC (PVC). A SIMD32 kernel that scans
ComplexF32values with complex multiplication andOpGroupNonUniformShufflegives wrong results on a Data Center GPU Max 1550 with the 25.18 LTS driver (IGC 2.11.x). The same SPIR-V gives correct results on Xe-LP with the same driver. SPIR-V for the same kernel from an older LLVM gives correct results on PVC. Ask Intel to reproduce it on PVC and to check whether current IGC is affected. If it's fixed upstream, ask them to backport the fix to the LTS branch Aurora runs. If not, ask them to fix it and backport. Include the results of steps 1–3. The reproducers are in this gist:repro.jl, plus the SPIR-V of the failing kernel, of its passing Julia 1.10 version, and of two passing Julia 1.13 kernels, as the exact binaries the driver received (clone the gist to get them) and as disassembly, with the command to compile them for PVC. The kernel's arguments are Julia structs, sorepro.jlis the runnable reproducer and the SPIR-V is for compiler-side inspection.Other LTS items that need a fix or backport from Intel (oneAPI.jl works around all of them):
using oneAPIplus a multithreaded GC crashes (#607). The sharedhandlerIndexinPageFaultManagerLinuxgoes out of bounds.LowerGEPForPrivMemSOA promotion). We skip KernelAbstractions' "Private" tests on LTS.IGC_DisableSOAPromotion=1on Auroraundefined reference to _Z17__spirv_IAddCarryll, #708). This is why LTS must use the Khronos translator.llvm_release_160; IGC needs to build against a translator that includes itZE_extension_memory_free_policiesis advertised, butBLOCKING_FREEis not honored: a free with work in flight faults and bans the context.SPV_KHR_bfloat16crashes the runtime; the translator path can't codegenbfloat.