[Haskell-cafe] GHC threaded runtimes and pure functions

Don Stewart dons at galois.com
Wed Sep 16 10:23:14 EDT 2009


gregorypropf:
> One of the things I liked about Haskell was the notion of pure functions and
> the fact that they can be, in theory, automatically parallelized on multicore
> hardware. I think this will become a huge deal in a few years as cores
> multiply.  My question is simply this: under GHC is this what really happens
> with, say a mapping over a pure function.  Yes, I compiled with --threaded and
> am using the +RTS -N2 options on my dual core machine.  Here's the code I wrote
> as a speed test.  It just doesn't seem any faster with -N2.  Using the ps
> command I found that multiple threads are indeed launched (this is Linux) but
> all but one show as being in a state of waiting for some event to finish (the
> ps output flags them all 'Sl'.
> 
> 
> 
> 
> main = do rg <- getStdGen
>           let rs = take 10000000 $ randomRs (1::Int,100000::Int) rg
>               rs'= map (\n -> n*n) rs
>           print rs'


GHC doesn't auto-parallelize.

You would have to use one of the several fine parallelism constructrs to
achieve a speedup.

Here's a recent tutorial,

    http://donsbot.wordpress.com/2009/09/05/defun-2009-multicore-programming-in-haskell-now/

and some background reading,

    http://donsbot.wordpress.com/2009/09/03/parallel-programming-in-haskell-a-reading-list/

-- Don


More information about the Haskell-Cafe mailing list