@@ -34,7 +34,7 @@ function Base.:\(_A::CuMatOrAdj, _B::CuOrAdj)
34
34
if n < m
35
35
# LQ decomposition
36
36
At = CuMatrix (A' )
37
- F, tau = CUSOLVER . geqrf! (At) # A = RᴴQᴴ
37
+ F, tau = geqrf! (At) # A = RᴴQᴴ
38
38
if B isa CuVector{T}
39
39
CUBLAS. trsv! (' U' , ' C' , ' N' , view (F,1 : n,1 : n), B)
40
40
X = CUDA. zeros (T, m)
@@ -45,15 +45,15 @@ function Base.:\(_A::CuMatOrAdj, _B::CuOrAdj)
45
45
X = CUDA. zeros (T, m, p)
46
46
view (X, 1 : n, :) .= B
47
47
end
48
- CUSOLVER . ormqr! (' L' , ' N' , F, tau, X)
48
+ ormqr! (' L' , ' N' , F, tau, X)
49
49
elseif n == m
50
50
# LU decomposition with partial pivoting
51
- F, p, info = CUSOLVER . getrf! (A) # PA = LU
52
- X = CUSOLVER . getrs! (' N' , F, p, B)
51
+ F, p, info = getrf! (A) # PA = LU
52
+ X = getrs! (' N' , F, p, B)
53
53
else
54
54
# QR decomposition
55
- F, tau = CUSOLVER . geqrf! (A) # A = QR
56
- CUSOLVER . ormqr! (' L' , ' C' , F, tau, B)
55
+ F, tau = geqrf! (A) # A = QR
56
+ ormqr! (' L' , ' C' , F, tau, B)
57
57
if B isa CuVector{T}
58
58
X = B[1 : m]
59
59
CUBLAS. trsv! (' U' , ' N' , ' N' , view (F,1 : m,1 : m), X)
307
307
308
308
# # LU
309
309
310
- function LinearAlgebra. lu! (A:: StridedCuMatrix{T} , :: RowMaximum ; check:: Bool = true ) where {T}
310
+ function _check_lu_success (info, allowsingular)
311
+ if VERSION >= v " 1.11.0-DEV.1535"
312
+ if info < 0 # zero pivot error from unpivoted LU
313
+ LinearAlgebra. checknozeropivot (- info)
314
+ else
315
+ allowsingular || LinearAlgebra. checknonsingular (info)
316
+ end
317
+ else
318
+ LinearAlgebra. checknonsingular (info)
319
+ end
320
+ end
321
+
322
+ function LinearAlgebra. lu! (A:: StridedCuMatrix{T} , :: RowMaximum ;
323
+ check:: Bool = true , allowsingular:: Bool = false ) where {T}
311
324
lpt = getrf! (A)
312
- check && LinearAlgebra . checknonsingular (lpt[3 ])
325
+ check && _check_lu_success (lpt[3 ], allowsingular )
313
326
return LU (lpt[1 ], lpt[2 ], Int (lpt[3 ]))
314
327
end
315
328
0 commit comments