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
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
