There have been many prior posts about this topic. Maybe we should add a FAQ 
page we can direct people to. In the mean time, your best bet is to search (or 
use FastAnonymous or NumericFuns).

--Tim

On Wednesday, March 25, 2015 11:41:10 AM Phil Tomson wrote:
>  Maybe this is just obvious, but it's not making much sense to me.
> 
> If I have a reference to a function (pardon if that's not the correct
> Julia-ish terminology - basically just a variable that holds a Function
> type) and call it, it runs much more slowly (persumably because it's
> allocating a lot more memory) than it would if I make the same call with
> the function directly.
> 
> Maybe that's not so clear, so let me show an example using the abs function:
> 
>     function test_time()
>          sum = 1.0
>          for i in 1:1000000
>            sum += abs(sum)
>          end
>          sum
>      end
> 
> Run it a few times with @time:
> 
>    julia> @time test_time()
>     elapsed time: 0.007576883 seconds (96 bytes allocated)
>     Inf
> 
>    julia> @time test_time()
>     elapsed time: 0.002058207 seconds (96 bytes allocated)
>     Inf
> 
>     julia> @time test_time()
>     elapsed time: 0.005015882 seconds (96 bytes allocated)
>     Inf
> 
> Now let's try a modified version that takes a Function on the input:
> 
>     function test_time(func::Function)
>          sum = 1.0
>          for i in 1:1000000
>            sum += func(sum)
>          end
>          sum
>      end
> 
> So essentially the same function, but this time the function is passed in.
> Running this version a few times:
> 
>     julia> @time test_time(abs)
>     elapsed time: 0.066612994 seconds (32000080 bytes allocated, 31.05%
> gc     time)
>     Inf
> 
>     julia> @time test_time(abs)
>     elapsed time: 0.064705561 seconds (32000080 bytes allocated, 31.16% gc
> time)
>     Inf
> 
> So roughly 10X slower, probably because of the much larger amount of memory
> allocated (32000080 bytes vs. 96 bytes)
> 
> Why does the second version allocate so much more memory? (I'm running
> Julia 0.3.6 for this testcase)
> 
> Phil

Reply via email to