On 04/12/09 11:51, Patrick Caldon wrote:
I'm looking for the "right" concurrency library/semantics for what
should be a reasonably simple problem.
I have a little simulator:
runWorldSim :: MTGen -> SimState -> IO SimState
it takes about a second to run on a PC. It's functional except it
whacks the rng, which needs IO. I run 5-10 of these jobs, and then use:
mergeWorld :: [SimState] -> SimState
to pick the best features of the runs and build another possible world
(state). Then I use this new world to run another 5-10 jobs and so
on. I run this through ~20000 iterations.
It's an obvious place for parallelism.
If you can get rid of the need for IO then you can use Control.Parallel
to evaluate pure functions instead. If you only use IO for the random
numbers then you can either keep a StdGen in your SimState or else use a
"State StdGen" monad. Since your random number use is presumably
already in monadic IO you could probably switch to a state monad fairly
trivially.
Paul.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe