FAI-0.1.0.20: Haskell Foreign Accelerate Interface

Copyright(C) 2018 Johann Lee <me@qinka.pro>
LicenseLGPL3
Maintainerme@qinka.pro
Stabilityexperimental
Portabilityunknown
Safe HaskellSafe
LanguageHaskell2010

Foreign.FAI

Description

The Haskell Foreign Accelerate Interace.

Synopsis

Documentation

type family Pf p t :: * Source #

Platform types

Instances
type Pf Host Double Source # 
Instance details

Defined in Foreign.FAI.Platform.Host

type Pf Host Float Source # 
Instance details

Defined in Foreign.FAI.Platform.Host

type Pf Host Int Source # 
Instance details

Defined in Foreign.FAI.Platform.Host

type Pf Host Int = Int
type Pf Host Word Source # 
Instance details

Defined in Foreign.FAI.Platform.Host

type Pf Host Word = Word

data Buffer p a Source #

buffer hosted pointer and size

Constructors

Buffer 

Fields

Instances
Eq (Buffer p a) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

(==) :: Buffer p a -> Buffer p a -> Bool #

(/=) :: Buffer p a -> Buffer p a -> Bool #

Show (Buffer p a) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

showsPrec :: Int -> Buffer p a -> ShowS #

show :: Buffer p a -> String #

showList :: [Buffer p a] -> ShowS #

newtype Context p Source #

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.

Constructors

Context 
Instances
Eq (Context p) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

(==) :: Context p -> Context p -> Bool #

(/=) :: Context p -> Context p -> Bool #

Show (Context p) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

showsPrec :: Int -> Context p -> ShowS #

show :: Context p -> String #

showList :: [Context p] -> ShowS #

newtype Accelerate p a Source #

Accelearate type.

Constructors

Accelerate 

Fields

Instances
Monad (Accelerate p) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

(>>=) :: 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 # 
Instance details

Defined in Foreign.FAI.Types

Methods

fmap :: (a -> b) -> Accelerate p a -> Accelerate p b #

(<$) :: a -> Accelerate p b -> Accelerate p a #

Applicative (Accelerate p) Source # 
Instance details

Defined in Foreign.FAI.Types

Methods

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 # 
Instance details

Defined in Foreign.FAI.Types

Methods

liftIO :: IO a -> Accelerate p a #

class FAI p where Source #

FAI interface

Minimal complete definition

faiMemAllocate, faiMemRelease, faiMemReleaseP

Methods

faiMemAllocate Source #

Arguments

:: Context p

Context

-> Int

size

-> IO (Ptr a)

Pointer

faiMemRelease Source #

Arguments

:: Context p

Context

-> Ptr a

Pointer

-> IO () 

faiMemReleaseP Source #

Arguments

:: Context p

Context

-> IO (FinalizerContextPtr p a)

pointer of the function of release the pointer

class (FAI p1, FAI p2) => FAICopy p1 p2 where Source #

Copy data from platform p1 to platform p2.

Minimal complete definition

faiMemCopy

Methods

faiMemCopy Source #

Arguments

:: (Storable b, Pf p1 a ~ b, Storable c, Pf p2 a ~ c) 
=> Buffer p2 a

Destination

-> Buffer p1 a

Source

-> IO () 
Instances
FAICopy Host Host Source # 
Instance details

Defined in Foreign.FAI.Platform.Host

Methods

faiMemCopy :: (Storable b, Pf Host a ~ b, Storable c, Pf Host a ~ c) => Buffer Host a -> Buffer Host a -> IO () Source #

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.

newBuffer Source #

Arguments

:: (FAI p, Storable b, Pf p a ~ b) 
=> Int

number of items

-> Accelerate p (Buffer p a)

buffer

Allocate buffer

newBufferIO Source #

Arguments

:: (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)

dupBuffer Source #

Arguments

:: (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

dupBufferIO Source #

Arguments

:: (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)

dupBufferD Source #

Arguments

:: (FAICopy p2 p1, FAI p1, FAI p2, Storable b, Pf p2 a ~ b, Pf p1 a ~ b) 
=> Bool

Whether copy data

-> Buffer p2 a

buffer (src)

-> Accelerate p2 (Buffer p1 a)

buffer (dst)

Duplicate buffer (for debug)

liftIO :: MonadIO m => IO a -> m a #

Lift a computation from the IO monad.