Parallel forkOS does not work on ubuntu
marlowsd at gmail.com
Wed Dec 10 09:24:28 EST 2008
Hoang Truong wrote:
> Hi Simon,
> I tried with forkIO and added another dowork functions but the result is
> the same: only one core is used, three other cores are idle. Do you have
> any other suggestions? Is there anything I should take care when
> installing GHC?
> I also did try the Wombat.hs from the tutorial, but only one core is
> used and the times are almost the same.
> seq sum: 119201850
> seq time: 20.959932 seconds.
> par sum: 119201850
> par time: 20.959547 seconds.
Your program is suffering from microbenchmarkitis, I'm afraid. There's
only one spark, which tickles a bug in the scheduler in 6.10.1 and earlier
(but sometimes doesn't happen due to random scheduling behaviour). Even
with that fixed, the program uses fib which tickles another bug: when
optimised, fib doesn't do any allocation, and GHC's scheduler relies on
allocation happening at regular enough intervals.
In 6.10.1 we never get to do load-balancing in this example, because fib
doesn't ever yield control to the scheduler. In HEAD, where we have
work-stealing and don't rely on the scheduler for load-balancing, the
load-balancing problem goes away but reveals another problem: the second
thread wants to GC, but in order to GC it has to synchronise with the other
running threads, but the other thread is running fib and never yields. We
can fix this by allowing CPUs to GC independently (which we plan to do),
but even then you could still run into the same problem because eventually
a global GC will be required. If you really want to see the program
running in parallel, turn off -O.
More information about the Glasgow-haskell-users