# Linear algebra/algorithm: possible speed up for summing up matrices commutators

**URL:** <https://discourse.julialang.org/t/linear-algebra-algorithm-possible-speed-up-for-summing-up-matrices-commutators/31912>\
**Category:** Performance\
**Created:** [December 5, 2019, 5:13pm UTC](https://discourse.julialang.org/t/linear-algebra-algorithm-possible-speed-up-for-summing-up-matrices-commutators/31912 "2019-12-05T17:13:55Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Egwene\_al\_Vere](https://avatars.discourse-cdn.com/v4/letter/e/df788c/32.png) [@Egwene\_al\_Vere](https://discourse.julialang.org/u/Egwene_al_Vere)\
**Post date:** [December 5, 2019, 5:13pm UTC](https://discourse.julialang.org/t/linear-algebra-algorithm-possible-speed-up-for-summing-up-matrices-commutators/31912/1 "2019-12-05T17:13:56Z")

</div>

With matrix commutator [A,B] \equiv AB-BA, consider the sum of \sum\_{i=1}^k [MF\_i, F\_{k-i+1}], where M and F\_{j} are known matrices. I’m using something like this that allocate in advance:

```julia
using LinearAlgebra
using BenchmarkTools

function comu!(r, a, b) # r = a*b-b*a, allocated r
    idy = one(eltype(r))
    mul!(r, a, b)
    mul!(r, b, a, -idy, idy)
end

function cm_sum!(res_k, k, f, mx, tmpM, mcmu) # add sum to res_k
    for ik = 1:k
        mul!(tmpM, mx, f[ik])
        comu!(mcmu, tmpM, f[k-ik+1])
        res_k .-= mcmu
    end
end

ndim = 50
k = 60
r = zeros(Float64, ndim, ndim)
mx = rand(ndim, ndim)
t1 = similar(r)
t2 = similar(r)

fs = [rand(ndim, ndim) for j = 1:k]

@btime cm_sum!($r, $k, $fs, $mx, $t1, $t2)

```

> 834.737 μs (0 allocations: 0 bytes)

Other than `@inbounds` and threading/parallelization, are there other julia-specific tricks or more efficient algorithms for this sum?

usage case: mx and fs in real use is not random but given/calculated; this res\_k is one term in a big differential equation system where k also loops over 1 through some cutoff N. Since differential equation also loops over a time domain 0 through t\_final, and the diff. eqn. is iterated over thousands of initial values, this inner-most loop is quite important performance-wise.

Thanks!

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [December 5, 2019, 5:52pm UTC](https://discourse.julialang.org/t/linear-algebra-algorithm-possible-speed-up-for-summing-up-matrices-commutators/31912/2 "2019-12-05T17:52:29Z")

</div>

gpu?
