Skip to content

Commit 58b06fb

Browse files
committed
Use PagedMergeSort when calling ThreadedPagedMergeSort in version < 1.3
1 parent 4d6e518 commit 58b06fb

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/SortingAlgorithms.jl

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,20 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
10061006
return v
10071007
end
10081008

1009+
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
1010+
1011+
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1012+
lo >= hi && return v
1013+
n = hi + 1 - lo
1014+
blocksize = isqrt(n)
1015+
buf = Vector{eltype(v)}(undef,3blocksize)
1016+
nBlocks = n ÷ blocksize
1017+
blockLocation = Vector{Int}(undef,nBlocks+1)
1018+
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1019+
return v
1020+
end
1021+
1022+
Base.@static if VERSION >= v"1.3"
10091023
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, bufs, blockLocations, c::Channel, threadingThreshold::Integer, o=Base.Order.Forward)
10101024
len = hi + 1 -lo
10111025
if len <= Base.SMALL_THRESHOLD
@@ -1034,20 +1048,6 @@ function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, b
10341048
put!(c,id)
10351049
return v
10361050
end
1037-
1038-
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
1039-
1040-
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1041-
lo >= hi && return v
1042-
n = hi + 1 - lo
1043-
blocksize = isqrt(n)
1044-
buf = Vector{eltype(v)}(undef,3blocksize)
1045-
nBlocks = n ÷ blocksize
1046-
blockLocation = Vector{Int}(undef,nBlocks+1)
1047-
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1048-
return v
1049-
end
1050-
10511051
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering)
10521052
lo >= hi && return v
10531053
n = hi + 1 - lo
@@ -1065,4 +1065,8 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMerg
10651065
threaded_pagedmergesort!(v,lo,hi,bufs,blockLocation,c,threadingThreshold,o)
10661066
return v
10671067
end
1068+
else
1069+
# no multithreading in earlier versions -> use single threaded version instead
1070+
sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering) = sort!(v, lo, hi, PagedMergeSort, o)
1071+
end
10681072
end # module

0 commit comments

Comments
 (0)