Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Errors while compiling webkit (Lorenzo Bolla) 2. Red-black tree performance (Adrien Haxaire) 3. Re: Red-black tree performance (Lorenzo Bolla) 4. Re: Red-black tree performance (Adrien Haxaire) 5. Re: Red-black tree performance (Heinrich Apfelmus) 6. Re: Errors while compiling webkit (Dino Morelli) 7. Re: Red-black tree performance (Lorenzo Bolla) ---------------------------------------------------------------------- Message: 1 Date: Tue, 20 Mar 2012 11:09:00 +0000 From: Lorenzo Bolla <lbo...@gmail.com> Subject: [Haskell-beginners] Errors while compiling webkit To: beginners@haskell.org Message-ID: <CADjgTRxSKxhwSxkWKSB+=c76-3xCt=fvqxazax1r0xrger1...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Hi all, I'm trying to compile Haskell's webkit package, but I'm getting this error: $ cabal install webkit Resolving dependencies... [1 of 2] Compiling SetupWrapper ( /tmp/webkit-0.12.3-9205/webkit-0.12.3/SetupWrapper.hs, /tmp/webkit-0.12.3-9205/webkit-0.12.3/dist/setup/SetupWrapper.o ) [2 of 2] Compiling Main ( /tmp/webkit-0.12.3-9205/webkit-0.12.3/Setup.hs, /tmp/webkit-0.12.3-9205/webkit-0.12.3/dist/setup/Main.o ) Linking /tmp/webkit-0.12.3-9205/webkit-0.12.3/dist/setup/setup ... [1 of 2] Compiling Gtk2HsSetup ( Gtk2HsSetup.hs, dist/setup-wrapper/Gtk2HsSetup.o ) [2 of 2] Compiling Main ( SetupMain.hs, dist/setup-wrapper/Main.o ) Linking dist/setup-wrapper/setup ... Configuring webkit-0.12.3... Building webkit-0.12.3... Preprocessing library webkit-0.12.3... dist/build/Graphics/UI/Gtk/WebKit/Types.h:1:22: fatal error: hswebkit.h: No such file or directory compilation terminated. gtk2hsC2hs: Error during preprocessing custom header file cabal: Error: some packages failed to install: webkit-0.12.3 failed during the building phase. The exception was: ExitFailure 1 I'm compiling it inside a hsenv, with this ghc: $ ghc -v Glasgow Haskell Compiler, Version 7.4.1, stage 2 booted by GHC version 7.4.1 Using binary package database: /tmp/webkit/.hsenv/ghc_pkg_db/package.cache wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-c2ff696e5b8ec4d4b2bc2e42085fe471 wired-in package integer-gmp mapped to integer-gmp-0.4.0.0-3cccac07aef8e27023f605c1f45bdf74 wired-in package base mapped to base-4.5.0.0-40b99d05fae6a4eea95ea69e6e0c9702 wired-in package rts mapped to builtin_rts wired-in package template-haskell mapped to template-haskell-2.7.0.0-8c8cd20e21666657195efabced685fe1 wired-in package dph-seq not found. wired-in package dph-par not found. Hsc static flags: -static Any ideas? Thanks, L. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120320/4fb0d868/attachment-0001.htm> ------------------------------ Message: 2 Date: Tue, 20 Mar 2012 15:37:18 +0100 From: Adrien Haxaire <adr...@haxaire.org> Subject: [Haskell-beginners] Red-black tree performance To: <beginners@haskell.org> Message-ID: <fc5670926825f7921bf214edda5e9...@haxaire.org> Content-Type: text/plain; charset=UTF-8; format=flowed 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 ------------------------------ Message: 3 Date: Tue, 20 Mar 2012 16:27:08 +0000 From: Lorenzo Bolla <lbo...@gmail.com> Subject: Re: [Haskell-beginners] Red-black tree performance To: Adrien Haxaire <adr...@haxaire.org> Cc: beginners@haskell.org Message-ID: <CADjgTRwXb+nSH3rq9iq+XXW=jk8Bg5mnQKsKsfyDpzh593=8...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" 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 <adr...@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@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-0001.htm> ------------------------------ Message: 4 Date: Tue, 20 Mar 2012 18:05:15 +0100 From: Adrien Haxaire <adr...@haxaire.org> Subject: Re: [Haskell-beginners] Red-black tree performance To: beginners@haskell.org Message-ID: <20120320170515.GA1426@arch> Content-Type: text/plain; charset=us-ascii On Tue, Mar 20, 2012 at 04:27:08PM +0000, Lorenzo Bolla wrote: > 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. Yes definitely, thank you. That was someting obvious that I didn't see. Now I have 0.64 seconds for C++ and 3.95 for Haskell. That's better! The ratio 3.95/0.64 is 6.171875, which is more in the range I expected. That's twice better from what I had before. I am still looking at the balance function, maybe there is some things I can optimize there as well. -- Adrien Haxaire www.adrienhaxaire.org | @adrienhaxaire ------------------------------ Message: 5 Date: Tue, 20 Mar 2012 18:30:04 +0100 From: Heinrich Apfelmus <apfel...@quantentunnel.de> Subject: Re: [Haskell-beginners] Red-black tree performance To: beginners@haskell.org Message-ID: <jkaeqs$8l6$1...@dough.gmane.org> Content-Type: text/plain; charset=UTF-8; format=flowed Lorenzo Bolla wrote: > 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? Huh, why foldr' and not Data.List.foldl' ? As far as I understand, the former has to evaluate the whole spine of the list first before it can begin to assemble the tree. The latter can start building trees right away. I'm not sure whether the integers in toInsert are evaluated to WHNF. You can make the insert function strict in the first argument to make sure that they are. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com ------------------------------ Message: 6 Date: Tue, 20 Mar 2012 19:12:53 +0000 (UTC) From: Dino Morelli <d...@ui3.info> Subject: Re: [Haskell-beginners] Errors while compiling webkit To: beginners@haskell.org Message-ID: <loom.20120320t200141-...@post.gmane.org> Content-Type: text/plain; charset=utf-8 Lorenzo Bolla <lbolla <at> gmail.com> writes: > Hi all, > > I'm trying to compile Haskell's webkit package, but I'm getting this error: > > > $ cabal install webkit > Resolving dependencies... > [1 of 2] Compiling SetupWrapper ? ? ( /tmp/webkit-0.12.3-9205/webkit- 0.12.3/SetupWrapper.hs, /tmp/webkit-0.12.3-9205/webkit- 0.12.3/dist/setup/SetupWrapper.o ) > [2 of 2] Compiling Main ? ? ? ? ? ? ( /tmp/webkit-0.12.3-9205/webkit- 0.12.3/Setup.hs, /tmp/webkit-0.12.3-9205/webkit-0.12.3/dist/setup/Main.o ) > Linking /tmp/webkit-0.12.3-9205/webkit-0.12.3/dist/setup/setup ... > [1 of 2] Compiling Gtk2HsSetup ? ? ?( Gtk2HsSetup.hs, dist/setup- wrapper/Gtk2HsSetup.o ) > [2 of 2] Compiling Main ? ? ? ? ? ? ( SetupMain.hs, dist/setup-wrapper/Main.o ) > Linking dist/setup-wrapper/setup ... > Configuring webkit-0.12.3... > Building webkit-0.12.3... > Preprocessing library webkit-0.12.3... > dist/build/Graphics/UI/Gtk/WebKit/Types.h:1:22: fatal error: hswebkit.h: No such file or directory > compilation terminated. > gtk2hsC2hs: Error during preprocessing custom header file > cabal: Error: some packages failed to install: > webkit-0.12.3 failed during the building phase. The exception was: > ExitFailure 1 > > > I'm compiling it inside a hsenv, with this ghc: > > $ ghc -v > Glasgow Haskell Compiler, Version 7.4.1, stage 2 booted by GHC version 7.4.1 > > Using binary package database: /tmp/webkit/.hsenv/ghc_pkg_db/package.cache > wired-in package ghc-prim mapped to ghc-prim-0.2.0.0- c2ff696e5b8ec4d4b2bc2e42085fe471 > wired-in package integer-gmp mapped to integer-gmp-0.4.0.0- 3cccac07aef8e27023f605c1f45bdf74 > wired-in package base mapped to base-4.5.0.0-40b99d05fae6a4eea95ea69e6e0c9702 > wired-in package rts mapped to builtin_rts > wired-in package template-haskell mapped to template-haskell-2.7.0.0- 8c8cd20e21666657195efabced685fe1 > wired-in package dph-seq not found. > wired-in package dph-par not found. > Hsc static flags: -static > > > Any ideas? > > Thanks, > L. > By complete chance, I happened to be trying to use webkit today as well, ran into the same problem. Looks like hswebkit.h isn't getting installed anywhere in an include dir on my system. I was able to install and build against the webkit library after copying that file manually myself from the root of the webkit dev dir to /usr/local/include You can get the webkit source to get this .h file: $ darcs get http://code.haskell.org/webkit/ This is of course not a good long-term solution. I'm trying to figure out whom to email or where to send a bug report now. -- Dino Morelli email: d...@ui3.info web: http://ui3.info/d/ pubkey: http://ui3.info/d/dino-4AA4F02D-pub.gpg ------------------------------ Message: 7 Date: Tue, 20 Mar 2012 21:03:30 +0000 From: Lorenzo Bolla <lbo...@gmail.com> Subject: Re: [Haskell-beginners] Red-black tree performance To: Heinrich Apfelmus <apfel...@quantentunnel.de> Cc: beginners@haskell.org Message-ID: <CADjgTRwJgvSkjGUXX4=moutv3y3w_tzkqkv5r6yenuqraqt...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" On Tue, Mar 20, 2012 at 5:30 PM, Heinrich Apfelmus < apfel...@quantentunnel.de> wrote: > Lorenzo Bolla wrote: > >> 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? >> > > Huh, why foldr' and not Data.List.foldl' ? As far as I understand, the > former has to evaluate the whole spine of the list first before it can > begin to assemble the tree. The latter can start building trees right away. > > Yes, definitely foldl' is worth a try, too: main = putStrLn $ show $ maxTree $ foldl' (flip insert) Empty toInsert L. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120320/53b8c3df/attachment.htm> ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 45, Issue 25 *****************************************