@@ -1006,6 +1006,20 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
10061006 return v
10071007end
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,3 blocksize)
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"
10091023function 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
10361050end
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,3 blocksize)
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-
10511051function 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
10671067end
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
10681072end # module
0 commit comments