3 ms·
Even better would be to write (see dot vectorization [1]): C .= A .+ B Benchmarks for 3 matrices of size 1000x1000: julia> using BenchmarkTools
by ffriend 9y ago
Even better would be to write (see dot vectorization [1]):
C .= A .+ B
Benchmarks for 3 matrices of size 1000x1000:
julia> using BenchmarkTools
julia> @benchmark C = A + B
BenchmarkTools.Trial:
memory estimate: 7.63 MiB
allocs estimate: 2
--------------
minimum time: 2.359 ms (0.00% GC)
median time: 2.713 ms (0.00% GC)
mean time: 3.794 ms (28.81% GC)
maximum time: 62.708 ms (95.27% GC)
--------------
samples: 1314
evals/sample: 1
julia> @benchmark C .= A .+ B
BenchmarkTools.Trial:
memory estimate: 128 bytes
allocs estimate: 4
--------------
minimum time: 1.232 ms (0.00% GC)
median time: 1.320 ms (0.00% GC)
mean time: 1.356 ms (0.00% GC)
maximum time: 2.572 ms (0.00% GC)
--------------
samples: 3651
evals/sample: 1
Note that memory usage dropped from 7.63MiB to 128 bytes.
[1]: https://docs.julialang.org/en/stable/manual/functions/#man-vectorized-1 https://docs.julialang.org/en/stable/manual/functions/#man-v...
- vanderZwan 9y agoThanks! Like I said: I never truly dove into it, although I loved reading about the approach to the type system, and the multiple dispatch. > Note that memory usage dropped from 7.63MiB to 128 bytes. Which is important if you're working with large data-sets. Both for performance and for being able to run the calculations at all.
- stabbles 9y agoA little bit late to the party here, but the number of allocations is really just 0 bytes. It shows 128 bytes because the benchmark is creating new references to A, B and C. To correct this use either interpolation with $A, $B and $C or initialize A, B and C in the setup phase: > @benchmark C .= A .+ B setup = (A = rand(1000, 1000); B = rand(1000, 1000); C = rand(1000, 1000)) BenchmarkTools.Trial: memory estimate: 0 bytes allocs estimate: 0 -------------- minimum time: 2.048 ms (0.00% GC) This is showing 0 bytes indeed.