packages feed

accelerate-cufft-1.0: example/Main.hs

module Main where

import qualified Data.Array.Accelerate.CUFFT.Batched as Batched
import qualified Data.Array.Accelerate.CUFFT.Single as Single
import qualified Data.Array.Accelerate.LLVM.PTX as CUDA
import qualified Data.Array.Accelerate as A
import Data.Array.Accelerate (Z(Z), (:.)((:.)))


mainSingle :: IO ()
mainSingle = do
   target <- Batched.getBestTarget
   let dim = Z:.7
   hf <- Single.plan1D target Single.forwardReal dim
   let spec =
          CUDA.run1With target (Single.transform hf) $
          A.fromList dim $ 0 : 1 : repeat (0 :: Float)
   print spec

   hb <- Single.plan1D target Single.inverseReal dim
   print $ CUDA.run1With target (Single.transform hb) spec


mainBatched :: IO ()
mainBatched = do
   let count, width :: Int
       count = 3; width = 7
       dim :: A.DIM2
       dim = Z:.count:.width

   target <- Batched.getBestTarget
   hf <- Batched.plan1D target Batched.forwardReal dim
   let spec =
          CUDA.run1With target (Batched.transform hf) $
          A.fromList dim $ concat $
          take count $ map (take width) $
          iterate (0:) $ 1 : repeat (0 :: Float)
   print spec

   hb <- Batched.plan1D target Batched.inverseReal dim
   print $ CUDA.run1With target (Batched.transform hb) spec


main :: IO ()
main = mainSingle >> mainBatched