[Haskell-cafe] You are in a twisty maze of concurrency libraries,
all different ...
Paul Johnson
paul at cogito.org.uk
Fri Dec 4 14:23:29 EST 2009
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.
More information about the Haskell-Cafe
mailing list