https://github.com/SaschaWitt/ips4o
https://arxiv.org/abs/1705.02257
As an example, to sort 10 million random longs on my computer it takes std::sort 766 ms (roughly in line with Andrei's numbers) and ips4o::sort takes 274 ms.
[edit:formatting]
https://github.com/SaschaWitt/ips4o
https://arxiv.org/abs/1705.02257
As an example, to sort 10 million random longs on my computer it takes std::sort 766 ms (roughly in line with Andrei's numbers) and ips4o::sort takes 274 ms.
[edit:formatting]
On my office Xeon E5-2690 machine when using multiple threads the runtime decreases like this
840 ms for std::sort
372 ms for IPS4o sequentially
201 ms for 2 threads
104 ms for 4 threads
53 ms for 8 threads
33 ms for 16 threads
How does it behave with almost-sorted data?
There's also some logic to handle the case where there are a lot of equal elements which also results in faster performance than the completely random case.
Another benefit of this algorithm is that it is parallizes extremely well.