Skip to content

Commit 6d8fc6d

Browse files
Merge pull request #29 from JuliaSIMD/check-empty
`@turbo check_empty=true` in most all cases
2 parents 3f20444 + a8817aa commit 6d8fc6d

8 files changed

Lines changed: 27 additions & 21 deletions

File tree

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "VectorizedStatistics"
22
uuid = "3b853605-1c98-4422-8364-4bd93ee0529e"
33
authors = ["C. Brenhin Keller", "Chris Elrod"]
4-
version = "0.5.4"
4+
version = "0.5.5"
55

66
[deps]
77
LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890"

src/argsort.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
function sortnans!(I::AbstractArray, A::AbstractArray, iₗ::Int=firstindex(A), iᵤ::Int=lastindex(A))
33
# Count up NaNs
44
Nₙₐₙ = 0
5-
@turbo for i = iₗ:iᵤ
5+
@turbo check_empty=true for i = iₗ:iᵤ
66
Nₙₐₙ += A[i] != A[i]
77
end
88
# If none, return early

src/quicksort.jl

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ end
4545
function sortnans!(A::AbstractArray, iₗ::Int=firstindex(A), iᵤ::Int=lastindex(A))
4646
# Count up NaNs
4747
Nₙₐₙ = 0
48-
@turbo for i = iₗ:iᵤ
48+
@turbo check_empty=true for i = iₗ:iᵤ
4949
Nₙₐₙ += A[i] != A[i]
5050
end
5151
# If none, return early
@@ -80,7 +80,7 @@ function quickselect!(A::AbstractArray, iₗ::Int=firstindex(A), iᵤ::Int=lasti
8080

8181
# Count up elements that must be moved to upper partition
8282
Nᵤ = 0
83-
@turbo for i = (iₗ+1):iᵤ
83+
@turbo check_empty=true for i = (iₗ+1):iᵤ
8484
Nᵤ += A[i] >= pivot
8585
end
8686
Nₗ = N - Nᵤ
@@ -103,9 +103,15 @@ function quickselect!(A::AbstractArray, iₗ::Int=firstindex(A), iᵤ::Int=lasti
103103
iₚ = iₗ + Nₗ - 1
104104
A[iₗ], A[iₚ] = A[iₚ], A[iₗ]
105105
# Recurse: select from partition containing k
106-
(iₗ <= k < iₚ) && quickselect!(A, iₗ, iₚ, k)
107-
(iₚ < k <= iᵤ) && quickselect!(A, iₚ+1, iᵤ, k)
108-
return A[k]
106+
if iₚ==k
107+
return A[k]
108+
elseif k < iₚ
109+
Nₗ == 2 && return A[iₗ]
110+
quickselect!(A, iₗ, iₚ, k)
111+
else
112+
Nᵤ == 2 && return A[iᵤ]
113+
quickselect!(A, iₚ+1, iᵤ, k)
114+
end
109115
end
110116

111117

src/vcov.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
function _vcov(x::AbstractVector, y::AbstractVector, corrected::Bool, μᵪ::Number, μᵧ::Number, multithreaded::False)
22
# Calculate covariance
33
σᵪᵧ = zero(promote_type(typeof(μᵪ), typeof(μᵧ), Int))
4-
@turbo for i indices((x,y))
4+
@turbo check_empty=true for i indices((x,y))
55
δᵪ = x[i] - μᵪ
66
δᵧ = y[i] - μᵧ
77
σᵪᵧ += δᵪ * δᵧ
@@ -13,7 +13,7 @@ end
1313
function _vcov(x::AbstractVector, y::AbstractVector, corrected::Bool, μᵪ::Number, μᵧ::Number, multithreaded::True)
1414
# Calculate covariance
1515
σᵪᵧ = zero(promote_type(typeof(μᵪ), typeof(μᵧ), Int))
16-
@tturbo for i indices((x,y))
16+
@tturbo check_empty=true for i indices((x,y))
1717
δᵪ = x[i] - μᵪ
1818
δᵧ = y[i] - μᵧ
1919
σᵪᵧ += δᵪ * δᵧ

src/vmean.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function _vmean(A, ::Colon, multithreaded::False)
5555
# Promote type of accumulator to avoid overflow
5656
Tₒ = Base.promote_op(/, eltype(A), Int)
5757
Σ = zero(Tₒ)
58-
@turbo for i eachindex(A)
58+
@turbo check_empty=true for i eachindex(A)
5959
Σ += A[i]
6060
end
6161
return Σ / length(A)
@@ -155,7 +155,7 @@ function _vmean(A, ::Colon, multithreaded::True)
155155
# Promote type of accumulator to avoid overflow
156156
Tₒ = Base.promote_op(/, eltype(A), Int)
157157
Σ = zero(Tₒ)
158-
@tturbo for i eachindex(A)
158+
@tturbo check_empty=true for i eachindex(A)
159159
Σ += A[i]
160160
end
161161
return Σ / length(A)

src/vstd.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ sqrt!(x, multithreaded::Symbol) = sqrt!(x, (multithreaded===:auto && length(x) >
3939
sqrt!(x, multithreaded::Bool) = sqrt!(x, static(multithreaded))
4040
sqrt!(x::Number, multithreaded::StaticBool) = sqrt(x)
4141
function sqrt!(A::AbstractArray, multithreaded::False)
42-
@turbo for i eachindex(A)
42+
@turbo check_empty=true for i eachindex(A)
4343
A[i] = sqrt(A[i])
4444
end
4545
return A
4646
end
4747
function sqrt!(A::AbstractArray, multithreaded::True)
48-
@tturbo for i eachindex(A)
48+
@tturbo check_empty=true for i eachindex(A)
4949
A[i] = sqrt(A[i])
5050
end
5151
return A

src/vsum.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ function _vsum(A, ::Colon, multithreaded::False)
5454
# Promote type of accumulator to avoid overflow
5555
Tₒ = Base.promote_op(+, eltype(A), Int)
5656
Σ = zero(Tₒ)
57-
@turbo for i eachindex(A)
57+
@turbo check_empty=true for i eachindex(A)
5858
Σ += A[i]
5959
end
6060
return Σ
@@ -149,7 +149,7 @@ function _vsum(A, ::Colon, multithreaded::True)
149149
# Promote type of accumulator to avoid overflow
150150
Tₒ = Base.promote_op(+, eltype(A), Int)
151151
Σ = zero(Tₒ)
152-
@tturbo for i eachindex(A)
152+
@tturbo check_empty=true for i eachindex(A)
153153
Σ += A[i]
154154
end
155155
return Σ

src/vvar.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function _vvar(μ::Number, corrected::Bool, A, ::Colon, multithreaded::False)
4848
# Reduce all the dims!
4949
n = length(A)
5050
σ² = zero(typeof(μ))
51-
@turbo for i eachindex(A)
51+
@turbo check_empty=true for i eachindex(A)
5252
δ = A[i] - μ
5353
σ² += δ * δ
5454
end
@@ -58,7 +58,7 @@ function _vvar(μ::Number, corrected::Bool, A, ::Colon, multithreaded::True)
5858
# Reduce all the dims!
5959
n = length(A)
6060
σ² = zero(typeof(μ))
61-
@tturbo for i eachindex(A)
61+
@tturbo check_empty=true for i eachindex(A)
6262
δ = A[i] - μ
6363
σ² += δ * δ
6464
end
@@ -72,12 +72,12 @@ function _vvar(::Nothing, corrected::Bool, A, ::Colon, multithreaded::False)
7272
n = length(A)
7373
Tₒ = Base.promote_op(/, eltype(A), Int)
7474
Σ = zero(Tₒ)
75-
@turbo for i eachindex(A)
75+
@turbo check_empty=true for i eachindex(A)
7676
Σ += A[i]
7777
end
7878
μ = Σ / n
7979
σ² = zero(typeof(μ))
80-
@turbo for i eachindex(A)
80+
@turbo check_empty=true for i eachindex(A)
8181
δ = A[i] - μ
8282
σ² += δ * δ
8383
end
@@ -88,12 +88,12 @@ function _vvar(::Nothing, corrected::Bool, A, ::Colon, multithreaded::True)
8888
n = length(A)
8989
Tₒ = Base.promote_op(/, eltype(A), Int)
9090
Σ = zero(Tₒ)
91-
@tturbo for i eachindex(A)
91+
@tturbo check_empty=true for i eachindex(A)
9292
Σ += A[i]
9393
end
9494
μ = Σ / n
9595
σ² = zero(typeof(μ))
96-
@tturbo for i eachindex(A)
96+
@tturbo check_empty=true for i eachindex(A)
9797
δ = A[i] - μ
9898
σ² += δ * δ
9999
end

0 commit comments

Comments
 (0)