oneMKL potrf on GPU reports the failing column relative to its 32-column panel
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 55/100
Hướng nghiên cứu
Start with the onemkl<T>potrf shim and the LinearAlgebra.LAPACK.potrf! changes referenced in #754; compare the raw oneMKL info with the failing diagonal entry in the reproducer. Check the existing @test_broken coverage and add a focused regression test for the affected GPU types. Done means the reported failure column is correct, with a raw-shim test retaining coverage of oneMKL's behavior if a workaround is added.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
On the GPU, oneMKL's potrf returns the wrong info when the matrix stops being positive definite after column 32. This is oneMKL 2026.1, through oneAPI_Support_jll 0.11.0, on an Intel Data Center GPU Max 1100.
- Real types get the column's position inside its 32-column panel, i.e.
(j - 1) % 32 + 1. - Complex types get
panel * 1024 + position.
Columns 1 to 32 are reported correctly. The shim onemkl<T>potrf returns computation_error::info() unchanged, so the wrong value comes from oneMKL itself, not from oneAPI.jl.
Reproducer
using oneAPI, LinearAlgebra
using oneAPI: Support, sycl_queue, global_queue
n, j = 100, 50
G = randn(n, n); S = Matrix(Hermitian(G * G' / n + n * I)); S[j, j] = -1
A = oneMatrix(S)
q = sycl_queue(global_queue(oneAPI.context(A), oneAPI.device(A)))
lw = Support.onemklDpotrf_scratchpad_size(q, 'L', n, n)
Support.onemklDpotrf(q, 'L', n, A, n, oneVector{Float64}(undef, lw), lw) # returns 18, expected 50
Observed values for an HPD matrix with A[j, j] = -1. Results are the same for 'L' and 'U'.
| type | n | j | info |
|---|---|---|---|
| Float32 / Float64 | 50 | 17 | 17 |
| Float32 / Float64 | 50 | 33 | 1 |
| Float32 / Float64 | 100 | 50 | 18 |
| Float32 / Float64 | 100 | 100 | 4 |
| Float32 / Float64 | 257 | 257 | 1 |
| ComplexF32 / ComplexF64 | 100 | 50 | 1042 |
| ComplexF32 / ComplexF64 | 100 | 97 | 3073 |
| ComplexF32 / ComplexF64 | 257 | 254 | 7198 |
In every case the factor itself still follows LAPACK potf2. The first diagonal entry that is not a finite positive number is exactly column j, so a caller can recover the right column from the diagonal. getrf's info is correct. The environment variables OverrideDefaultFP64Settings and IGC_EnableDPEmulation make no difference.
Impact. cholesky, issuccess and isposdef only check whether info is nonzero, so they are unaffected. Only the exact column number is wrong, for example in a PosDefException. #754 makes LinearAlgebra.LAPACK.potrf! return info and marks these cases @test_broken.
Possible handling
- Report the bug to Intel, which is the real fix.
- Optionally work around it in Julia: when
info > 0, take the first non-positive diagonal entry as the column. This costs one small diagonal copy on the failure path only, since the shim already synchronizes. If you prefer to carry a workaround, a separate test on the raw shim would keep tracking the oneMKL bug.
- Ngôn ngữ chính
- Julia
- Star
- 218
- Fork
- 36
- Merge trung bình
- 1 ngày 6 giờ
- Pull request đã merge (30 ngày)
- 65
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của JuliaGPU/oneAPI.jl
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 43/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
JuliaGPU/oneAPI.jl#750 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
performance
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
Maintainer thường phản hồi trong vòng 1 ngày
-
libraries upstream
Độ khó 4/5 1-2 ngày Mức phù hợp với người mới 22/100
JuliaGPU/oneAPI.jl#703 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ci
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
JuliaGPU/oneAPI.jl#663 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của JuliaGPU/oneAPI.jl
Issue tương tự
-
mul! with a Symmetric or Hermitian factor throws for a matrix view whose columns are not contiguousĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
JuliaLang/LinearAlgebra.jl#1829 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
MagneticResonanceImaging/MRIReco.jl#320 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
rfordatascience/tidytuesday#1098 ·
-
ci system:windows test
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Single-column TKE example: boundary-layer depth description doesn't match Han & Bretherton (2019)Đang mở
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 82/100
NumericalEarth/Breeze.jl#1143 ·
Maintainer thường phản hồi trong vòng 1 ngày