Sounds fair.  I would be trying for a refactoring approach, in that the API and outward behaviour is identical to before (i.e. a black box), but the inner workings are better.  I noticed that one potential source of improvement is changing the Quicksort algorithm, used in most of the sorting, for Introsort.

To explain Introsort, it is Quicksort most of the time, but switches to Heapsort if the depth level gets degenerate (usually set to "2 log n", where n is the list size - this tends to only happen if the list is carefully crafted to defeat Quicksort), and switches to Insertion Sort when a sublist gets to about 16 entries in size, since while Insertion Sort is O(n²), it has much lower overhead than Quicksort at this size and is hence faster.  Unlike the implementation in C++'s std::sort, I've noticed that it's better to do the insertion sort right there and then because the sublist will more likely still be in the cache; doing it as an end step like std::sort I found is slower in Object Pascal, possibly due to all the cache misses.  I don't know if this is specific to Object Pascal though.  Something to make a benchmark for though.

Gareth aka. Kit

P.S. Because Quicksort, Heapsort and Insertion Sort are all comparison sort algorithms, Introsort is also a comparison algorithm overall, so it is still compatible with classes that have a custom compare routine.


On 05/06/2019 13:33, Michael Van Canneyt wrote:


On Wed, 5 Jun 2019, J. Gareth Moreton wrote:

Still, saying all that, maybe there's room for improvement in rtl-generics in the form of refactoring, like I've found in the compiler itself in a few places.  When you say 'heavyweight', do you mean it's a little slow sometimes or just very bulky when it comes to code size? (Taking a brief look at rtl-generics, there are a lot of classes!)


rtl-generics is meant to be Delphi compatible, so be careful.
Also, Maciej did his best to make it as fast as possible. I doubt you can
improve his code.

If you want to make improvements, I think fcl-stl and fgl units are more amenable to that.

Michael.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to