On Thu, Jul 14, 2016 at 6:49 AM, Michele Giugliano <[email protected]> wrote: > 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)
Note that you are looping a over the array. > 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.
