
Hello!
I've just started using parallel computations in Haskell. parMap works fine, it is so easy to use. However, parMap fails with functions returning lazy structures, e.g. tuples.
This code works as expected:
(parMap rpar) bm tvalues
Using rpar is redundant. That strategy schedules a value to maybe be computed later in parallel, but parMap already distributed work between cores, so you might as well use rseq or something.
bm :: Double -> Double is some heavy function. But if I want to return list of pairs (t, bm t) it doesn't use cpu cores fine (only one is in use):
(parMap rpar) (\t -> (t, bm t)) tvalues
That's only evaluating the pair in parallel. bm t will only be computed when you open up the pairs afterwards. Try rdeepseq instead. Brandon