packages feed

accelerate-0.4.0: examples/simple/DotP.hs

{-# LANGUAGE ParallelListComp #-}

module DotP (dotp, dotp_ref) where

import Prelude   hiding (replicate, zip, map, filter, max, min, not, zipWith)
import qualified Prelude

import Data.Array.Unboxed
import Data.Array.IArray

import Data.Array.Accelerate

dotp :: Vector Float -> Vector Float -> Acc (Scalar Float)
dotp xs ys 
  = let
      xs' = use xs
      ys' = use ys
    in
    fold (+) 0 (zipWith (*) xs' ys')

dotp_ref :: UArray Int Float 
         -> UArray Int Float 
         -> UArray ()  Float
dotp_ref xs ys 
  = listArray ((), ()) $ [sum [x * y | x <- elems xs | y <- elems ys]]