From b3f61d45b14ed1023c46824804170109d77e18e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 29 Jul 2025 14:05:45 +0200 Subject: [PATCH 1/4] Speed up dot with asymmetric --- src/factorization.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/factorization.jl b/src/factorization.jl index 407aba1..3ad7a82 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -335,8 +335,8 @@ end function LinearAlgebra.dot(a::Factorization, b::AsymmetricFactorization) # `⟨XΛX', UΣV'⟩ = ⟨ΛX'V, X'UΣ⟩` - XtV = a.factor' * right_factor(b) - XtU = a.factor' * left_factor(b) + XtV = right_factor(b)' * a.factor + XtU = left_factor(b)' * a.factor XtV = MA.broadcast!!(*, XtV, XtU) XtV = _lmul_diag!!(a.scaling, XtV) XtV = _rmul_diag!!(XtV, b.scaling) From b5863e6d9e6efb34636b9b3ea305ba61d9ea4a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 29 Jul 2025 14:46:57 +0200 Subject: [PATCH 2/4] Fix --- src/factorization.jl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/factorization.jl b/src/factorization.jl index 3ad7a82..3564aa6 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -334,13 +334,13 @@ function LinearAlgebra.dot(a::Factorization, b::Factorization) end function LinearAlgebra.dot(a::Factorization, b::AsymmetricFactorization) - # `⟨XΛX', UΣV'⟩ = ⟨ΛX'V, X'UΣ⟩` - XtV = right_factor(b)' * a.factor - XtU = left_factor(b)' * a.factor - XtV = MA.broadcast!!(*, XtV, XtU) - XtV = _lmul_diag!!(a.scaling, XtV) - XtV = _rmul_diag!!(XtV, b.scaling) - return sum(XtV) + # `⟨XΛX', UΣV'⟩ = ⟨U'XΛ, ΣV'X⟩` + UtX = left_factor(b)' * a.factor + VtX = right_factor(b)' * a.factor + UtX = MA.broadcast!!(*, UtX, VtX) + UtX = _rmul_diag!!(XtV, a.scaling) + UtX = _lmul_diag!!(b.scaling, XtV) + return sum(UtX) end function _dot_mat_fact( From e081255a1092bce94502e0519b314cad717a1ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 29 Jul 2025 15:11:22 +0200 Subject: [PATCH 3/4] Update src/factorization.jl --- src/factorization.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/factorization.jl b/src/factorization.jl index 3564aa6..80caada 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -338,7 +338,7 @@ function LinearAlgebra.dot(a::Factorization, b::AsymmetricFactorization) UtX = left_factor(b)' * a.factor VtX = right_factor(b)' * a.factor UtX = MA.broadcast!!(*, UtX, VtX) - UtX = _rmul_diag!!(XtV, a.scaling) + UtX = _rmul_diag!!(UtX, a.scaling) UtX = _lmul_diag!!(b.scaling, XtV) return sum(UtX) end From 434827211e83f55619a8a2dbf246467883d994bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Tue, 29 Jul 2025 15:11:34 +0200 Subject: [PATCH 4/4] Update src/factorization.jl --- src/factorization.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/factorization.jl b/src/factorization.jl index 80caada..5fa722b 100644 --- a/src/factorization.jl +++ b/src/factorization.jl @@ -339,7 +339,7 @@ function LinearAlgebra.dot(a::Factorization, b::AsymmetricFactorization) VtX = right_factor(b)' * a.factor UtX = MA.broadcast!!(*, UtX, VtX) UtX = _rmul_diag!!(UtX, a.scaling) - UtX = _lmul_diag!!(b.scaling, XtV) + UtX = _lmul_diag!!(b.scaling, UtX) return sum(UtX) end