@@ -7,7 +7,7 @@ using MatrixAlgebraKit: diagview, sign_safe, default_pullback_gauge_atol, defaul
77using MatrixAlgebraKit: LQViaTransposedQR, TruncationByValue, AbstractAlgorithm
88using MatrixAlgebraKit: default_qr_algorithm, default_lq_algorithm, default_svd_algorithm, default_eig_algorithm, default_eigh_algorithm
99import MatrixAlgebraKit: _gpu_geqrf!, _gpu_ungqr!, _gpu_unmqr!, _gpu_gesvd!, _gpu_Xgesvdp!, _gpu_Xgesvdr!, _gpu_gesvdj!, _gpu_geev!
10- import MatrixAlgebraKit: _gpu_heevj!, _gpu_heevd!
10+ import MatrixAlgebraKit: _gpu_heevj!, _gpu_heevd!, _sylvester
1111using CUDA, CUDA. CUBLAS
1212using CUDA: i32
1313using LinearAlgebra
@@ -202,14 +202,9 @@ function MatrixAlgebraKit.default_pullback_gauge_atol(A::AnyCuArray, As...)
202202 return isempty (As′) ? 0 : eps (norm (CuArray .(As′), Inf ))^ (3 / 4 )
203203end
204204
205- function LinearAlgebra. sylvester (A:: AnyCuMatrix , B:: AnyCuMatrix , C:: AnyCuMatrix )
206- #= m = size(A, 1)
207- n = size(B, 2)
208- I_n = fill!(similar(A, n), one(eltype(A)))
209- I_m = fill!(similar(B, m), one(eltype(B)))
210- L = kron(diagm(I_n), A) + kron(adjoint(B), diagm(I_m))
211- x_vec = L \ -vec(C)
212- X = CuMatrix(reshape(x_vec, m, n))=#
205+ function _sylvester (A:: AnyCuMatrix , B:: AnyCuMatrix , C:: AnyCuMatrix )
206+ # https://github.com/JuliaGPU/CUDA.jl/issues/3021
207+ # to add native sylvester to CUDA
213208 hX = sylvester (collect (A), collect (B), collect (C))
214209 return CuArray (hX)
215210end
0 commit comments