(To expand on Yichao's comment: Remove the comma in both for loops) On Thursday, July 14, 2016, Yichao Yu <[email protected]> wrote:
> On Thu, Jul 14, 2016 at 6:49 AM, Michele Giugliano <[email protected] > <javascript:;>> 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. >
