When you benchmark stuff like this it is good to make a benchmark with as
little noise in it as possible. Here is a version which removes slicing,
bounds checking, allocations etc:
function timeit()
A = rand(1024, 1024)
B = similar(A)
a = @elapsed for i = 1:size(A, 1), j = 1:size(A, 2)
@inbounds B[i,j] = sqrt(abs2(A[i,j]))
end
b = @elapsed for i = 1:size(A, 1), j = 1:size(A, 2)
@inbounds B[i,j] = abs(A[i,j])
end
return a,b
end
as = Float64[]
bs = Float64[]
for i in 1:20
a, b = timeit()
push!(as, a)
push!(bs, b)
println(i)
end
This gives me the results:
julia> mean(as)
0.04173319045
julia> mean(bs)
0.0417097596
which seems pretty much equal to me
On Monday, May 18, 2015 at 4:51:48 PM UTC+2, antony schutz wrote:
>
> Hello,
>
> I just discover abs2() function :v
>
> And I have to say that i'm really surprised that:
> sqrt(abs2( x )) is quicker than abs( x )
>
> For a Matrix of size 512*512 and then a vector of size 512
> 10000 realizations, the mean results are (on a macbook):
>
> abs(x[:,:])
>
> 0.0073665214096
>
> sqrt(abs2(x[:,:]))
>
> 0.0046861180318999995
>
> abs(x[:])
>
> 1.2221291200000001e-5
>
> sqrt(abs2(x[:]))
>
> 1.15177585e-5
>
>
> Regards
>
>
>
>