Copyright | [2016..2017] Trevor L. McDonell |
---|---|
License | BSD3 |
Maintainer | Trevor L. McDonell <tmcdonell@cse.unsw.edu.au> |
Stability | experimental |
Portability | non-portable (GHC extensions) |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- data ForeignAcc f where
- ForeignAcc :: String -> (a -> LLVM Native b) -> ForeignAcc (a -> b)
- data ForeignExp f where
- ForeignExp :: String -> IRFun1 Native () (x -> y) -> ForeignExp (x -> y)
- data LLVM target a
- data Native = Native {}
- liftIO :: MonadIO m => IO a -> m a
- module Data.Array.Accelerate.LLVM.Array.Data
- cloneArray :: (Shape sh, Elt e) => Array sh e -> LLVM Native (Array sh e)
Documentation
data ForeignAcc f where Source #
ForeignAcc :: String -> (a -> LLVM Native b) -> ForeignAcc (a -> b) |
Instances
Foreign ForeignAcc Source # | |
Defined in Data.Array.Accelerate.LLVM.Native.Foreign strForeign :: ForeignAcc args -> String liftForeign :: ForeignAcc args -> Q (TExp (ForeignAcc args)) |
data ForeignExp f where Source #
ForeignExp :: String -> IRFun1 Native () (x -> y) -> ForeignExp (x -> y) |
Instances
Foreign ForeignExp Source # | |
Defined in Data.Array.Accelerate.LLVM.Native.Foreign strForeign :: ForeignExp args -> String liftForeign :: ForeignExp args -> Q (TExp (ForeignExp args)) |
The LLVM monad, for executing array computations. This consists of a stack
for the LLVM execution context as well as the per-execution target specific
state target
.
Instances
MonadState target (LLVM target) | |
Execute arch => ExecuteAfun arch (LLVM arch b) | |
Defined in Data.Array.Accelerate.LLVM.Execute executeOpenAfun :: ExecOpenAfun arch aenv (ExecAfunR arch (LLVM arch b)) -> LLVM arch (AvalR arch aenv) -> LLVM arch b | |
Monad (LLVM target) | |
Functor (LLVM target) | |
Applicative (LLVM target) | |
Defined in Data.Array.Accelerate.LLVM.State | |
MonadIO (LLVM target) | |
Defined in Data.Array.Accelerate.LLVM.State | |
MonadMask (LLVM target) | |
Defined in Data.Array.Accelerate.LLVM.State mask :: ((forall a. LLVM target a -> LLVM target a) -> LLVM target b) -> LLVM target b # uninterruptibleMask :: ((forall a. LLVM target a -> LLVM target a) -> LLVM target b) -> LLVM target b # generalBracket :: LLVM target a -> (a -> ExitCase b -> LLVM target c) -> (a -> LLVM target b) -> LLVM target (b, c) # | |
MonadCatch (LLVM target) | |
MonadThrow (LLVM target) | |
Defined in Data.Array.Accelerate.LLVM.State | |
type ExecAfunR arch (LLVM arch b) | |
Defined in Data.Array.Accelerate.LLVM.Execute type ExecAfunR arch (LLVM arch b) = b |
Native machine code JIT execution target
Instances
Skeleton Native | |
Defined in Data.Array.Accelerate.LLVM.Native.CodeGen generate :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun1 Native aenv (sh -> e) -> CodeGen (IROpenAcc Native aenv (Array sh e)) transform :: (Shape sh, Shape sh', Elt a, Elt b) => Native -> UID -> Gamma aenv -> IRFun1 Native aenv (sh' -> sh) -> IRFun1 Native aenv (a -> b) -> IRDelayed Native aenv (Array sh a) -> CodeGen (IROpenAcc Native aenv (Array sh' b)) map :: (Shape sh, Elt a, Elt b) => Native -> UID -> Gamma aenv -> IRFun1 Native aenv (a -> b) -> IRDelayed Native aenv (Array sh a) -> CodeGen (IROpenAcc Native aenv (Array sh b)) fold :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array sh e)) fold1 :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array sh e)) foldSeg :: (Shape sh, Elt e, Elt i, IsIntegral i) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> IRDelayed Native aenv (Segments i) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) fold1Seg :: (Shape sh, Elt e, Elt i, IsIntegral i) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRDelayed Native aenv (Array (sh :. Int) e) -> IRDelayed Native aenv (Segments i) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) scanl :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) scanl' :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e, Array sh e)) scanl1 :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) scanr :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) scanr' :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRExp Native aenv e -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e, Array sh e)) scanr1 :: (Shape sh, Elt e) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (e -> e -> e) -> IRDelayed Native aenv (Array (sh :. Int) e) -> CodeGen (IROpenAcc Native aenv (Array (sh :. Int) e)) permute :: (Shape sh, Shape sh', Elt e) => Native -> UID -> Gamma aenv -> IRPermuteFun Native aenv (e -> e -> e) -> IRFun1 Native aenv (sh -> sh') -> IRDelayed Native aenv (Array sh e) -> CodeGen (IROpenAcc Native aenv (Array sh' e)) backpermute :: (Shape sh, Shape sh', Elt e) => Native -> UID -> Gamma aenv -> IRFun1 Native aenv (sh' -> sh) -> IRDelayed Native aenv (Array sh e) -> CodeGen (IROpenAcc Native aenv (Array sh' e)) stencil :: (Stencil sh a stencil, Elt b) => Native -> UID -> Gamma aenv -> IRFun1 Native aenv (stencil -> b) -> IRBoundary Native aenv (Array sh a) -> IRDelayed Native aenv (Array sh a) -> CodeGen (IROpenAcc Native aenv (Array sh b)) stencil2 :: (Stencil sh a stencil1, Stencil sh b stencil2, Elt c) => Native -> UID -> Gamma aenv -> IRFun2 Native aenv (stencil1 -> stencil2 -> c) -> IRBoundary Native aenv (Array sh a) -> IRDelayed Native aenv (Array sh a) -> IRBoundary Native aenv (Array sh b) -> IRDelayed Native aenv (Array sh b) -> CodeGen (IROpenAcc Native aenv (Array sh c)) | |
Persistent Native | |
Embed Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Embed | |
Execute Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Execute map :: (Shape sh, Elt b) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> LLVM Native (Array sh b) generate :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> LLVM Native (Array sh e) transform :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> LLVM Native (Array sh e) backpermute :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> LLVM Native (Array sh e) fold :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array sh e) fold1 :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array sh e) foldSeg :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> DIM1 -> LLVM Native (Array (sh :. Int) e) fold1Seg :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> DIM1 -> LLVM Native (Array (sh :. Int) e) scanl :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e) scanl1 :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e) scanl' :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e, Array sh e) scanr :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e) scanr1 :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e) scanr' :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> (sh :. Int) -> LLVM Native (Array (sh :. Int) e, Array sh e) permute :: (Shape sh, Shape sh', Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> Bool -> sh -> Array sh' e -> LLVM Native (Array sh' e) stencil1 :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> LLVM Native (Array sh e) stencil2 :: (Shape sh, Elt e) => ExecutableR Native -> Gamma aenv -> AvalR Native aenv -> StreamR Native -> sh -> sh -> LLVM Native (Array sh e) aforeign :: (Arrays as, Arrays bs) => String -> (StreamR Native -> as -> LLVM Native bs) -> StreamR Native -> as -> LLVM Native bs | |
Link Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Link linkForTarget :: ObjectR Native -> LLVM Native (ExecutableR Native) | |
Compile Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Compile compileForTarget :: DelayedOpenAcc aenv a -> Gamma aenv -> LLVM Native (ObjectR Native) | |
Foreign Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Foreign | |
Intrinsic Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Compile intrinsicForTarget :: Native -> HashMap ShortByteString Label | |
Target Native Source # | |
Defined in Data.Array.Accelerate.LLVM.Native.Target | |
Remote Native | Data instance for arrays in the native backend. We assume a shared-memory machine, and just manipulate the underlying Haskell array directly. |
Defined in Data.Array.Accelerate.LLVM.Native.Array.Data allocateRemote :: (Shape sh, Elt e) => sh -> LLVM Native (Array sh e) useRemoteR :: (ArrayElt e, ArrayPtrs e ~ Ptr a, Storable a, Typeable a, Typeable e) => Int -> Maybe (StreamR Native) -> ArrayData e -> LLVM Native () copyToRemoteR :: (ArrayElt e, ArrayPtrs e ~ Ptr a, Storable a, Typeable a, Typeable e) => Int -> Int -> Maybe (StreamR Native) -> ArrayData e -> LLVM Native () copyToHostR :: (ArrayElt e, ArrayPtrs e ~ Ptr a, Storable a, Typeable a, Typeable e) => Int -> Int -> Maybe (StreamR Native) -> ArrayData e -> LLVM Native () copyToPeerR :: (ArrayElt e, ArrayPtrs e ~ Ptr a, Storable a, Typeable a, Typeable e) => Int -> Int -> Native -> Maybe (StreamR Native) -> ArrayData e -> LLVM Native () indexRemote :: Array sh e -> Int -> LLVM Native e | |
Async Native | |
Marshalable Native Int | |
ArrayElt e => Marshalable Native (ArrayData e) | |
data ExecutableR Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Link | |
data ObjectR Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Compile | |
type ArgR Native | |
type EventR Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Execute.Async type EventR Native = () | |
type StreamR Native | |
Defined in Data.Array.Accelerate.LLVM.Native.Execute.Async type StreamR Native = () | |
data KernelMetadata Native | |
cloneArray :: (Shape sh, Elt e) => Array sh e -> LLVM Native (Array sh e) Source #
Copy an array into a newly allocated array. This uses memcpy
.