[Haskell-cafe] Re: dph question

steffen steffen.siering at googlemail.com
Fri Oct 15 09:33:11 EDT 2010


> I trying to learn a bit about data parallel haskell, and started from the
> wiki page here:http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell.
> Two questions:
>
> The examples express the dot product as:
>
> dotp_double xs ys = sumP [:x *
> <http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.>
> y | x <- xs | y <- ys:]
>
> Unless I'm missing something, shouldn't this actually be:
>
> dotp_double xs ys = sumP [:x *
> <http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.>
> y | x <- xs, y <- ys:]
>
No, array comprehension desugaring works the same way as for list
comprehension.
So this correct:

    dotp_double xs ys = sumP [:x * y | x <- xs | y <- ys:]

After desugaring this will be translated into (simplified):

    dotp_double xs ys = sumP (zipWithP (*) xs ys)

which will multiply the arrays element wise and sum the result.

The other definition

    dotp_double xs ys = sumP [:x * y | x <- xs, y <- ys:]

will be translated into (something equivalent):

    dotp_double xs ys = sumP (concatMapP (\x -> mapP (\y -> x * y)) xs
ys)

which definitely is not the dot product.



More information about the Haskell-Cafe mailing list