Skip to content

Commit c2ff440

Browse files
committed
Use PagedMergeSort when calling ThreadedPagedMergeSort in version < 1.3
1 parent a5d5cea commit c2ff440

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
@@ -1011,6 +1011,20 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
10111011
return v
10121012
end
10131013

1014+
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
1015+
1016+
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1017+
lo >= hi && return v
1018+
n = hi + 1 - lo
1019+
blocksize = isqrt(n)
1020+
buf = Vector{eltype(v)}(undef,3blocksize)
1021+
nBlocks = n ÷ blocksize
1022+
blockLocation = Vector{Int}(undef,nBlocks+1)
1023+
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1024+
return v
1025+
end
1026+
1027+
Base.@static if VERSION >= v"1.3"
10141028
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, bufs, blockLocations, c::Channel, threadingThreshold::Integer, o=Base.Order.Forward)
10151029
len = hi + 1 -lo
10161030
if len <= Base.SMALL_THRESHOLD
@@ -1039,20 +1053,6 @@ function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, b
10391053
put!(c,id)
10401054
return v
10411055
end
1042-
1043-
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
1044-
1045-
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1046-
lo >= hi && return v
1047-
n = hi + 1 - lo
1048-
blocksize = isqrt(n)
1049-
buf = Vector{eltype(v)}(undef,3blocksize)
1050-
nBlocks = n ÷ blocksize
1051-
blockLocation = Vector{Int}(undef,nBlocks+1)
1052-
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1053-
return v
1054-
end
1055-
10561056
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering)
10571057
lo >= hi && return v
10581058
n = hi + 1 - lo
@@ -1070,4 +1070,8 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMerg
10701070
threaded_pagedmergesort!(v,lo,hi,bufs,blockLocation,c,threadingThreshold,o)
10711071
return v
10721072
end
1073+
else
1074+
# no multithreading in earlier versions -> use single threaded version instead
1075+
sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering) = sort!(v, lo, hi, PagedMergeSort, o)
1076+
end
10731077
end # module

0 commit comments

Comments
 (0)