Porting my Integer Sorting Algorithms to D
"Nordlöw"
per.nordlow at gmail.com
Sun Feb 23 08:16:46 PST 2014
On Sunday, 23 February 2014 at 15:10:36 UTC, Russel Winder wrote:
> On Sun, 2014-02-23 at 14:09 +0000, "Nordlöw" wrote:
>> I have a couple of self-implemented C++ integer sort
>> algorithms lying around in my codebase.
>
> What is the basic sort algorithm? Radix sort is generally seen
> as the
> best for sorting integer values currently. But that doesn't
> mean there
> is better, just that that is the one to beat.
>
> Which requires benchmarks. Which requires a framework for
> running
> benchmarks. As far as I am aware D hasn't got one of these as
> yet, but
> it needs one. Such things exists in Python (I am currently
> playing with
> benchmark) and , I am sure, other dynamic languages. It should
> be
> relatively easy to do something with D.
>
>> I also have a parallel merge sort on top of them that uses
>> Intel TBB to give some
>> further speedups.
>
> std.parallelism needs some work to compete with TBB. Though I
> am not
> sure "like" is a term I would use for the TBB API.
>
>> I have tweaked them to also work for floats and doubles,
>> through some interesting bit-fiddling tips I found on the net.
>>
>> Would anybody be interested in reviewing these to give
>> suggestions on how to best port it to Phobos?
>
> I guess I just volunteered.
The non-inplace radix sort algorithm is the most interesting. I
have a test and benchmarking suite along with it. Here's an
extract of it using GCC 4.8.2 with -O3 settings on my Intel
Quad-Core with 8 Hyperthreads. Results are promising. These
benchmarks have been verfied to produce correct results:
Element Count: 1000000
Number of tries: 5
Do in place: 0
ElementType Reference(std::sort) Radix radix_sort
descending_radix_sort parallel_radix_sort tbb_parallel_radix_sort
float 1947812us 16 4.27x 4.02x 4.87x 4.37x
double 2022670us 16 2.30x 2.09x 3.25x 2.31x
uint8_t 1673208us 8 10.4x 10.0x 9.32x 10.6x
uint16_t 1800614us 16 10.1x 9.37x 9.52x 10.1x
uint32_t 1936704us 16 5.45x 4.99x 5.77x 5.42x
Should I place the code on a Github repo or send it to you by
email?
Thx,
Per
More information about the Digitalmars-d
mailing list