@@ -1011,6 +1011,20 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
10111011 return v
10121012end
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,3 blocksize)
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"
10141028function 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
10411055end
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,3 blocksize)
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-
10561056function 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
10721072end
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
10731077end # module
0 commit comments