diff --git a/src/LinSolveAlgo.jl b/src/LinSolveAlgo.jl index 1c677c59b410a2afd76b4bc96421f7a6575879a8..0088d6d8b3b426fd3c516586bb1c7c3c8ad6d15b 100644 --- a/src/LinSolveAlgo.jl +++ b/src/LinSolveAlgo.jl @@ -2,10 +2,12 @@ module LinSolveAlgo import Base.strides +const libblastrampoline = "libblastrampoline" + using LinearAlgebra import LinearAlgebra.BlasInt import LinearAlgebra.BLAS.@blasfunc -import LinearAlgebra.LAPACK: liblapack, chklapackerror +import LinearAlgebra.LAPACK: chklapackerror export LinSolveWs, linsolve_core!, linsolve_core_no_lu!, lu! @@ -39,7 +41,7 @@ for (getrf, getrs, elty) in # ws.lu isn't a view and has continuous storage lda = Ref{BlasInt}(max(1,mm)) info = Ref{BlasInt}(0) - ccall((@blasfunc($getrf), liblapack), Cvoid, + ccall((@blasfunc($getrf), libblastrampoline), Cvoid, (Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{BlasInt},Ref{BlasInt}), m, n, ws.lu, lda, ws.ipiv, info) @@ -72,7 +74,7 @@ for (getrf, getrs, elty) in lda = Ref{BlasInt}(max(1,mm)) ldb = Ref{BlasInt}(max(1,stride(b,2))) info = Ref{BlasInt}(0) - ccall((@blasfunc($getrs), liblapack), Cvoid, + ccall((@blasfunc($getrs), libblastrampoline), Cvoid, (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{$elty}, Ref{BlasInt}, Ref{BlasInt}), diff --git a/src/QrAlgo.jl b/src/QrAlgo.jl index 6d91f3cab3bf64093592186ec11487e374b88f8b..4aca3c83744ed3074eed60910ff06a7807238634 100644 --- a/src/QrAlgo.jl +++ b/src/QrAlgo.jl @@ -1,9 +1,11 @@ module QrAlgo +const libblastrampoline = "libblastrampoline" + using LinearAlgebra import LinearAlgebra: BlasInt import LinearAlgebra.BLAS: @blasfunc -import LinearAlgebra.LAPACK: liblapack, chklapackerror +import LinearAlgebra.LAPACK: chklapackerror export QrWs, QrpWs, geqrf_core!, geqp3!, ormqr_core! @@ -33,7 +35,7 @@ for (geqrf, ormqr, elty) in work = Vector{T}(undef, 1) lwork = Ref{BlasInt}(-1) info = Ref{BlasInt}(0) - ccall((@blasfunc($geqrf), liblapack), Nothing, + ccall((@blasfunc($geqrf), libblastrampoline), Nothing, (Ref{BlasInt}, Ref{BlasInt}, Ptr{T}, Ref{BlasInt}, Ptr{T}, Ptr{T}, Ref{BlasInt}, Ref{BlasInt}), m, n, A, RldA, tau, work, lwork, info) @@ -48,7 +50,7 @@ for (geqrf, ormqr, elty) in m = Ref{BlasInt}(mm) n = Ref{BlasInt}(nn) RldA = Ref{BlasInt}(max(1,stride(A,2))) - ccall((@blasfunc($geqrf), liblapack), Nothing, + ccall((@blasfunc($geqrf), libblastrampoline), Nothing, (Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}), m,n,A,RldA,ws.tau,ws.work,ws.lwork,ws.info) @@ -74,7 +76,7 @@ for (geqrf, ormqr, elty) in k = Ref{BlasInt}(length(ws.tau)) RldA = Ref{BlasInt}(max(1,stride(A,2))) RldC = Ref{BlasInt}(max(1,stride(C,2))) - ccall((@blasfunc($ormqr), liblapack), Nothing, + ccall((@blasfunc($ormqr), libblastrampoline), Nothing, (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}), side, 'N', m, n, k, A, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info) @@ -98,7 +100,7 @@ for (geqrf, ormqr, elty) in k = Ref{BlasInt}(length(ws.tau)) RldA = Ref{BlasInt}(max(1,stride(A.parent,2))) RldC = Ref{BlasInt}(max(1,stride(C,2))) - ccall((@blasfunc($ormqr), liblapack), Nothing, + ccall((@blasfunc($ormqr), libblastrampoline), Nothing, (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}), side, 'T', m, n, k, A.parent, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info) @@ -121,7 +123,7 @@ for (geqrf, ormqr, elty) in k = Ref{BlasInt}(length(ws.tau)) RldA = Ref{BlasInt}(max(1,stride(A,2))) RldC = Ref{BlasInt}(max(1,stride(C,2))) - ccall((@blasfunc($ormqr), liblapack), Nothing, + ccall((@blasfunc($ormqr), libblastrampoline), Nothing, (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}), side, 'N', m, n, k, A, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info) @@ -147,7 +149,7 @@ for (geqrf, ormqr, elty) in k = Ref{BlasInt}(length(ws.tau)) RldA = Ref{BlasInt}(max(1,stride(A.parent,2))) RldC = Ref{BlasInt}(max(1,stride(C,2))) - ccall((@blasfunc($ormqr), liblapack), Nothing, + ccall((@blasfunc($ormqr), libblastrampoline), Nothing, (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt}, Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}), side, $transchar, m, n, k, A.parent, RldA, @@ -182,7 +184,7 @@ for (geqp3, elty) in work = Vector{$elty}(undef, 1) lwork = BlasInt(-1) info = Ref{BlasInt}() - ccall((@blasfunc($geqp3), liblapack), Nothing, + ccall((@blasfunc($geqp3), libblastrampoline), Nothing, (Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{$elty}, Ptr{$elty}, Ref{BlasInt}, Ref{BlasInt}), m, n, A, RldA, jpvt, tau, work, lwork, info) @@ -195,7 +197,7 @@ for (geqp3, elty) in function geqp3!(A::StridedMatrix{$elty}, ws::QrpWs) m, n = size(A) RldA = BlasInt(max(1,stride(A,2))) - ccall((@blasfunc($geqp3), liblapack), Nothing, + ccall((@blasfunc($geqp3), libblastrampoline), Nothing, (Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{$elty}, Ptr{$elty}, Ref{BlasInt}, Ref{BlasInt}), m, n, A, RldA, ws.jpvt, ws.tau, ws.work, ws.lwork, ws.info) diff --git a/src/SchurAlgo.jl b/src/SchurAlgo.jl index a5155b8a30b4c3f31ce0f85a2056b5c7f8f5d5b7..4c7ceb249d66869f40c584ac72095b332010caf4 100644 --- a/src/SchurAlgo.jl +++ b/src/SchurAlgo.jl @@ -4,10 +4,12 @@ module SchurAlgo include("exceptions.jl") +const libblastrampoline = "libblastrampoline" + import LinearAlgebra: USE_BLAS64, LAPACKException import LinearAlgebra: BlasInt, BlasFloat, checksquare, chkstride1 import LinearAlgebra.BLAS: @blasfunc, libblas -import LinearAlgebra.LAPACK: liblapack, chklapackerror +import LinearAlgebra.LAPACK: chklapackerror import Base: has_offset_axes export DgeesWs, dgees!, DggesWs, dgges! @@ -50,7 +52,7 @@ mutable struct DgeesWs RldA = Ref{BlasInt}(max(1,stride(A,2))) Rsort = Ref{UInt8}('N') # mycompare_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble})) - ccall((@blasfunc(dgees_), liblapack), Nothing, + ccall((@blasfunc(dgees_), libblastrampoline), Nothing, (Ref{UInt8}, Ref{UInt8}, Ptr{Nothing}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{Float64}, @@ -99,7 +101,7 @@ function dgees!(ws::DgeesWs,A::StridedMatrix{Float64}) n = Ref{BlasInt}(size(A,1)) RldA = Ref{BlasInt}(max(1,stride(A,2))) myfunc::Function = make_select_function(>=, 1.0) - ccall((@blasfunc(dgees_), liblapack), Cvoid, + ccall((@blasfunc(dgees_), libblastrampoline), Cvoid, (Ref{UInt8}, Ref{UInt8}, Ptr{Cvoid}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64}, @@ -130,7 +132,7 @@ function dgees!(ws::DgeesWs, A::StridedMatrix{Float64}, op, crit) RldA = Ref{BlasInt}(max(1,stride(A,2))) myfunc::Function = make_select_function(op, crit) mycompare_c = @cfunction($myfunc, Cint, (Ptr{Cdouble}, Ptr{Cdouble})) - ccall((@blasfunc(dgees_), liblapack), Cvoid, + ccall((@blasfunc(dgees_), libblastrampoline), Cvoid, (Ref{UInt8}, Ref{UInt8}, Ptr{Cvoid}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64}, @@ -175,7 +177,7 @@ mutable struct DggesWs sdim = BlasInt(0) info = BlasInt(0) mycompare_g_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble}, Ptr{Cdouble})) - ccall((@blasfunc(dgges_), liblapack), Nothing, + ccall((@blasfunc(dgges_), libblastrampoline), Nothing, (Ref{UInt8}, Ref{UInt8}, Ref{UInt8}, Ptr{Nothing}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ref{BlasInt}, Ptr{Float64}, Ptr{Float64}, @@ -209,7 +211,7 @@ function dgges!(jobvsl::Char, jobvsr::Char, A::StridedMatrix{Float64}, B::Stride sdim = Ref{BlasInt}(0) info = Ref{BlasInt}(0) mycompare_g_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble}, Ptr{Cdouble})) - ccall((@blasfunc(dgges_), liblapack), Nothing, + ccall((@blasfunc(dgges_), libblastrampoline), Nothing, (Ref{UInt8}, Ref{UInt8}, Ref{UInt8}, Ptr{Nothing}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64},