Below are two tests, in the first a simple polynomial is "hard-coded", in 
the second it is passed as a function. I would expect the two to be 
equivalent, but the second case is significantly faster. Can anybody 
explain what is going on?  @code_warntype doesn't show anything that would 
explain it? 

function test1(N)

    r = 0.234; s = 0.0
    for n = 1:N
        s += r^3 + r^5
    end
    return s
end


function test2(N, f1)
    r = 0.234; s = 0.0
    for n = 1:N
        s += f1(r)
    end
    return s
end


g1(r) = r^3 + r^5


test1(10)
test2(10, g1)


println("Test1: hard-coded functions")
@time test1(1_000_000)
@time test1(1_000_000)
@time test1(1_000_000)


println("Test2: pass functions")
@time test2(1_000_000, g1)
@time test2(1_000_000, g1)
@time test2(1_000_000, g1)




# $ julia5 weird_test2.jl
# Test1: hard-coded functions
#   0.086683 seconds (4.00 M allocations: 61.043 MB, 50.75% gc time)
#   0.142487 seconds (4.00 M allocations: 61.035 MB, 76.91% gc time)
#   0.025388 seconds (4.00 M allocations: 61.035 MB, 4.28% gc time)
# Test2: pass functions
#   0.000912 seconds (5 allocations: 176 bytes)
#   0.000860 seconds (5 allocations: 176 bytes)
#   0.000846 seconds (5 allocations: 176 bytes)





Reply via email to