I am following Chris’s tutorial of mit18337 course, in his lecture note(Optimizing Serial Code), there is an example about evaluating cost of heap allocation.
using LinearAlgebra, BenchmarkTools function alloc_timer(n) A = rand(n,n) B = rand(n,n) C = rand(n,n) t1 = @belapsed $A*$B t2 = @belapsed mul!($C,$A,$B) t1,t2 end ns = 2 .^ (2:7) res = [alloc_timer(n) for n in ns] alloc = [x for x in res] noalloc = [x for x in res]
But when I changed the above piece of code like:
t1 = @belapsed A*B
The system gives me an error: A not defined
I have seen the manual(BenchmarkTools) of BenchmarkTools.jl, it says(hopefully my understanding is right) about the difference of with or without $:
- Having $ means we are evaluating using passing values to a function.
- Not using $ means we are using hard-coded form to evaluate
Back to my problem, I have tried using with and without $ outside a function. It works well.
I don’t know whether is it due to the internal realization or mechanism of the package BenchmarkTools.jl, or rather myself ignoring some syntax problem?