Skip to content

Commit

Permalink
Merge pull request #574 from JuliaDiffEq/myb/perf
Browse files Browse the repository at this point in the history
Fix performance regression
  • Loading branch information
ChrisRackauckas committed Dec 9, 2018
2 parents f9206b0 + 85e2dcf commit c6226a5
Showing 1 changed file with 26 additions and 18 deletions.
44 changes: 26 additions & 18 deletions src/misc_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ end
get_chunksize(x) = 0
get_chunksize(x::NLSOLVEJL_SETUP{CS,AD}) where {CS,AD} = CS

@inline @muladd calculate_residuals::Number, u₀::Number, u₁::Number,
α, ρ, internalnorm) = ũ /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)

@inline @muladd calculate_residuals(u₀::Number, u₁::Number,
α, ρ, internalnorm) = (u₁ - u₀) /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)

"""
calculate_residuals!(out, ũ, u₀, u₁, α, ρ)
Expand All @@ -48,16 +54,18 @@ Save element-wise residuals
```
in `out`.
"""
@inline @muladd function calculate_residuals!(out, ũ, u₀, u₁, α, ρ, internalnorm)
@. out = ũ /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)
@inline function calculate_residuals!(out, ũ, u₀, u₁, α, ρ, internalnorm)
@. out = calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm)
nothing
end

@inline @muladd function calculate_residuals!(out::Array{T}, ũ::Array{T}, u₀::Array{T},
@inline function calculate_residuals!(out::Array{T}, ũ::Array{T}, u₀::Array{T},
u₁::Array{T}, α::T2, ρ::Real,
internalnorm) where {T<:Number,T2<:Number}
@tight_loop_macros for i in eachindex(out)
@inbounds out[i] = ũ[i] /+ max(internalnorm(u₀[i]), internalnorm(u₁[i])) * ρ)
end
@tight_loop_macros for i in eachindex(out)
@inbounds out[i] = calculate_residuals(ũ[i], u₀[i], u₁[i], α, ρ, internalnorm)
end
nothing
end

"""
Expand All @@ -69,16 +77,16 @@ Save element-wise residuals
```
in `out`.
"""
@inline @muladd function calculate_residuals!(out, u₀, u₁, α, ρ, internalnorm)
@. out = (u₁ - u₀) /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)
@inline function calculate_residuals!(out, u₀, u₁, α, ρ, internalnorm)
@. out = calculate_residuals(u₀, u₁, α, ρ, internalnorm)
end

@inline @muladd function calculate_residuals!(out::Array{T}, u₀::Array{T},
@inline function calculate_residuals!(out::Array{T}, u₀::Array{T},
u₁::Array{T}, α::T2, ρ::Real,
internalnorm) where {T<:Number,T2<:Number}
@tight_loop_macros for i in eachindex(out)
@inbounds out[i] = (u₁[i] - u₀[i]) /+ max(internalnorm(u₀[i]), internalnorm(u₁[i])) * ρ)
end
@tight_loop_macros for i in eachindex(out)
@inbounds out[i] = calculate_residuals(u₀[i], u₁[i], α, ρ, internalnorm)
end
end

"""
Expand All @@ -89,11 +97,11 @@ Calculate element-wise residuals
\\frac{ũ}{α+\\max{|u₀|,|u₁|}*ρ}
```
"""
@inline @muladd function calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm)
@. ũ /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)
@inline function calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm)
@. calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm)
end

@inline @muladd function calculate_residuals::Array{T}, u₀::Array{T}, u₁::Array{T}, α::T2,
@inline function calculate_residuals::Array{T}, u₀::Array{T}, u₁::Array{T}, α::T2,
ρ::Real, internalnorm) where
{T<:Number,T2<:Number}
out = similar(ũ)
Expand All @@ -109,11 +117,11 @@ Calculate element-wise residuals
\\frac{ũ}{α+\\max{|u₀|,|u₁|}*ρ}
```
"""
@inline @muladd function calculate_residuals(u₀, u₁, α, ρ, internalnorm)
@. (u₁ - u₀) /+ max(internalnorm(u₀), internalnorm(u₁)) * ρ)
@inline function calculate_residuals(u₀, u₁, α, ρ, internalnorm)
@. calculate_residuals(u₀, u₁, α, ρ, internalnorm)
end

@inline @muladd function calculate_residuals(u₀::Array{T}, u₁::Array{T}, α::T2,
@inline function calculate_residuals(u₀::Array{T}, u₁::Array{T}, α::T2,
ρ::Real, internalnorm) where
{T<:Number,T2<:Number}
out = similar(u₀)
Expand Down

0 comments on commit c6226a5

Please sign in to comment.