Zeros slower than Array comprehension

When testing some things in the REPL I tried creating a 100x100 matrix of zeros and found it strange that the built-in zeros was slower than creating such a matrix using a Array comprehension.

julia> @btime zeros(Float64,100,100);
  7.369 μs (2 allocations: 78.20 KiB)

julia> @btime Float64[0.0 for i=1:100, j=1:100];
  4.342 μs (2 allocations: 78.20 KiB)

Why is this the case?

They’re about the same if you do

@btime zeros($Float64,100,100);

instead. See https://github.com/JuliaCI/BenchmarkTools.jl/blob/master/doc/manual.md#interpolating-values-into-benchmark-expressions.

1 Like

This is wrong. There’s nothing wrong about @btime zeros(Float64, 100, 100). What you suggest will only make it hit Overhead caused by widening · Issue #71 · JuliaCI/BenchmarkTools.jl · GitHub

That said, I get more timing variations for the zeros than for the comprehension. Neither is consistently faster than the other. Could be memory address related.

In particular, you only need to use $ interpolation on non-constant variables (or expressions that you want to evaluate before benchmarking). Float64 is a constant.

2 Likes