8#include <rmm/detail/export.hpp>
34 static_assert(std::is_trivially_copyable_v<T>,
"Scalar type must be trivially copyable");
45 RMM_EXEC_CHECK_DISABLE
48 RMM_EXEC_CHECK_DISABLE
89 cuda::
mr::any_resource<cuda::
mr::device_accessible>
mr =
mr::get_current_device_resource_ref())
116 : _storage{1,
stream, std::move(
mr)}
124 cuda::stream_ref stream,
125 cuda::mr::any_resource<cuda::mr::device_accessible>
mr =
143 : _storage{other._storage,
stream, std::move(
mr)}
165 return _storage.front_element(
stream);
208 void set_value_async(value_type
const&&, cuda::stream_ref) =
delete;
264 [[nodiscard]] cuda::stream_ref
stream() const noexcept {
return _storage.stream(); }
277static_assert(std::is_constructible_v<device_scalar<int>,
int const&, cuda::stream_ref>);
278static_assert(std::is_constructible_v<device_scalar<int>,
281 cuda::mr::any_resource<cuda::mr::device_accessible>>);
282static_assert(!std::is_constructible_v<device_scalar<int>, int, cuda::stream_ref>);
283static_assert(!std::is_constructible_v<device_scalar<int>,
int const, cuda::stream_ref>);
284static_assert(!std::is_constructible_v<device_scalar<int>,
287 cuda::mr::any_resource<cuda::mr::device_accessible>>);
288static_assert(!std::is_constructible_v<device_scalar<int>,
291 cuda::mr::any_resource<cuda::mr::device_accessible>>);
292static_assert([]<
typename Scalar>(Scalar*) {
293 return requires(Scalar& scalar,
int value, cuda::stream_ref stream) {
294 scalar.set_value_async(value, stream);
295 } &&
requires(Scalar& scalar,
int const value, cuda::stream_ref stream) {
296 scalar.set_value_async(value, stream);
297 } && !
requires(Scalar& scalar,
int value, cuda::stream_ref stream) {
298 scalar.set_value_async(std::move(value), stream);
299 } && !
requires(Scalar& scalar,
int const value, cuda::stream_ref stream) {
300 scalar.set_value_async(std::move(value), stream);
302}(
static_cast<device_scalar<int>*
>(
nullptr)));
Container for a single object of type T in device memory.
Definition device_scalar.hpp:32
typename device_uvector< T >::value_type value_type
T, the type of the scalar element.
Definition device_scalar.hpp:36
cuda::stream_ref stream() const noexcept
Stream associated with the device memory allocation.
Definition device_scalar.hpp:264
void set_value_to_zero_async(cuda::stream_ref stream)
Sets the value of the device_scalar to zero on the specified stream.
Definition device_scalar.hpp:224
constexpr size_type size() const noexcept
The size of the scalar: always 1.
Definition device_scalar.hpp:259
device_scalar(value_type const &initial_value, cuda::stream_ref stream, cuda::mr::any_resource< cuda::mr::device_accessible > mr=mr::get_current_device_resource_ref())
Construct a new device_scalar with an initial value.
Definition device_scalar.hpp:112
void set_value_async(value_type const &value, cuda::stream_ref stream)
Sets the value of the device_scalar to the value of v.
Definition device_scalar.hpp:201
const_pointer data() const noexcept
Returns const pointer to object in device memory.
Definition device_scalar.hpp:251
typename device_uvector< T >::const_reference const_reference
const value_type&
Definition device_scalar.hpp:39
typename device_uvector< T >::size_type size_type
The type used for the size.
Definition device_scalar.hpp:37
device_scalar(device_scalar &&) noexcept=default
Default move constructor.
typename device_uvector< T >::const_pointer const_pointer
Definition device_scalar.hpp:42
value_type value(cuda::stream_ref stream) const
Copies the value from device to host, synchronizes, and returns the value.
Definition device_scalar.hpp:163
pointer data() noexcept
Returns pointer to object in device memory.
Definition device_scalar.hpp:239
device_scalar(device_scalar const &other, cuda::stream_ref stream, cuda::mr::any_resource< cuda::mr::device_accessible > mr=mr::get_current_device_resource_ref())
Construct a new device_scalar by deep copying the contents of another device_scalar,...
Definition device_scalar.hpp:139
typename device_uvector< T >::pointer pointer
The type of the pointer returned by data().
Definition device_scalar.hpp:40
void set_stream(cuda::stream_ref stream) noexcept
Sets the stream to be used for deallocation.
Definition device_scalar.hpp:271
typename device_uvector< T >::reference reference
value_type&
Definition device_scalar.hpp:38
An uninitialized vector of elements in device memory.
Definition device_uvector.hpp:70
value_type * pointer
The type of the pointer returned by data().
Definition device_uvector.hpp:80
std::size_t size_type
The type used for the size of the vector.
Definition device_uvector.hpp:76
value_type const & const_reference
Constant reference type returned by operator[](size_type) const.
Definition device_uvector.hpp:78
T value_type
Stored value type.
Definition device_uvector.hpp:75
value_type & reference
Reference type returned by operator[](size_type).
Definition device_uvector.hpp:77
value_type const * const_pointer
The type of the pointer returned by data() const.
Definition device_uvector.hpp:81
device_async_resource_ref get_current_device_resource_ref()
Get the device_async_resource_ref for the current device.
Definition per_device_resource.hpp:187
Memory Resource classes and adaptors.
Management of per-device memory resources.