I think I have read that passing around functions in not efficient.
Or maybe this is just anonymous functions?
In any case I want to run some comparison performance tests on many
functions, so have written a general function to perform tests on functions
passed in as arguments. See below.
Q1. Is this a valid strategy? Will the passed-in functions run the same as
when executed with an explicit call?
Q2. In the code below, is there any benefit/downside to running gc() before
each timing?
Q3. I understand the first 3 return values from `@timed`, What are the
other 2 return values? Or where can I read about these?
Are there any other considerations I should be aware of?
function PerformanceTest(f::Function, x::MyType1, y::MyType2, n::Int)
# precompile
@timed f(x, 1)
@timed f(y, 1)
gc() # does this help? or hinder?
(xResult, xElapsed, xAllocated, xGC, xOther) = @timed f(x, n)
gc()
(yResult, yElapsed, yAllocated, yGC, yOther) = @timed f(y, n)
# make sure we get same result
@assert xResult == yResult
@printf("%-30s %15i %15i %8s %12f %12f %8.2f %12i %12i %8.2f\n",
f, xResult, yResult, xResult==yResult, xElapsed, yElapsed, yElapsed/
xElapsed, xAllocated, yAllocated, yAllocated/xAllocated)
yResult
end