Copyright | (C) 2018 Johann Lee <me@qinka.pro> |
---|---|
License | LGPL3 |
Maintainer | me@qinka.pro |
Stability | experimental |
Portability | unknown |
Safe Haskell | Safe |
Language | Haskell2010 |
The Haskell Foreign Accelerate Interace.
Synopsis
- type family Pf p t :: *
- data Buffer p a = Buffer {
- bufPtr :: !(ForeignPtr (Pf p a))
- bufSize :: !Int
- newtype Context p = Context {
- unContextPtr :: ForeignPtr (Context p)
- newtype Accelerate p a = Accelerate {
- doAccelerate :: Context p -> IO (a, Context p)
- class FAI p where
- class (FAI p1, FAI p2) => FAICopy p1 p2 where
- type FinalizerContextPtr p a = Either (FinalizerEnvPtr (Context p) a) (FinalizerPtr a)
- accelerate :: Context p -> Accelerate p a -> IO a
- newBuffer :: (FAI p, Storable b, Pf p a ~ b) => Int -> Accelerate p (Buffer p a)
- newBufferIO :: (FAI p, Storable b, Pf p a ~ b) => Int -> Context p -> IO (Buffer p a, Context p)
- dupBuffer :: (FAICopy p1 p2, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) => Bool -> Buffer p1 a -> Accelerate p2 (Buffer p2 a)
- dupBufferIO :: (FAICopy p1 p2, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) => Bool -> Buffer p1 a -> Context p2 -> IO (Buffer p2 a, Context p2)
- dupBufferD :: (FAICopy p2 p1, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) => Bool -> Buffer p2 a -> Accelerate p2 (Buffer p1 a)
- liftIO :: MonadIO m => IO a -> m a
Documentation
type family Pf p t :: * Source #
Platform types
Context of platform
The Haskell GC can not guarantee that Context p
will be released after
all the Buffer p a
is released.
So the C implement at lower level need to make sure it.
Context | |
|
newtype Accelerate p a Source #
Accelearate type.
Accelerate | |
|
Instances
Monad (Accelerate p) Source # | |
Defined in Foreign.FAI.Types (>>=) :: Accelerate p a -> (a -> Accelerate p b) -> Accelerate p b # (>>) :: Accelerate p a -> Accelerate p b -> Accelerate p b # return :: a -> Accelerate p a # fail :: String -> Accelerate p a # | |
Functor (Accelerate p) Source # | |
Defined in Foreign.FAI.Types fmap :: (a -> b) -> Accelerate p a -> Accelerate p b # (<$) :: a -> Accelerate p b -> Accelerate p a # | |
Applicative (Accelerate p) Source # | |
Defined in Foreign.FAI.Types pure :: a -> Accelerate p a # (<*>) :: Accelerate p (a -> b) -> Accelerate p a -> Accelerate p b # liftA2 :: (a -> b -> c) -> Accelerate p a -> Accelerate p b -> Accelerate p c # (*>) :: Accelerate p a -> Accelerate p b -> Accelerate p b # (<*) :: Accelerate p a -> Accelerate p b -> Accelerate p a # | |
MonadIO (Accelerate p) Source # | |
Defined in Foreign.FAI.Types liftIO :: IO a -> Accelerate p a # |
FAI interface
:: Context p | Context |
-> IO (FinalizerContextPtr p a) | pointer of the function of release the pointer |
type FinalizerContextPtr p a = Either (FinalizerEnvPtr (Context p) a) (FinalizerPtr a) Source #
Context concened finalizer
accelerate :: Context p -> Accelerate p a -> IO a Source #
run the Accelerate
.
Allocate buffer
:: (FAI p, Storable b, Pf p a ~ b) | |
=> Int | number of items |
-> Context p | platform context |
-> IO (Buffer p a, Context p) | Buffer and (new) context |
Allocate new buffer (IO)
:: (FAICopy p1 p2, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) | |
=> Bool | Whether copy data |
-> Buffer p1 a | buffer (src) |
-> Accelerate p2 (Buffer p2 a) | buffer (dst) |
Duplicate buffer
:: (FAICopy p1 p2, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) | |
=> Bool | Whether copy data |
-> Buffer p1 a | buffer (src) |
-> Context p2 | platform context |
-> IO (Buffer p2 a, Context p2) | buffer (dst) and context |
Duplicate buffer (IO)