I have a couple of instances where a function is determined by some parameters (in a JSON file in this case) and I have to call it in this manner. I'm thinking it should be possible to speed these up via a macro, but I'm a macro newbie. I'll probably post a different question related to that, but would a macro be feasible in an instance like this?
On Wednesday, March 25, 2015 at 12:35:20 PM UTC-7, Tim Holy wrote: > > 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 > >