Skip to content

Commit 8409fdc

Browse files
committed
PolyesterWeave
1 parent 2ef492c commit 8409fdc

File tree

6 files changed

+31
-33
lines changed

6 files changed

+31
-33
lines changed

Project.toml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
name = "LoopVectorization"
22
uuid = "bdcacae8-1622-11e9-2a5c-532679323890"
33
authors = ["Chris Elrod <[email protected]>"]
4-
version = "0.12.72"
4+
version = "0.12.73"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
8+
CloseOpenIntervals = "fb6a15b2-703c-40df-9091-08a04967cfa9"
89
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
910
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
1011
LayoutPointers = "10f19ff3-798f-405d-979b-55457f8fc047"
1112
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1213
OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
13-
Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588"
14+
PolyesterWeave = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad"
1415
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1516
SLEEFPirates = "476501e8-09a2-5ece-8869-fb82de89a1fa"
1617
Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
17-
StrideArraysCore = "7792a7ef-975c-4747-a70f-980b88e8d1da"
1818
ThreadingUtilities = "8290d209-cae3-49c0-8002-c8c24d57dab5"
1919
UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
2020
VectorizationBase = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f"
@@ -25,11 +25,10 @@ DocStringExtensions = "0.8"
2525
IfElse = "0.1"
2626
LayoutPointers = "0.1.2"
2727
OffsetArrays = "1.4.1"
28-
Polyester = "0.4.0"
28+
PolyesterWeave = "0.1"
2929
Requires = "1"
3030
SLEEFPirates = "0.6.23"
3131
Static = "0.2, 0.3"
32-
StrideArraysCore = "0.2"
3332
ThreadingUtilities = "0.4.5"
3433
UnPack = "1"
3534
VectorizationBase = "0.21.4"

src/LoopVectorization.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ using LayoutPointers: stridedpointer_preserve, GroupedStridedPointers
3030

3131
using IfElse: ifelse
3232

33-
using ThreadingUtilities, Polyester
33+
using ThreadingUtilities, PolyesterWeave
3434
using Base.Broadcast: Broadcasted, DefaultArrayStyle
3535
using LinearAlgebra: Adjoint, Transpose, Diagonal
3636
using Base.Meta: isexpr
@@ -42,7 +42,7 @@ using SLEEFPirates: log_fast, log2_fast, log10_fast, pow, sin_fast, cos_fast, si
4242

4343
using ArrayInterface
4444
using ArrayInterface: OptionallyStaticUnitRange, OptionallyStaticRange, Zero, One, StaticBool, True, False, reduce_tup, indices, UpTri, LoTri, strides, offsets, size, axes, StrideIndex
45-
using StrideArraysCore: CloseOpen, PtrArray
45+
using CloseOpenIntervals: AbstractCloseOpen, CloseOpen#, SafeCloseOpen
4646
# @static if VERSION ≥ v"1.6.0-rc1" #TODO: delete `else` when dropping 1.5 support
4747
# using ArrayInterface: static_step
4848
# else # Julia 1.5 did not define `step` on CartesianIndices

src/codegen/lower_threads.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,8 @@ function thread_one_loops_expr(
387387
var"#nrequest#" = vsub_nw((var"#nthreads#" % UInt32), 0x00000001)
388388
var"##do#thread##" = var"#nrequest#" 0x00000000
389389
if var"##do#thread##"
390-
var"#threads#tuple#", var"#torelease#tuple#" = Polyester.request_threads(var"#nrequest#")
391-
# var"#threads#tuple#", var"#torelease#tuple#" = Polyester.request_threads(Threads.threadid()%UInt32, var"#nrequest#")
390+
var"#threads#tuple#", var"#torelease#tuple#" = PolyesterWeave.request_threads(var"#nrequest#")
391+
# var"#threads#tuple#", var"#torelease#tuple#" = PolyesterWeave.request_threads(Threads.threadid()%UInt32, var"#nrequest#")
392392

393393
var"#thread#factor#0#" = var"#nthreads#"
394394
$iterdef
@@ -397,7 +397,7 @@ function thread_one_loops_expr(
397397
for var"#threads#" in var"#threads#tuple#"
398398

399399
var"#thread#launch#count#" = 0x00000000
400-
var"#thread#mask#" = Polyester.mask(var"#threads#")
400+
var"#thread#mask#" = PolyesterWeave.mask(var"#threads#")
401401
var"#nrequest#" = length(var"#threads#")
402402
var"#threads#remain#" = var"#thread#launch#count#" var"#nrequest#"
403403
var"##do#thread##" |= var"#threads#remain#"
@@ -425,8 +425,8 @@ function thread_one_loops_expr(
425425
var"#nrem#thread#0#" -= var"#nrequest#"
426426
end
427427
else# eliminate undef var errors that the compiler should be able to figure out are unreachable, but doesn't
428-
var"#torelease#tuple#" = (zero(Polyester.worker_type()),)
429-
var"#threads#tuple#" = (Polyester.UnsignedIteratorEarlyStop(zero(Polyester.worker_type()), 0x00000000),)
428+
var"#torelease#tuple#" = (zero(PolyesterWeave.worker_type()),)
429+
var"#threads#tuple#" = (PolyesterWeave.UnsignedIteratorEarlyStop(zero(PolyesterWeave.worker_type()), 0x00000000),)
430430
end
431431
end
432432
var"#avx#call#args#" = $avxcall_args
@@ -436,7 +436,7 @@ function thread_one_loops_expr(
436436
for var"#i#" eachindex(var"#threads#tuple#")
437437
var"#threads#" = var"#threads#tuple#"[var"#i#"]
438438

439-
var"#thread#mask#" = Polyester.mask(var"#threads#")
439+
var"#thread#mask#" = PolyesterWeave.mask(var"#threads#")
440440
var"#threads#remain#" = (length(var"#threads#tuple#") == 1) || (var"#thread#mask#" zero(var"#thread#mask#"))
441441
while var"#threads#remain#"
442442
VectorizationBase.assume(var"#thread#mask#" zero(var"#thread#mask#"))
@@ -448,7 +448,7 @@ function thread_one_loops_expr(
448448
$update_return_values
449449
var"#threads#remain#" = var"#thread#mask#" 0x00000000
450450
end
451-
Polyester.free_threads!(var"#torelease#tuple#"[var"#i#"])
451+
PolyesterWeave.free_threads!(var"#torelease#tuple#"[var"#i#"])
452452
end
453453
$retexpr
454454
end
@@ -581,8 +581,8 @@ function thread_two_loops_expr(
581581
var"#loop#1#start#init#" = var"#iter#start#0#"
582582
var"##do#thread##" = var"#nrequest#" 0x00000000
583583
if var"##do#thread##"
584-
# var"#threads#tuple#", var"#torelease#tuple#" = Polyester.request_threads(Threads.threadid(), var"#nrequest#")
585-
var"#threads#tuple#", var"#torelease#tuple#" = Polyester.request_threads(var"#nrequest#")
584+
# var"#threads#tuple#", var"#torelease#tuple#" = PolyesterWeave.request_threads(Threads.threadid(), var"#nrequest#")
585+
var"#threads#tuple#", var"#torelease#tuple#" = PolyesterWeave.request_threads(var"#nrequest#")
586586
var"##do#thread##" = false
587587
$iterdef1
588588
$iterdef2
@@ -593,7 +593,7 @@ function thread_two_loops_expr(
593593
var"#nrequest#" = length(var"#threads#")
594594
# @show var"#base#block#size#thread#0#", var"#block#rem#step#0#" var"#base#block#size#thread#1#", var"#block#rem#step#1#"
595595
var"#thread#launch#count#" = 0x00000000
596-
var"#thread#mask#" = Polyester.mask(var"#threads#")
596+
var"#thread#mask#" = PolyesterWeave.mask(var"#threads#")
597597
var"#threads#remain#" = var"#thread#launch#count#" var"#nrequest#"
598598
var"##do#thread##" |= var"#threads#remain#"
599599
while var"#threads#remain#"
@@ -630,8 +630,8 @@ function thread_two_loops_expr(
630630
end
631631
end
632632
else# eliminate undef var errors that the compiler should be able to figure out are unreachable, but doesn't
633-
var"#torelease#tuple#" = (zero(Polyester.worker_type()),)
634-
var"#threads#tuple#" = Polyester.UnsignedIteratorEarlyStop(zero(Polyester.worker_type()), 0x00000000)
633+
var"#torelease#tuple#" = (zero(PolyesterWeave.worker_type()),)
634+
var"#threads#tuple#" = PolyesterWeave.UnsignedIteratorEarlyStop(zero(PolyesterWeave.worker_type()), 0x00000000)
635635
end
636636
end
637637
# @show $lastboundexpr
@@ -641,7 +641,7 @@ function thread_two_loops_expr(
641641
var"#thread#id#" = 0x00000000
642642
for var"#i#" eachindex(var"#threads#tuple#")
643643
var"#threads#" = var"#threads#tuple#"[var"#i#"]
644-
var"#thread#mask#" = Polyester.mask(var"#threads#")
644+
var"#thread#mask#" = PolyesterWeave.mask(var"#threads#")
645645
var"#threads#remain#" = (length(var"#threads#tuple#") == 1) || (var"#thread#mask#" zero(var"#thread#mask#"))
646646
while var"#threads#remain#"
647647
VectorizationBase.assume(var"#thread#mask#" zero(var"#thread#mask#"))
@@ -653,7 +653,7 @@ function thread_two_loops_expr(
653653
$update_return_values
654654
var"#threads#remain#" = var"#thread#mask#" 0x00000000
655655
end
656-
Polyester.free_threads!(var"#torelease#tuple#"[var"#i#"])
656+
PolyesterWeave.free_threads!(var"#torelease#tuple#"[var"#i#"])
657657
end
658658
$retexpr
659659
end

src/condense_loopset.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ end
222222
## turn a LoopSet into a type object which can be used to reconstruct the LoopSet.
223223

224224
@inline zerorangestart(r::Base.OneTo) = CloseOpen(maybestaticlast(r))
225-
@inline zerorangestart(r::CloseOpen) = CloseOpen(length(r))
226-
@inline zerorangestart(r::CloseOpen{Zero}) = r
225+
@inline zerorangestart(r::AbstractCloseOpen) = CloseOpen(length(r))
226+
@inline zerorangestart(r::AbstractCloseOpen{Zero}) = r
227227
@inline zerorangestart(r::AbstractUnitRange) = Zero():One():(maybestaticlast(r)-maybestaticfirst(r))
228228
@inline zerorangestart(r::AbstractRange) = Zero():static_step(r):(maybestaticlast(r)-maybestaticfirst(r))
229229
@inline zerorangestart(r::CartesianIndices) = CartesianIndices(map(zerorangestart, r.indices))
@@ -420,7 +420,6 @@ end
420420

421421

422422
@inline densewrapper(sp, A) = sp
423-
# @inline dummy_ptrarray(sp::AbstractStridedPointer{T,N}, A::AbstractArray{T,N}) where {T,N} = PtrArray(sp, VectorizationBase.zerotuple(Val{N}()), VectorizationBase.val_dense_dims(A))
424423
@inline densewrapper(sp::AbstractStridedPointer{T,N}, A::AbstractArray{T,N}) where {T,N} = _densewrapper(sp, VectorizationBase.val_dense_dims(A))
425424
@inline _densewrapper(sp, ::Nothing) = sp
426425
@inline _densewrapper(sp::AbstractStridedPointer, ::Val{D}) where {D} = VectorizationBase.DensePointerWrapper{D}(sp)

src/modeling/graphs.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,12 @@ function addexpr(ex, incr::Integer)
200200
end
201201
staticmulincr(ptr, incr) = Expr(:call, lv(:staticmul), Expr(:call, :eltype, ptr), incr)
202202

203-
@inline cmpend(i::Int, r::CloseOpen) = i < getfield(r,:upper)
203+
@inline cmpend(i::Int, r::AbstractCloseOpen) = i < getfield(r,:upper)
204204
@inline cmpend(i::Int, r::AbstractUnitRange) = i last(r)
205205
@inline cmpend(i::Int, r::AbstractRange) = i last(r)
206206

207-
@inline vcmpend(i::Int, r::CloseOpen, ::StaticInt{W}) where {W} = i vsub_nsw((getfield(r,:upper) % Int), W)
208-
@inline vcmpendzs(i::Int, r::CloseOpen, ::StaticInt{W}) where {W} = i ((getfield(r,:upper) % Int) & (-W))
207+
@inline vcmpend(i::Int, r::AbstractCloseOpen, ::StaticInt{W}) where {W} = i vsub_nsw((getfield(r,:upper) % Int), W)
208+
@inline vcmpendzs(i::Int, r::AbstractCloseOpen, ::StaticInt{W}) where {W} = i ((getfield(r,:upper) % Int) & (-W))
209209
@inline vcmpend(i::Int, r::AbstractUnitRange, ::StaticInt{W}) where {W} = i vsub_nsw(last(r), W-1)
210210
@inline vcmpendzs(i::Int, r::AbstractUnitRange, ::StaticInt{W}) where {W} = i (length(r) & (-W))
211211
# i = 0
@@ -884,7 +884,7 @@ end
884884
ifelse(ArrayInterface.gt(StaticInt{S}(), Zero()), r, _reverse(r))
885885
end
886886
@inline canonicalize_range(r::OptionallyStaticRange, s::Integer) = s > 0 ? r : _reverse(r)
887-
@inline canonicalize_range(r::CloseOpen) = r
887+
@inline canonicalize_range(r::AbstractCloseOpen) = r
888888
@inline canonicalize_range(r::AbstractUnitRange) = maybestaticfirst(r):maybestaticlast(r)
889889
@inline canonicalize_range(r::OptionallyStaticRange) = canonicalize_range(r, static_step(r))
890890
@inline canonicalize_range(r::AbstractRange) = canonicalize_range(maybestaticfirst(r):static_step(r):maybestaticlast(r))

src/reconstruct_loopset.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ Base.promote_rule(::Type{UpperBoundedInteger{N,S}}, ::Type{T}) where {N,T<:Base.
1414
Base.convert(::Type{T}, i::UpperBoundedInteger) where {T<:Number} = convert(T, i.i)
1515
Base.convert(::Type{UpperBoundedInteger{N,T}}, i::UpperBoundedInteger{N,T}) where {N,T<:Base.BitInteger} = i
1616
upper_bound(_) = typemax(Int)
17-
upper_bound(::Type{CloseOpen{T,UpperBoundedInteger{N,S}}}) where {T,N,S} = N - 1
17+
upper_bound(::Type{CO}) where {T,N,S,CO<:AbstractCloseOpen{T,UpperBoundedInteger{N,S}}} = N - 1
1818

19-
@inline Base.last(r::CloseOpen{<:Integer,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i) - One()
19+
@inline Base.last(r::AbstractCloseOpen{<:Integer,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i) - One()
2020
@inline ArrayInterface.static_last(r::CloseOpen{<:Integer,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i) - One()
21-
@inline Base.length(r::CloseOpen{<:Integer,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i) - getfield(r,:start)
22-
@inline Base.length(r::CloseOpen{Zero,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i)
21+
@inline Base.length(r::AbstractCloseOpen{<:Integer,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i) - getfield(r,:start)
22+
@inline Base.length(r::AbstractCloseOpen{Zero,<:UpperBoundedInteger}) = getfield(getfield(r,:upper),:i)
2323

2424
function Loop(ls::LoopSet, ex::Expr, sym::Symbol, f, s, l, ub::Int)
2525
if (f !== nothing) && (s !== nothing) && (l !== nothing)
@@ -70,7 +70,7 @@ end
7070
function Loop(::LoopSet, ::Expr, sym::Symbol, ::Type{ArrayInterface.OptionallyStaticStepRange{StaticInt{L}, StaticInt{S}, StaticInt{U}}}) where {L,S,U}
7171
static_loop(sym, L, S, U)
7272
end
73-
function Loop(::LoopSet, ::Expr, sym::Symbol, ::Type{CloseOpen{Static{L}, Static{U}}}) where {L,U}
73+
function Loop(::LoopSet, ::Expr, sym::Symbol, ::Type{CO}) where {L,U,CO<:AbstractCloseOpen{Static{L}, Static{U}}}
7474
static_loop(sym, L, 1, U - 1)
7575
end
7676

0 commit comments

Comments
 (0)