Oh, I think I realized why that won't work. I think that a program in the State monad, for instance, must execute its computations sequentially. There is no way to "split" a State monad into separate lines of execution from within the monad. I think the answer is that I have to split my computation before my code enters into the State monad. So I need to call runState four times for four cores, or whatever. Something like that. D On Fri, Jul 7, 2017 at 1:33 AM, Dennis Raddle <dennis.raddle@gmail.com> wrote:
I'm looking into using rpar and rseq from Control.Parallel.Strategies. The issue is that most of my code executes in a monad stack including StateT and ExceptT. Can I use the Eval monad at the root of the stack safely?
D
On Thu, Jul 6, 2017 at 10:06 PM, Dennis Raddle <dennis.raddle@gmail.com> wrote:
thanks for the tip, that book is great... I'm reading it now, and it's an easy read, very clear explanations of laziness. I never understood laziness all that well before.
D
On Thu, Jul 6, 2017 at 10:34 AM, Rein Henrichs <rein.henrichs@gmail.com> wrote:
Please take a look at Simon Marlow's free book, *Parallel and Concurrent Programming in Haskell* (http://chimera.labs.o reilly.com/books/1230000000929). It will teach you a lot about... the things in the title.
On Thu, Jul 6, 2017 at 10:21 AM Claude Heiland-Allen <claude@mathr.co.uk> wrote:
Hi Dennis,
On 06/07/17 17:53, Dennis Raddle wrote:
I have a program which does backtracking search in a recursive function. I followed the chapter in "Real World Haskell" to parallelize it. [snip] There's no effect from the R.W.H. ideas. Can I get some suggestions as to why?
You can get timing and other useful diagnostics by compiling with -rtsopts and running with +RTS -s, no need to measure CPU time in your own program.
force :: [a] -> () force xs = go xs `pseq` () where go (_:xs) = go xs go [] = 1
This force doesn't do enough, it just walks the spine. Try this, which forces the elements as well as the shape:
force :: [a] -> () force xs = go xs `pseq` () where go (x:xs) = x `pseq` go xs go [] = 1
Thanks,
Claude -- https://mathr.co.uk _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.