Re: [Haskell-cafe] Don't “ accidentallyparallelize”

2009-09-05 Thread Brent Yorgey
On Sat, Sep 05, 2009 at 11:18:24AM +, Gracjan Polak wrote:
> 
> Hi all,
> 
> In "DEFUN 2009: Multicore Programming in Haskell Now!"
> (http://donsbot.wordpress.com/2009/09/05/defun-2009-multicore-programming-in-haskell-now/),
> slide 30 I see:
> 
> Don't “accidentally parallelize”:
> – f `par` f + e

This creates a spark (potential speculative execution) to evaluate
'f', but whether this actually gets instantiated in another thread
depends on the order in which the main thread evaluates (f + e): if we
get lucky and it decides to work on evaluating 'e' first, then another
thread may get a chance to evaluate 'f' in parallel.  But if the main
thread decides to work on 'f' first then the spark to evaluate 'f'
will never get run and we end up with a sequential computation.

> 
> and that the correct way of achieving parallelism is:
> – f `par` e `pseq` f + e

This means: create a spark to evaluate 'f', then evaluate 'e', and
then finally evaluate f + e.  This ensures that the main thread will
work on 'e' first so that the spark for 'f' has a chance to run in
parallel.

> 
> As a bonus question: what is the difference between `seq` and `pseq`?

x `pseq` y guarantees to evaluate x before y.  There is no such
guarantee with x `seq` y; the only guarantee with `seq` is that x
`seq` y will be _|_ if x is.

-Brent
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Don't “accidentallyparallelize”

2009-09-05 Thread Gracjan Polak

Hi all,

In "DEFUN 2009: Multicore Programming in Haskell Now!"
(http://donsbot.wordpress.com/2009/09/05/defun-2009-multicore-programming-in-haskell-now/),
slide 30 I see:

Don't “accidentally parallelize”:
– f `par` f + e

and that the correct way of achieving parallelism is:
– f `par` e `pseq` f + e

Actually I don't understand the difference between these two forms. Could any
brave soul explain it to me, please?

As a bonus question: what is the difference between `seq` and `pseq`?

-- 
Gracjan


___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe