From 9b25f93ee32e418479e7ce51471922958baea19b Mon Sep 17 00:00:00 2001 From: alexmul1114 <96952477+alexmul1114@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:34:24 -0500 Subject: [PATCH] Rename benchmark file (baseline) --- benchmark/suites/{gcp_large.jl => gcp-large.jl} | 0 src/gcp-opt.jl | 12 +++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) rename benchmark/suites/{gcp_large.jl => gcp-large.jl} (100%) diff --git a/benchmark/suites/gcp_large.jl b/benchmark/suites/gcp-large.jl similarity index 100% rename from benchmark/suites/gcp_large.jl rename to benchmark/suites/gcp-large.jl diff --git a/src/gcp-opt.jl b/src/gcp-opt.jl index ca0e88d..393a8bf 100644 --- a/src/gcp-opt.jl +++ b/src/gcp-opt.jl @@ -131,8 +131,18 @@ function gcp_grad_U!( I in CartesianIndices(X) ] # Use faster MTTKRPs algorithm - faster_mttkrps!(GU, M, Y) + #faster_mttkrps!(GU, M, Y) + #return ntuple(Val(N)) do k + # return rmul!(GU[k], Diagonal(M.λ)) + #end + # MTTKRPs (inefficient but simple) return ntuple(Val(N)) do k + Yk = reshape(PermutedDimsArray(Y, [k; setdiff(1:N, k)]), size(X, k), :) + Zk = similar(Yk, prod(size(X)[setdiff(1:N, k)]), ncomponents(M)) + for j in Base.OneTo(ncomponents(M)) + Zk[:, j] = reduce(kron, [view(M.U[i], :, j) for i in reverse(setdiff(1:N, k))]) + end + mul!(GU[k], Yk, Zk) return rmul!(GU[k], Diagonal(M.λ)) end end