20 #include <rmm/detail/error.hpp>
21 #include <rmm/detail/export.hpp>
22 #include <rmm/detail/logging_assert.hpp>
24 #include <cuda_runtime_api.h>
29 namespace RMM_NAMESPACE {
70 auto* stream =
new cudaStream_t;
71 RMM_CUDA_TRY(cudaStreamCreate(stream));
74 [](cudaStream_t* stream) {
75 RMM_ASSERT_CUDA_SUCCESS(cudaStreamDestroy(*stream));
87 [[nodiscard]]
bool is_valid()
const {
return stream_ !=
nullptr; }
94 [[nodiscard]] cudaStream_t
value()
const
96 RMM_LOGGING_ASSERT(is_valid());
103 explicit operator cudaStream_t() const noexcept {
return value(); }
126 void synchronize()
const { RMM_CUDA_TRY(cudaStreamSynchronize(value())); }
135 RMM_ASSERT_CUDA_SUCCESS(cudaStreamSynchronize(value()));
139 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:41
void synchronize_no_throw() const noexcept
Synchronize the owned CUDA stream. Does not throw if there is an error.
Definition: cuda_stream.hpp:133
bool is_valid() const
Returns true if the owned stream is non-null.
Definition: cuda_stream.hpp:87
void synchronize() const
Synchronize the owned CUDA stream.
Definition: cuda_stream.hpp:126
cuda_stream()
Construct a new cuda stream object.
Definition: cuda_stream.hpp:68
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:94
cuda_stream_view view() const
Creates an immutable, non-owning view of the wrapped CUDA stream.
Definition: cuda_stream.hpp:110
cuda_stream(cuda_stream &&)=default
Move constructor (default)