21 #include <rmm/detail/error.hpp>
22 #include <rmm/detail/logging_assert.hpp>
24 #include <cuda_runtime_api.h>
69 auto* stream =
new cudaStream_t;
70 RMM_CUDA_TRY(cudaStreamCreate(stream));
73 [](cudaStream_t* stream) {
74 RMM_ASSERT_CUDA_SUCCESS(cudaStreamDestroy(*stream));
86 [[nodiscard]]
bool is_valid()
const {
return stream_ !=
nullptr; }
93 [[nodiscard]] cudaStream_t
value()
const
95 RMM_LOGGING_ASSERT(is_valid());
102 explicit operator cudaStream_t() const noexcept {
return value(); }
125 void synchronize()
const { RMM_CUDA_TRY(cudaStreamSynchronize(value())); }
134 RMM_ASSERT_CUDA_SUCCESS(cudaStreamSynchronize(value()));
138 std::unique_ptr<cudaStream_t, std::function<void(cudaStream_t*)>> stream_;
Strongly-typed non-owning wrapper for CUDA streams with default constructor.
Definition: cuda_stream_view.hpp:41
Owning wrapper for a CUDA stream.
Definition: cuda_stream.hpp:40
void synchronize_no_throw() const noexcept
Synchronize the owned CUDA stream. Does not throw if there is an error.
Definition: cuda_stream.hpp:132
bool is_valid() const
Returns true if the owned stream is non-null.
Definition: cuda_stream.hpp:86
void synchronize() const
Synchronize the owned CUDA stream.
Definition: cuda_stream.hpp:125
cuda_stream()
Construct a new cuda stream object.
Definition: cuda_stream.hpp:67
cuda_stream & operator=(cuda_stream &&)=default
Move copy assignment operator (default)
cudaStream_t value() const
Get the value of the wrapped CUDA stream.
Definition: cuda_stream.hpp:93
cuda_stream_view view() const
Creates an immutable, non-owning view of the wrapped CUDA stream.
Definition: cuda_stream.hpp:109
cuda_stream(cuda_stream &&)=default
Move constructor (default)