Skip to content

Instantly share code, notes, and snippets.

@jbedo
Created September 7, 2013 10:06
Show Gist options
  • Save jbedo/6474379 to your computer and use it in GitHub Desktop.
Save jbedo/6474379 to your computer and use it in GitHub Desktop.
module Main where
import Data.Array.Accelerate as A
import Data.Array.Accelerate.Interpreter as I
import Data.Array.Accelerate.CUDA as C
import Prelude as P
type EFloat = (Float, Float) -- Represents a real number with a value and error
fromFloat :: Float -> EFloat
fromFloat x = (x, 0)
toFloat :: EFloat -> Float
toFloat (val, err) = val + err
add :: Exp EFloat -> Exp EFloat -> Exp EFloat
add = lift2 f
where
f :: (Exp Float, Exp Float) -> (Exp Float, Exp Float) -> (Exp Float, Exp Float)
f (aval, aerr) (bval, berr) = (val, err)
where
val = aval + bval
err = aval - (val - δ) + (bval - δ) + aerr + berr
δ = val - aval
esum x = fold1 add x
main = do
let x = use $ fromList (Z :. 10000) (repeat $ fromFloat 1.01)
print $ I.run $ esum x
print $ C.run $ esum x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment