Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion docs/src/lts.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,11 +155,20 @@ This workaround is independent of `ONEAPI_LTS` and can be enabled on its own.
`cumsum` are unaffected. It is not reproducible on Xe-LP hardware with the same NEO 25.18 /
IGC 2.11 user-mode driver, so it looks specific to IGC's PVC code generation. There is no
workaround in oneAPI.jl yet.
- **`ComplexF16` sparse reductions.** With Julia 1.13, `sum(A; dims)` and other reductions
along a dimension of a `ComplexF16` sparse matrix return wrong real parts; the imaginary
parts are correct. IGC's load/store combining packs the complex accumulator into a layout
struct, and copying that struct emits a stray move that overwrites the real field with
another lane's data. This is not specific to PVC: the LTS IGC 2.11.7 produces the same
wrong results on DG2. It was fixed upstream in IGC 2.26.0 (and 2.25.10) by
[intel/intel-graphics-compiler@15614f2](https://github.com/intel/intel-graphics-compiler/commit/15614f288101c71739ff41d4e21cef6e4dad3e8e),
which has not been backported to the 2.11 LTS line (checked up to 2.11.54). Building the
module with `-igc_opts 'EnableLdStCombine=0'` avoids it.

## Running the test suite

The test suite reads the same switch and skips the cases the LTS stack cannot support (the
`BFloat16` element type, the BFloat16 example, `ComplexF32` in the accumulate tests). On a multi-tile node, pinning each test
`BFloat16` element type, the BFloat16 example, `ComplexF32` in the accumulate tests, `ComplexF16` in the sparse tests). On a multi-tile node, pinning each test
worker to its own tile avoids the oversubscription that provokes the dropped-tail
corruption:

Expand Down
6 changes: 6 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ init_worker_code = quote
if oneL0.LTS[] && test === TestSuite.test_accumulate
filter!(!=(ComplexF32), typs)
end
# The LTS IGC (2.11) miscompiles the ComplexF16 accumulator of GPUArrays' sparse
# reductions with Julia 1.13, corrupting the real parts. Fixed upstream in IGC 2.26
# (intel/intel-graphics-compiler@15614f2), not in the LTS line; see docs/src/lts.md.
if oneL0.LTS[] && test === TestSuite.test_sparse
filter!(!=(ComplexF16), typs)
end
return typs
end

Expand Down
Loading