Hi,
I have troubles understanding why foo
allocates whereas foo
does not:
1.623 ms (65804 allocations: 1.18 MiB)
7.578 μs (0 allocations: 0 bytes)
Does someone know why?
Thank you,
using Parameters, BenchmarkTools
@with_kw mutable struct Mesh
V = randn(100,110)
end
function foo1(V,g)
Nw,Nv = size(V)
for j=1:Nw
for i=1:Nv
gij = g[j,i]
gimj = (i > 1 ) ? g[j,i-1] : zero(gij)
Fij = (i > 1) ? ((V[j,i]>=0.) ? V[j,i] * gimj : V[j,i] * gij) : zero(gij)
end
end
end
function foo(m,g)
Nw,Nv = size(m.V)
for j=1:Nw
for i=1:Nv
gij = g[j,i]
gimj = (i > 1 ) ? g[j,i-1] : zero(gij)
Fij = (i > 1) ? ((m.V[j,i]>=0.) ? m.V[j,i] * gimj : m.V[j,i] * gij) : zero(gij)
end
end
end
V0 = rand(100,110)
g1 = randn(100,110)
m = Mesh()
@btime foo($m,$g1)
@btime foo1($(m.V),$g1)