holoscan::CudaStreamHandler
holoscan::CudaStreamHandler
This class handles usage of CUDA streams for operators.
When using CUDA operations the default stream ‘0’ synchronizes with all other streams in the same context, see https://docs.nvidia.com/cuda/cuda-runtime-api/stream-sync-behavior.html#stream-sync-behavior. This can reduce performance. The CudaStreamHandler class manages streams across operators and makes sure that CUDA operations are properly chained.
Usage:
- add an instance of
CudaStreamHandlerto your operator - call CudaStreamHandler::register_interface(spec) from the operator setup() function
- in the compute() function call CudaStreamHandler::from_message(), this will get the CUDA stream from the message of the previous operator. When the operator receives multiple messages, then call CudaStreamHandler::from_messages(). This will synchronize with multiple streams.
- when executing CUDA functions CudaStreamHandler::get() to get the CUDA stream which should be used by your CUDA function
- before publishing the output message(s) of your operator call CudaStreamHandler::to_message() on each message. This will add the CUDA stream used by the CUDA functions in your operator to the output message.
Constructors
Destructor
~CudaStreamHandler
Destroy the CudaStreamHandler object.
Methods
define_params
Define the parameters used by this class.
Parameters
OperatorSpec to define the cuda_stream_pool parameter
If set then it’s required that the CUDA stream pool is specified
defineParams
Define the parameters used by this class.
This method is deprecated in favor of define_params.
Deprecated
since 1.0
Parameters
OperatorSpec to define the cuda_stream_pool parameter
If set then it’s required that the CUDA stream pool is specified
from_message
Get the CUDA stream for the operation from the incoming message.
Returns: gxf_result_t
fromMessage
Get the CUDA stream for the operation from the incoming message.
This method is deprecated in favor of from_message.
Deprecated
since 1.0
Returns: gxf_result_t
from_messages
Overload 1
Overload 2
Overload 3
Get the CUDA stream for the operation from the incoming messages (holoscan::gxf::Entity variant).
Returns: gxf_result_t
fromMessages
Get the CUDA stream for the operation from the incoming messages.
This method is deprecated in favor of from_messages.
Deprecated
since 1.0
Returns: gxf_result_t
to_message
Add the used CUDA stream to the outgoing message.
Returns: gxf_result_t
toMessage
Add the used CUDA stream to the outgoing message.
This method is deprecated in favor of to_message.
Deprecated
since 1.0
Returns: gxf_result_t
get_stream_handle
Get the CUDA stream handle which should be used for CUDA commands.
Returns: nvidia::gxf::Handle<nvidia::gxf::CudaStream>
getStreamHandle
Get the CUDA stream handle which should be used for CUDA commands.
This method is deprecated in favor of get_stream_handle.
Deprecated
since 1.0
Returns: nvidia::gxf::Handle<nvidia::gxf::CudaStream>
get_cuda_stream
Get the CUDA stream which should be used for CUDA commands.
If no message stream is set and no stream can be allocated, return the default stream.
Returns: cudaStream_t
getCudaStream
Get the CUDA stream which should be used for CUDA commands.
If no message stream is set and no stream can be allocated, return the default stream.
This method is deprecated in favor of get_cuda_stream.
Deprecated
since 1.0
Returns: cudaStream_t
allocate_internal_stream
Allocate the internal CUDA stream.
Returns: gxf_result_t