<div dir="ltr">Please take a look at Simon Marlow's free book, <font size="2"><i>Parallel and Concurrent Programming in Haskell</i> (<a href="http://chimera.labs.oreilly.com/books/1230000000929">http://chimera.labs.oreilly.com/books/1230000000929</a>). It will teach you a lot about... the things in the title.</font></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 6, 2017 at 10:21 AM Claude Heiland-Allen <<a href="mailto:claude@mathr.co.uk">claude@mathr.co.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Dennis,<br>
<br>
On 06/07/17 17:53, Dennis Raddle wrote:<br>
> I have a program which does backtracking search in a recursive<br>
> function.  I followed the chapter in "Real World Haskell" to parallelize it.<br>
[snip]<br>
> There's no effect from the R.W.H. ideas. Can I get some suggestions as<br>
> to why?<br>
<br>
You can get timing and other useful diagnostics by compiling with<br>
-rtsopts and running with +RTS -s, no need to measure CPU time in your<br>
own program.<br>
<br>
> force :: [a] -> ()<br>
> force xs = go xs `pseq` ()<br>
>   where go (_:xs) = go xs<br>
>         go [] = 1<br>
<br>
This force doesn't do enough, it just walks the spine. Try this, which<br>
forces the elements as well as the shape:<br>
<br>
force :: [a] -> ()<br>
force xs = go xs `pseq` ()<br>
  where go (x:xs) = x `pseq` go xs<br>
        go [] = 1<br>
<br>
Thanks,<br>
<br>
<br>
Claude<br>
--<br>
<a href="https://mathr.co.uk" rel="noreferrer" target="_blank">https://mathr.co.uk</a><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>