Parallel forkOS does not work on ubuntu

Simon Marlow marlowsd at gmail.com
Tue Dec 9 06:26:27 EST 2008


Hoang Truong wrote:
> Hello everybody,
> 
> I am following "A Tutorial on Parallel and Concurrent Programming in 
> Haskell" and I have a problem with making Haskell to use my multi-cores 
> (Core 2 Quad  CPU). 
> 
> The Haskel version I used is GHC 6.10.1, for Haskell 98. I compile my 
> below program with command: ghc --make -threaded -debug thread0.hs, and 
> run with: thread0 +RTS -N4 while watching the cpu usage on another 
> terminal (by: mpstat -P ALL 1 100), but the program uses only one core 
> of my Ubuntu Linux. 
> 
> Do any of you know why or has any suggestions? Below is my program:

Why do people still insist on using forkOS?  You don't need forkOS unless 
you need to call C libraries that use thread-local state.  Otherwise, it 
will just reduce your performance compared to forkIO.  Admittedly the 
documentation for forkOS has been misleading in the past, but I think the 
current version is pretty clear:

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#v%3AforkOS

> import Control.Concurrent
> import Control.Concurrent.MVar
> 
> fib :: Int -> Int
> fib 0 = 0
> fib 1 = 1
> fib n = fib (n-1) + fib (n-2)
> 
> dowork =
> putStrLn ("fib 35 = " ++ (show (fib 35)))

Perhaps you were expecting "fib 35" to be repeatedly executed each time you 
call dowork?  Laziness means it only gets evaluated once.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list