On Mon, 2007-11-05 at 20:12 +0000, Andrew Coppin wrote: > Hi folks. > > Take a look at this: > > render :: IOArray Point Colour -> (Point -> Colour) -> IO () > render framebuffer fn = mapM_ (\p -> writeArray framebuffer p (fn p)) > all_points > > How do I alter this to compute fn in multiple threads in parallel? (As > you can see from the type signature, the calculation is independent for > each pixel.)
You can spark a thread for each computation of fn, like such: writeArray framebuffer p `parApp` fn p where parApp f x = x `par` f x Or, alternatively, since I believe IOArray is lazy, you could grab a list and hand it to parListChunk (from Parallel.Strategies) or there abouts: xn <- getElems framebuffer evaluate $ parListChunk 100 rwhnf or something (evaluate is from Control.Exception; rwhnf is also from Parallel.Strategies). jcc _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe