# tf::cudaStream class
#include <taskflow/cuda/cuda_stream.hpp>

class to create an RAII-styled wrapper over a native CUDA stream

A cudaStream object is an RAII-styled wrapper over a native CUDA stream (`cudaStream_t`). A cudaStream object is move-only.

## Constructors, destructors, conversion operators

cudaStream(cudaStream_t stream) explicit
  constructs an RAII-styled object from the given CUDA stream
cudaStream() defaulted
  default constructor

## Public functions

void synchronize() const
  synchronizes the associated stream
void begin_capture(cudaStreamCaptureMode m = cudaStreamCaptureModeGlobal) const
  begins graph capturing on the stream
auto end_capture() const -> cudaGraph_t
  ends graph capturing on the stream
void record(cudaEvent_t event) const
  records an event on the stream
void wait(cudaEvent_t event) const
  waits on an event

## Function documentation

### tf::cudaStream:: cudaStream(cudaStream_t stream) explicit

constructs an RAII-styled object from the given CUDA stream

Constructs a cudaStream object which owns `stream`.

### void tf::cudaStream:: synchronize() const

synchronizes the associated stream

Equivalently calling `cudaStreamSynchronize` to block until this stream has completed all operations.

### void tf::cudaStream:: begin_capture(cudaStreamCaptureMode m = cudaStreamCaptureModeGlobal) const

begins graph capturing on the stream

When a stream is in capture mode, all operations pushed into the stream will not be executed, but will instead be captured into a graph, which will be returned via cudaStream::end_capture.

A thread's mode can be one of the following:

- `cudaStreamCaptureModeGlobal:` This is the default mode. If the local thread has an ongoing capture sequence that was not initiated with `cudaStreamCaptureModeRelaxed` at `cuStreamBeginCapture`, or if any other thread has a concurrent capture sequence initiated with `cudaStreamCaptureModeGlobal`, this thread is prohibited from potentially unsafe API calls.
- `cudaStreamCaptureModeThreadLocal:` If the local thread has an ongoing capture sequence not initiated with `cudaStreamCaptureModeRelaxed`, it is prohibited from potentially unsafe API calls. Concurrent capture sequences in other threads are ignored.
- `cudaStreamCaptureModeRelaxed:` The local thread is not prohibited from potentially unsafe API calls. Note that the thread is still prohibited from API calls which necessarily conflict with stream capture, for example, attempting `cudaEventQuery` on an event that was last recorded inside a capture sequence.

### cudaGraph_t tf::cudaStream:: end_capture() const

ends graph capturing on the stream

Equivalently calling `cudaStreamEndCapture` to end capture on stream and returning the captured graph. Capture must have been initiated on stream via a call to cudaStream::begin_capture. If capture was invalidated, due to a violation of the rules of stream capture, then a NULL graph will be returned.

### void tf::cudaStream:: record(cudaEvent_t event) const

records an event on the stream

Equivalently calling `cudaEventRecord` to record an event on this stream, both of which must be on the same CUDA context.

### void tf::cudaStream:: wait(cudaEvent_t event) const

waits on an event

Equivalently calling `cudaStreamWaitEvent` to make all future work submitted to stream wait for all work captured in event.

Tab / T to search, Esc to close
…

Search for symbols, directories, files, pages or modules. You can omit any prefix from the symbol or file path; adding a `:` or `/` suffix lists all members of given symbol or directory.

Use ↓ / ↑ to navigate through the list, Enter to go. Tab autocompletes common prefix, you can copy a link to the result using ⌘ L while ⌘ M produces a Markdown link.

Sorry, nothing was found.