|
| 1 | +function LinearAlgebra.lu(A::DMatrix{T}, ::LinearAlgebra.NoPivot; check::Bool=true) where T |
| 2 | + A_copy = LinearAlgebra._lucopy(A, LinearAlgebra.lutype(T)) |
| 3 | + return LinearAlgebra.lu!(A_copy, LinearAlgebra.NoPivot(); check=check) |
| 4 | +end |
| 5 | +function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.NoPivot; check::Bool=true) where T |
| 6 | + zone = one(T) |
| 7 | + mzone = -one(T) |
| 8 | + Ac = A.chunks |
| 9 | + mt, nt = size(Ac) |
| 10 | + iscomplex = T <: Complex |
| 11 | + trans = iscomplex ? 'C' : 'T' |
| 12 | + |
| 13 | + Dagger.spawn_datadeps() do |
| 14 | + for k in range(1, min(mt, nt)) |
| 15 | + Dagger.@spawn LinearAlgebra.generic_lufact!(InOut(Ac[k, k]), LinearAlgebra.NoPivot(); check) |
| 16 | + for m in range(k+1, mt) |
| 17 | + Dagger.@spawn BLAS.trsm!('R', 'U', 'N', 'N', zone, In(Ac[k, k]), InOut(Ac[m, k])) |
| 18 | + end |
| 19 | + for n in range(k+1, nt) |
| 20 | + Dagger.@spawn BLAS.trsm!('L', 'L', 'N', 'U', zone, In(Ac[k, k]), InOut(Ac[k, n])) |
| 21 | + for m in range(k+1, mt) |
| 22 | + Dagger.@spawn BLAS.gemm!('N', 'N', mzone, In(Ac[m, k]), In(Ac[k, n]), zone, InOut(Ac[m, n])) |
| 23 | + end |
| 24 | + end |
| 25 | + end |
| 26 | + end |
| 27 | + |
| 28 | + ipiv = DVector([i for i in 1:min(size(A)...)]) |
| 29 | + |
| 30 | + return LinearAlgebra.LU{T,DMatrix{T},DVector{Int}}(A, ipiv, 0) |
| 31 | +end |
0 commit comments