Skip to content

Regression in pow_fast #59804

@pitx-perf

Description

@pitx-perf

Arising from #54512.

MWE:

function norm_me_base(V)
    return sqrt(V[1]^2 + V[2]^2 + V[3]^2)
end

@fastmath function norm_me_fast(V)
    return sqrt(V[1]^2 + V[2]^2 + V[3]^2)
end

function norm_me_base_ntimes(V, n::Int)
    y = 0.0
    for i = 1:n
        y += norm_me_base(V)
    end
    return y
end

function norm_me_fast_ntimes(V, n::Int)
    y = 0.0
    for i = 1:n
        y += norm_me_fast(V)
    end
    return y
end

using BenchmarkTools
using StaticArrays

function benchmark_that()
v = SVector{3}(10.567, 5.4, 2.28)

@btime norm_me_base(v)
# 1.11   2.800 ns (0 allocations: 0 bytes)
# 1.12   2.800 ns (0 allocations: 0 bytes)

@btime norm_me_fast(v)
# 1.11   2.900 ns (0 allocations: 0 bytes)
# 1.12   82.102 ns (0 allocations: 0 bytes)

 @btime norm_me_base_ntimes(v, 1000)
# 1.11   850.667 ns (0 allocations: 0 bytes)
# 1.12   800.000 ns (0 allocations: 0 bytes)

@btime norm_me_fast_ntimes(v, 1000)
# 1.11   857.143 ns (0 allocations: 0 bytes)
# 1.12    79.100 μs (0 allocations: 0 bytes)
end
Function Julia 1.11 Julia 1.12
norm_me_base(v) 2.800 ns (0 allocations: 0 bytes) 2.800 ns (0 allocations: 0 bytes)
norm_me_fast(v) 2.900 ns (0 allocations: 0 bytes) 82.102 ns (0 allocations: 0 bytes)
norm_me_base_ntimes(v, 1000) 850.667 ns (0 allocations: 0 bytes) 800.000 ns (0 allocations: 0 bytes)
norm_me_fast_ntimes(v, 1000) 857.143 ns (0 allocations: 0 bytes) 79.100 μs (0 allocations: 0 bytes)

Metadata

Metadata

Assignees

No one assigned

    Labels

    mathsMathematical functionsperformanceMust go fasterregressionRegression in behavior compared to a previous versionregression 1.12Regression in the 1.12 release

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions