feldspar-language-0.5.0.1: Examples/Math/Convolution.hs
module Examples.Math.Convolution where
import qualified Prelude
import Feldspar
import Feldspar.Wrap
import Feldspar.Vector
import Feldspar.Compiler
import Feldspar.Matrix
-- | Generic (not compilable) convolution function
convolution :: (Numeric a) => Vector1 a -> Vector1 a -> Vector1 a
convolution kernel input = map ((scalarProd kernel) . reverse) $ inits input
-- | Wrappers to define the size and element type of vectors in 'convolution'
convolutionInstance :: Data [Float] -> Data [Float] -> Data [Float]
convolutionInstance kernel input = desugar $ convolution kernel' input'
where
input' = thawVector' 256 input
kernel' = thawVector' 16 kernel
-- | Wrappers to define the size and element type of vectors in 'convolution'
convolution_wrapped :: Data' D16 [Float] -> Data' D256 [Float] -> Data [Float]
convolution_wrapped = wrap (convolution :: Vector1 Float -> Vector1 Float -> Vector1 Float)