in reply to Multi-kernel processors.
I wrote about multi threaded sorting, in a thread about recursion.
Consider the cannonical example of qsort in Haskell:
quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerSorted = quicksort [a | a <- xs, a <= x] biggerSorted = quicksort [a | a <- xs, a > x] in smallerSorted ++ [x] ++ biggerSorted
The way I read that code, the list get split into those elements larger than the pivot and those smaller than the pivot. Each list is recursively sorted, and the Haskell runtime is free to do those two sorts in parallel.
This shows that you can use multiple threads to do sorting, however, as BrowserUk wrote in his insightfull reply, just because you can use recursive threads to do sorting, does not mean that it is a good idea.
I guess if you have very big lists that you need to sort, and the time taken to sort on one processor is very long, then you could consider implementing the first level or two of a recursive qsort. Something like this (untested)
sub multi_thread_sort { my @list = @_; my $pivot = shift @list; my @lowList = grep { $_ < $pivot } @list; my @highList = grep { $_ >= $pivot } @list; # Now start two threads to sort the two lists concurrently. return ( @lowList, $pivot, @highList ); }
|
|---|