module Foreign.CUDA.Runtime.Stream (
Stream(..),
create, destroy, finished, block, defaultStream
) where
import Foreign.CUDA.Runtime.Error
import Foreign.CUDA.Internal.C2HS
import Foreign
import Foreign.C
import Control.Monad (liftM)
newtype Stream = Stream { useStream :: ((Ptr ()))}
deriving (Eq, Show)
create :: IO Stream
create = resultIfOk =<< cudaStreamCreate
cudaStreamCreate :: IO ((Status), (Stream))
cudaStreamCreate =
alloca $ \a1' ->
cudaStreamCreate'_ a1' >>= \res ->
let {res' = cToEnum res} in
peekStream a1'>>= \a1'' ->
return (res', a1'')
destroy :: Stream -> IO ()
destroy !s = nothingIfOk =<< cudaStreamDestroy s
cudaStreamDestroy :: (Stream) -> IO ((Status))
cudaStreamDestroy a1 =
let {a1' = useStream a1} in
cudaStreamDestroy'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
finished :: Stream -> IO Bool
finished !s =
cudaStreamQuery s >>= \rv -> do
case rv of
Success -> return True
NotReady -> return False
_ -> resultIfOk (rv,undefined)
cudaStreamQuery :: (Stream) -> IO ((Status))
cudaStreamQuery a1 =
let {a1' = useStream a1} in
cudaStreamQuery'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
block :: Stream -> IO ()
block !s = nothingIfOk =<< cudaStreamSynchronize s
cudaStreamSynchronize :: (Stream) -> IO ((Status))
cudaStreamSynchronize a1 =
let {a1' = useStream a1} in
cudaStreamSynchronize'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
defaultStream :: Stream
defaultStream = Stream nullPtr
peekStream :: Ptr ((Ptr ())) -> IO Stream
peekStream = liftM Stream . peek
foreign import ccall unsafe "Foreign/CUDA/Runtime/Stream.chs.h cudaStreamCreate"
cudaStreamCreate'_ :: ((Ptr (Ptr ())) -> (IO CInt))
foreign import ccall unsafe "Foreign/CUDA/Runtime/Stream.chs.h cudaStreamDestroy"
cudaStreamDestroy'_ :: ((Ptr ()) -> (IO CInt))
foreign import ccall unsafe "Foreign/CUDA/Runtime/Stream.chs.h cudaStreamQuery"
cudaStreamQuery'_ :: ((Ptr ()) -> (IO CInt))
foreign import ccall unsafe "Foreign/CUDA/Runtime/Stream.chs.h cudaStreamSynchronize"
cudaStreamSynchronize'_ :: ((Ptr ()) -> (IO CInt))