[Haskell-beginners] Red-black tree performance
Lorenzo Bolla
lbolla at gmail.com
Tue Mar 20 17:27:08 CET 2012
Your scripts stack-overflows on my box.
I've made 2 little changes, to ensure strictness. I believe your
"insertList" is building up a huge list of thunks.
import Data.Foldable (foldr')
<snip>
main :: IO ()
main = putStrLn $ show $ maxTree $ foldr' insert Empty toInsert
Better?
L.
On Tue, Mar 20, 2012 at 2:37 PM, Adrien Haxaire <adrien at haxaire.org> wrote:
> Dear list,
>
> I had to implement a red-black tree in C++. So I took Okasaki's functional
> pearl and ported the algorithm to C++, where the rebalancing is done by
> following parent pointers. I shew the Haskell algorithm to colleagues, and
> after admitting it is impressive, they told me whatever the beauty as long
> as we have performance. So I benchmarked it and the C++ implementation,
> insertion of one million elements, and the C++ version is 15 times faster.
> Mainly because in C++ it is just moving pointers around I guess. I have to
> mention that the space usage is outrageous with Haskell.
>
> The Tree is strict in its subtrees, but I think the problem comes from the
> laziness of the balance function, which needs to hold the whole tree.
>
> This reduces to my main question: how can I decompose balance in a
> stricter version? Or maybe I'm completely wrong and there is something
> obvious I am missing?
>
> If you want to take a look, the code is here: http://hpaste.org/65611
>
>
> Adrien
>
>
> PS: compiler options and profiling stderr output
>
> ghc -Wall -O2 -prof -auto-all -rtsopts rbt.hs
>>
>
> rbt.exe +RTS -K20M -p -sstderr -RTS
>>
> 1000000
> 964,079,612 bytes allocated in the heap
> 230,842,072 bytes copied during GC
> 58,442,812 bytes maximum residency (7 sample(s))
> 327,812 bytes maximum slop
> 105 MB total memory in use (0 MB lost due to fragmentation)
>
> Tot time (elapsed) Avg pause Max pause
> Gen 0 1810 colls, 0 par 0.30s 0.27s 0.0001s 0.0034s
> Gen 1 7 colls, 0 par 0.19s 0.19s 0.0278s 0.0938s
>
> INIT time 0.00s ( 0.00s elapsed)
> MUT time 1.78s ( 1.82s elapsed)
> GC time 0.48s ( 0.46s elapsed)
> RP time 0.00s ( 0.00s elapsed)
> PROF time 0.00s ( 0.00s elapsed)
> EXIT time 0.00s ( 0.00s elapsed)
> Total time 2.28s ( 2.28s elapsed)
>
> %GC time 21.2% (20.3% elapsed)
>
> Alloc rate 537,387,643 bytes per MUT second
>
> Productivity 78.8% of total user, 78.5% of total elapsed
>
>
>
>
> --
> Adrien Haxaire
> www.adrienhaxaire.org | @adrienhaxaire
>
> ______________________________**_________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/**mailman/listinfo/beginners<http://www.haskell.org/mailman/listinfo/beginners>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120320/aac10451/attachment.htm>
More information about the Beginners
mailing list