{-# LINE 1 "./Foreign/CUDA/Driver/Stream.chs" #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell #-}
module Foreign.CUDA.Driver.Stream (
Stream(..), StreamFlag,
create, createWithPriority, destroy, finished, block, getPriority,
defaultStream,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
{-# LINE 26 "./Foreign/CUDA/Driver/Stream.chs" #-}
import Foreign.CUDA.Types
import Foreign.CUDA.Driver.Error
import Foreign.CUDA.Internal.C2HS
import Foreign
import Foreign.C
import Control.Monad ( liftM )
import Control.Exception ( throwIO )
{-# INLINEABLE create #-}
create :: [StreamFlag] -> IO Stream
create !flags = resultIfOk =<< cuStreamCreate flags
{-# INLINE cuStreamCreate #-}
cuStreamCreate :: ([StreamFlag]) -> IO ((Status), (Stream))
cuStreamCreate a2 =
alloca $ \a1' ->
let {a2' = combineBitMasks a2} in
cuStreamCreate'_ a1' a2' >>= \res ->
let {res' = cToEnum res} in
peekStream a1'>>= \a1'' ->
return (res', a1'')
{-# LINE 56 "./Foreign/CUDA/Driver/Stream.chs" #-}
where
peekStream = liftM Stream . peek
{-# INLINEABLE createWithPriority #-}
createWithPriority :: StreamPriority -> [StreamFlag] -> IO Stream
createWithPriority !priority !flags = resultIfOk =<< cuStreamCreateWithPriority flags priority
{-# INLINE cuStreamCreateWithPriority #-}
cuStreamCreateWithPriority :: ([StreamFlag]) -> (StreamPriority) -> IO ((Status), (Stream))
cuStreamCreateWithPriority a2 a3 =
alloca $ \a1' ->
let {a2' = combineBitMasks a2} in
let {a3' = cIntConv a3} in
cuStreamCreateWithPriority'_ a1' a2' a3' >>= \res ->
let {res' = cToEnum res} in
peekStream a1'>>= \a1'' ->
return (res', a1'')
{-# LINE 90 "./Foreign/CUDA/Driver/Stream.chs" #-}
where
peekStream = liftM Stream . peek
{-# INLINEABLE destroy #-}
destroy :: Stream -> IO ()
destroy !st = nothingIfOk =<< cuStreamDestroy st
{-# INLINE cuStreamDestroy #-}
cuStreamDestroy :: (Stream) -> IO ((Status))
cuStreamDestroy a1 =
let {a1' = useStream a1} in
cuStreamDestroy'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 110 "./Foreign/CUDA/Driver/Stream.chs" #-}
{-# INLINEABLE finished #-}
finished :: Stream -> IO Bool
finished !st =
cuStreamQuery st >>= \rv ->
case rv of
Success -> return True
NotReady -> return False
_ -> throwIO (ExitCode rv)
{-# INLINE cuStreamQuery #-}
cuStreamQuery :: (Stream) -> IO ((Status))
cuStreamQuery a1 =
let {a1' = useStream a1} in
cuStreamQuery'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 129 "./Foreign/CUDA/Driver/Stream.chs" #-}
{-# INLINEABLE block #-}
block :: Stream -> IO ()
block !st = nothingIfOk =<< cuStreamSynchronize st
{-# INLINE cuStreamSynchronize #-}
cuStreamSynchronize :: (Stream) -> IO ((Status))
cuStreamSynchronize a1 =
let {a1' = useStream a1} in
cuStreamSynchronize'_ a1' >>= \res ->
let {res' = cToEnum res} in
return (res')
{-# LINE 143 "./Foreign/CUDA/Driver/Stream.chs" #-}
{-# INLINEABLE getPriority #-}
getPriority :: Stream -> IO StreamPriority
getPriority !st = resultIfOk =<< cuStreamGetPriority st
{-# INLINE cuStreamGetPriority #-}
cuStreamGetPriority :: (Stream) -> IO ((Status), (StreamPriority))
cuStreamGetPriority a1 =
let {a1' = useStream a1} in
alloca $ \a2' ->
cuStreamGetPriority'_ a1' a2' >>= \res ->
let {res' = cToEnum res} in
peekIntConv a2'>>= \a2'' ->
return (res', a2'')
{-# LINE 166 "./Foreign/CUDA/Driver/Stream.chs" #-}
foreign import ccall unsafe "Foreign/CUDA/Driver/Stream.chs.h cuStreamCreate"
cuStreamCreate'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (C2HSImp.CUInt -> (IO C2HSImp.CInt)))
foreign import ccall unsafe "Foreign/CUDA/Driver/Stream.chs.h cuStreamCreateWithPriority"
cuStreamCreateWithPriority'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (C2HSImp.CUInt -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/Driver/Stream.chs.h cuStreamDestroy"
cuStreamDestroy'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))
foreign import ccall unsafe "Foreign/CUDA/Driver/Stream.chs.h cuStreamQuery"
cuStreamQuery'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))
foreign import ccall safe "Foreign/CUDA/Driver/Stream.chs.h cuStreamSynchronize"
cuStreamSynchronize'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))
foreign import ccall unsafe "Foreign/CUDA/Driver/Stream.chs.h cuStreamGetPriority"
cuStreamGetPriority'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))