Julia newbie here!

I noticed a performance loss (by means of @benchmark from BenchmarkTools), 
when a function returns a value versus when it does not.

Note: in the code snippet (see below) that I prepared to exemplify my 
issue, there's also an increase in the number of allocations - which I 
don't understand - when returning values. 

However, in my own function (not included here), simulating a mathematical 
model, there is no such a difference in the allocations but a ~5 times 
performance degradation - as indicated by the output of @benchmark below:

(with output returned)

BenchmarkTools.Trial: 
  samples:          10000
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  32.00 bytes  allocs estimate:  1*  minimum time:     62.56 
μs (0.00% GC)
  median time:      62.63 μs (0.00% GC)
  mean time:        72.77 μs (0.00% GC)*
  maximum time:     263.93 μs (0.00% GC)



(without output returned)

BenchmarkTools.Trial: 

  samples:          10000
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  0.00 bytes  allocs estimate:  0
 * minimum time:     11.22 μs (0.00% GC)
  median time:      13.58 μs (0.00% GC)
  mean time:        14.19 μs (0.00% GC)*
  maximum time:     119.73 μs (0.00% GC)



Is any gentle soul out there, patient enough and willing to explain whether 
this might be a Julia's bug, or whether it is my brain's bug... ?


The code snippet is pasted below, including the output of @benchmark: 

function test1()
    a = rand(10000)
    for k=1:10,
        a = rand(10000)
    end
end


function test2()
    a = rand(10000)
    for k=1:10,
        a = rand(10000)
    end
    a[1]
end 


> @benchmark test1() # without output returned

BenchmarkTools.Trial: 
  samples:          10000
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  860.41 kb
  allocs estimate:  44
 * minimum time:     210.01 μs (0.00% GC)
  median time:      292.29 μs (0.00% GC)
  mean time:        483.24 μs (20.95% GC)*
  maximum time:     26.80 ms (93.95% GC)



> @benchmark test2() # with output returned

BenchmarkTools.Trial: 
  samples:          3398
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  2.37 mb
  allocs estimate:  100045
 * minimum time:     704.49 μs (0.00% GC)
  median time:      896.99 μs (0.00% GC)
  mean time:        1.46 ms (17.55% GC)*
  maximum time:     37.16 ms (36.87% GC)


Thank you all.

Reply via email to