Some initial results with DPH
Roman Leshchinskiy
rl at cse.unsw.edu.au
Tue Sep 23 04:49:52 EDT 2008
On 23/09/2008, at 14:59, Roman Leshchinskiy wrote:
>> dotp :: [:Int:] -> [:Int:] -> Int
>> dotp v w = I.sumP [: (I.*) x y | x <- v, y <- w :]
>
> The way the vectoriser works at the moment, it will repeat the array
> w (lengthP v) times, i.e., create an array of length (lengthP v *
> lengthP w). This is quite unfortunate and needs to be fused away but
> isn't at the moment. The only advice I can give is to stay away from
> array comprehensions for now. They work but are extremely slow. This
> definition should work fine:
>
> dotp v w = I.sumP (zipWithP (I.*) v w)
Actually, I didn't pay attention when I wrote this. The two are not
equivalent, of course. Only the second one computes the dot product.
With comprehensions, you'd have to write
dotp v w = [: (I.*) x y | x <- v | y <- w :]
I suspect that will perform reasonably even now.
Roman
More information about the Glasgow-haskell-users
mailing list