
On Thu, 2011-05-12 at 15:29 +0400, Grigory Sarnitskiy wrote:
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
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
The same is valid for functions returning lists. How do I use multiple cores with functions returning tuples?
You probably want deepseq: parMap rpar ((\x -> deepseq x x) . bm) tvalues where bm returns tuples. For examples parMap rpar ((\x -> deepseq x x) . (\t -> (t, bm t)) tvalues If you want to get only head: parMap rpar (\t -> let z = bm t in z `seq` t `seq` (t, z)) tvalues Regards