Tutorials icon indicating copy to clipboard operation
Tutorials copied to clipboard

Spurious memory allocation reproduced with `poisson_dev_fe.jl`

Open amartinhuertas opened this issue 3 years ago • 2 comments

This issue is to document a strange behaviour which is reproduced in poisson_dev_fe.jl when the following code is executed:

@time begin
        for i in 1:100_000
          smart_sum(manual_uₕ_array_at_qₖ)
        end
      end

A comment was attached to this code, that I move from there and put here to not forget

WHY THE SECOND PIECE OF CODE REQUIRES A NUMBER OF ALLOCATIONS THAT GROWS
WITH THE NUMBER OF CELLS? I CAN UNDERSTAND THAT THE CACHE ARRAY of
`manual_uₕ_array_at_qₖ` REQUIRES MORE MEMORY IN ABSOLUTE TERMS, BUT I AM NOT
ABLE TO SEE WHY IT GROWS WITH THE NUMBER OF CELLS!!!! ANY HINT?

amartinhuertas avatar Apr 27 '21 02:04 amartinhuertas

I have reduced this problem to a MWE, see this post: https://discourse.julialang.org/t/performance-depends-dramatically-on-compilation-order/58425

I have fixed this here https://github.com/gridap/Gridap.jl/blob/dc2ae5ffbea2a36741796b81b409098c6c4b82c9/src/Arrays/LazyArrays.jl#L284

but this is not in Gridap#master yet since, after introducing these lines, the DG examples take forever to compile (specially the Stokes DG test).

The good news is that the refactoring in the block machinery I am working now cuts down these unbearable compilation times. So the fix of the memory allocations will me merged together with the work in branch https://github.com/gridap/Gridap.jl/tree/block_refactoring

fverdugo avatar Apr 27 '21 05:04 fverdugo

Ok, thanks for your extensive report!

amartinhuertas avatar Apr 27 '21 06:04 amartinhuertas