I've re-implemented the QR decompositions from Julia base in MonteCarlo.jl with the goal of making them non-allocating. I've also made use of LoopVectorization where I could (and RecursiveFactorization to reduce allocations of the matrix inversions in calculate_greens/udt_inv_one_plus).
Here are some benchmarks (via TimerOutputs in julia 1.4.1) for an L=6 attractive Hubbard model on a square lattice (beta = U = t = 1.0, mu=0):
I believe the allocations under UDT don't actually exist. Running julia with track-allocations=user shows 0 allocations in the relevant code. The allocations in calculate_greens are caused by LinearAlgebra.inv!.
I've re-implemented the QR decompositions from Julia base in MonteCarlo.jl with the goal of making them non-allocating. I've also made use of LoopVectorization where I could (and RecursiveFactorization to reduce allocations of the matrix inversions in
calculate_greens
/udt_inv_one_plus
).Here are some benchmarks (via TimerOutputs in julia 1.4.1) for an L=6 attractive Hubbard model on a square lattice (beta = U = t = 1.0, mu=0):
Using StableDQMC's
udt!
andudt_inv_one_plus
:Using
udt_AVX_pivot!
andcalculate_greens_AVX!
from MonbteCarlo:I believe the allocations under
UDT
don't actually exist. Running julia withtrack-allocations=user
shows 0 allocations in the relevant code. The allocations incalculate_greens
are caused byLinearAlgebra.inv!
.