[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