Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

oneMKL potrf on GPU reports the failing column relative to its 32-column panel

オープン
#755 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
1〜2日
初心者へのやさしさ
55/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
julia
領域
backend, testing

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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

  1. Report the bug to Intel, which is the real fix.
  2. 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.
主要言語
Julia
スター
218
フォーク
36
平均マージ
1日 6時間
マージ済み PR(30日)
65

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

JuliaGPU/oneAPI.jl のほかの issue

JuliaGPU/oneAPI.jl の issue をすべて見る

似ている issue

Julia の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。