Copyright | [2009..2023] Trevor L. McDonell |
---|---|
License | BSD |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
Stream management for low-level driver interface
Synopsis
- newtype Stream = Stream {}
- type StreamPriority = Int
- type StreamCallback = FunPtr (Ptr () -> CInt -> Ptr () -> IO ())
- data StreamFlag
- data StreamWriteFlag
- data StreamWaitFlag
- data StreamCallbackFlag
- create :: [StreamFlag] -> IO Stream
- createWithPriority :: StreamPriority -> [StreamFlag] -> IO Stream
- destroy :: Stream -> IO ()
- finished :: Stream -> IO Bool
- block :: Stream -> IO ()
- callback :: Stream -> StreamCallback -> Ptr () -> [StreamCallbackFlag] -> IO ()
- getFlags :: Stream -> IO [StreamFlag]
- getPriority :: Stream -> IO StreamPriority
- getContext :: Stream -> IO Context
- write :: Storable a => DevicePtr a -> a -> Stream -> [StreamWriteFlag] -> IO ()
- wait :: Storable a => DevicePtr a -> a -> Stream -> [StreamWaitFlag] -> IO ()
- defaultStream :: Stream
- defaultStreamLegacy :: Stream
- defaultStreamPerThread :: Stream
Stream Management
A processing stream. All operations in a stream are synchronous and executed in sequence, but operations in different non-default streams may happen out-of-order or concurrently with one another.
Use Event
s to synchronise operations between streams.
type StreamPriority = Int Source #
Priority of an execution stream. Work submitted to a higher priority stream may preempt execution of work already executing in a lower priority stream. Lower numbers represent higher priorities.
data StreamFlag Source #
Execution stream creation flags
Instances
Bounded StreamFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream minBound :: StreamFlag # maxBound :: StreamFlag # | |
Enum StreamFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream succ :: StreamFlag -> StreamFlag # pred :: StreamFlag -> StreamFlag # toEnum :: Int -> StreamFlag # fromEnum :: StreamFlag -> Int # enumFrom :: StreamFlag -> [StreamFlag] # enumFromThen :: StreamFlag -> StreamFlag -> [StreamFlag] # enumFromTo :: StreamFlag -> StreamFlag -> [StreamFlag] # enumFromThenTo :: StreamFlag -> StreamFlag -> StreamFlag -> [StreamFlag] # | |
Show StreamFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream showsPrec :: Int -> StreamFlag -> ShowS # show :: StreamFlag -> String # showList :: [StreamFlag] -> ShowS # | |
Eq StreamFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream (==) :: StreamFlag -> StreamFlag -> Bool # (/=) :: StreamFlag -> StreamFlag -> Bool # |
data StreamWriteFlag Source #
Instances
Bounded StreamWriteFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream | |
Enum StreamWriteFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream succ :: StreamWriteFlag -> StreamWriteFlag # pred :: StreamWriteFlag -> StreamWriteFlag # toEnum :: Int -> StreamWriteFlag # fromEnum :: StreamWriteFlag -> Int # enumFrom :: StreamWriteFlag -> [StreamWriteFlag] # enumFromThen :: StreamWriteFlag -> StreamWriteFlag -> [StreamWriteFlag] # enumFromTo :: StreamWriteFlag -> StreamWriteFlag -> [StreamWriteFlag] # enumFromThenTo :: StreamWriteFlag -> StreamWriteFlag -> StreamWriteFlag -> [StreamWriteFlag] # | |
Show StreamWriteFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream showsPrec :: Int -> StreamWriteFlag -> ShowS # show :: StreamWriteFlag -> String # showList :: [StreamWriteFlag] -> ShowS # | |
Eq StreamWriteFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream (==) :: StreamWriteFlag -> StreamWriteFlag -> Bool # (/=) :: StreamWriteFlag -> StreamWriteFlag -> Bool # |
data StreamWaitFlag Source #
Instances
Bounded StreamWaitFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream | |
Enum StreamWaitFlag Source # | A Since: 0.10.0.0 |
Defined in Foreign.CUDA.Driver.Stream succ :: StreamWaitFlag -> StreamWaitFlag # pred :: StreamWaitFlag -> StreamWaitFlag # toEnum :: Int -> StreamWaitFlag # fromEnum :: StreamWaitFlag -> Int # enumFrom :: StreamWaitFlag -> [StreamWaitFlag] # enumFromThen :: StreamWaitFlag -> StreamWaitFlag -> [StreamWaitFlag] # enumFromTo :: StreamWaitFlag -> StreamWaitFlag -> [StreamWaitFlag] # enumFromThenTo :: StreamWaitFlag -> StreamWaitFlag -> StreamWaitFlag -> [StreamWaitFlag] # | |
Show StreamWaitFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream showsPrec :: Int -> StreamWaitFlag -> ShowS # show :: StreamWaitFlag -> String # showList :: [StreamWaitFlag] -> ShowS # | |
Eq StreamWaitFlag Source # | |
Defined in Foreign.CUDA.Driver.Stream (==) :: StreamWaitFlag -> StreamWaitFlag -> Bool # (/=) :: StreamWaitFlag -> StreamWaitFlag -> Bool # |
data StreamCallbackFlag Source #
Instances
createWithPriority :: StreamPriority -> [StreamFlag] -> IO Stream Source #
Create a stream with the given priority. Work submitted to a higher-priority stream may preempt work already executing in a lower priority stream.
The convention is that lower numbers represent higher priorities. The
default priority is zero. The range of meaningful numeric priorities can
be queried using getStreamPriorityRange
.
If the specified priority is outside the supported numerical range, it
will automatically be clamped to the highest or lowest number in the
range
Requires CUDA-5.5.
destroy :: Stream -> IO () Source #
Destroy a stream. If the device is still doing work in the stream when
destroy
is called, the function returns immediately and the resources
associated with the stream will be released automatically once the
device has completed all work.
callback :: Stream -> StreamCallback -> Ptr () -> [StreamCallbackFlag] -> IO () Source #
Add a callback to a compute stream. This function will be executed on the host after all currently queued items in the stream have completed.
Since: 0.10.0.0
getPriority :: Stream -> IO StreamPriority Source #
Query the priority of a stream.
Requires CUDA-5.5.
getContext :: Stream -> IO Context Source #
Query the context associated with a stream
Requires CUDA-9.2.
Since: 0.10.0.0
write :: Storable a => DevicePtr a -> a -> Stream -> [StreamWriteFlag] -> IO () Source #
Write a value to memory, (presumably) after all preceding work in the
stream has completed. Unless the option WriteValueNoMemoryBarrier
is
supplied, the write is preceded by a system-wide memory fence.
Requires CUDA-8.0 for 32-bit values.
Requires CUDA-9.0 for 64-bit values.
wait :: Storable a => DevicePtr a -> a -> Stream -> [StreamWaitFlag] -> IO () Source #
Wait on a memory location. Work ordered after the operation will block until the given condition on the memory is satisfied.
Requires CUDA-8.0 for 32-bit values.
Requires CUDA-9.0 for 64-bit values.
defaultStream :: Stream Source #
The default execution stream. This can be configured to have either
defaultStreamLegacy
or defaultStreamPerThread
synchronisation behaviour.
defaultStreamLegacy :: Stream Source #
The legacy default stream is an implicit stream which synchronises with all
other streams in the same Context
, except for non-blocking streams.
Since: 0.10.0.0
defaultStreamPerThread :: Stream Source #
The per-thread default stream is an implicit stream local to both the
thread and the calling Context
, and which does not synchronise with other
streams (just like explicitly created streams). The per-thread default stream
is not a non-blocking stream and will synchronise with the legacy default
stream if both are used in the same program.
Since: 0.10.0.0