Parallel forkOS does not work on ubuntu

Simon Marlow marlowsd at
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:

> 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.


More information about the Glasgow-haskell-users mailing list