You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement multiply-add interface in LinearAlgebra (#29634)
* Multiply-add interface for BLAS.herk!
* Multiply-add interface for BLAS.syrk!
* Multiply-add interface for gemv!
* Fix UndefRefError from C[i,j]
It may not be defined for Matrix{BigFloat}.
* Multiply-add interface for BLAS.gemm!
* Do not assume *(::Bool, ::eltype(C)) exists
* Test multiply-add interface
* Implement mul! in terms of addmul!
* Document addmul!
* Add multiply-add interface for symmetric matrices
* Add multiply-add interface for Number and UniformScaling
* Use lmul! for beta * C; eltype may not be commutative
* Add _lmul_or_fill!
* Add multiply-add interface for diagonal matrices
* Add multiply-add interface for bi- and tri-diagonal matrices
* Add multiply-add interface for triangular matrices
* Test multiply-add interface in test/generic.jl
* Fix addmul!(C, s::Number, X, alpha, beta)
and addmul!(C, X, s::Number, alpha, beta)
* Special-case alpha=1 beta=0 using type parameter
* Test multiply-add interface in test/uniformscaling.jl
* Test multiply-add interface in test/diagonal.jl
* Use addmul! in SparseArrays
* Systematically test addmul!
* Make MulAddMul benchmark-friendly
* Fix _modify! docstring
* Use MulAddMul in A_mul_B_td!
* Comment out broken test_broken
* Relax rtol based on eltype of matrices A, B, C
* Pass around MulAddMul instead of alpha and beta for type stability
* Inline functions between *(::Matrix, ::Matrix) and gemm_wrapper!
This is required for recovering the performance of current master.
Checked with:
A = [1. 0; 2 0]
@benchmark $A * $A
* Annotate argument type MulAddMul
* Inline all addmul!
* Construct MulAddMul outside A_mul_B_td!
* Add multiply-add interface in test/tridiag.jl
* Mention combined multiply-add in NEWS.md [ci skip]
* Mention that mul!(C, A, B, α, β) is deprecated [ci skip]
* Change API definition to C = ABα + Cβ
* Fix indentation
* Fix triangular.jl
* Fix UndefRefError in multiplication with Diagonal
* Define Base.convert(::Type{Quaternion{T}}, s::Real)
This is required for testset "* and mul! for non-commutative scaling"
in LinearAlgebra/test/generic.jl to pass.
* Rename: addmul! -> mul!
* Fix doctest
* Workaround broadcast error with e.g., triangular matrix of BigFloat
mul!(C::AbstractMatrix, A::SymTridiagonal, B::BiTriSym) =A_mul_B_td!(C, A, B)
342
-
mul!(C::AbstractMatrix, A::BiTriSym, B::BiTriSym) =A_mul_B_td!(C, A, B)
343
-
mul!(C::AbstractMatrix, A::AbstractTriangular, B::BiTriSym) =A_mul_B_td!(C, A, B)
344
-
mul!(C::AbstractMatrix, A::AbstractMatrix, B::BiTriSym) =A_mul_B_td!(C, A, B)
345
-
mul!(C::AbstractMatrix, A::Diagonal, B::BiTriSym) =A_mul_B_td!(C, A, B)
346
-
mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::BiTriSym) =A_mul_B_td!(C, A, B)
347
-
mul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::BiTriSym) =A_mul_B_td!(C, A, B)
348
-
mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::BiTriSym) =A_mul_B_td!(C, A, B)
349
-
mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::BiTriSym) =A_mul_B_td!(C, A, B)
350
-
mul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractVecOrMat}, B::BiTriSym) =A_mul_B_td!(C, A, B)
351
-
mul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractVecOrMat}, B::BiTriSym) =A_mul_B_td!(C, A, B)
352
-
mul!(C::AbstractVector, A::BiTriSym, B::AbstractVector) =A_mul_B_td!(C, A, B)
353
-
mul!(C::AbstractMatrix, A::BiTriSym, B::AbstractVecOrMat) =A_mul_B_td!(C, A, B)
354
-
mul!(C::AbstractVecOrMat, A::BiTriSym, B::AbstractVecOrMat) =A_mul_B_td!(C, A, B)
355
-
mul!(C::AbstractMatrix, A::BiTriSym, B::Transpose{<:Any,<:AbstractVecOrMat}) =A_mul_B_td!(C, A, B) # around bidiag line 330
356
-
mul!(C::AbstractMatrix, A::BiTriSym, B::Adjoint{<:Any,<:AbstractVecOrMat}) =A_mul_B_td!(C, A, B)
357
-
mul!(C::AbstractVector, A::BiTriSym, B::Transpose{<:Any,<:AbstractVecOrMat}) =throw(MethodError(mul!, (C, A, B)))
341
+
@inlinemul!(C::AbstractMatrix, A::SymTridiagonal, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
342
+
@inlinemul!(C::AbstractMatrix, A::BiTriSym, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
343
+
@inlinemul!(C::AbstractMatrix, A::AbstractTriangular, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
344
+
@inlinemul!(C::AbstractMatrix, A::AbstractMatrix, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
345
+
@inlinemul!(C::AbstractMatrix, A::Diagonal, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
346
+
@inlinemul!(C::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
347
+
@inlinemul!(C::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
348
+
@inlinemul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractTriangular}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
349
+
@inlinemul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractTriangular}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
350
+
@inlinemul!(C::AbstractMatrix, A::Adjoint{<:Any,<:AbstractVecOrMat}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
351
+
@inlinemul!(C::AbstractMatrix, A::Transpose{<:Any,<:AbstractVecOrMat}, B::BiTriSym, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
352
+
@inlinemul!(C::AbstractVector, A::BiTriSym, B::AbstractVector, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
353
+
@inlinemul!(C::AbstractMatrix, A::BiTriSym, B::AbstractVecOrMat, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
354
+
@inlinemul!(C::AbstractVecOrMat, A::BiTriSym, B::AbstractVecOrMat, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
355
+
@inlinemul!(C::AbstractMatrix, A::BiTriSym, B::Transpose{<:Any,<:AbstractVecOrMat}, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta)) # around bidiag line 330
356
+
@inlinemul!(C::AbstractMatrix, A::BiTriSym, B::Adjoint{<:Any,<:AbstractVecOrMat}, alpha::Number, beta::Number) =A_mul_B_td!(C, A, B, MulAddMul(alpha, beta))
0 commit comments