Template Numerical Library version\ main:1437bf49
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
TNL::Pointers::UniquePointer< Object, Devices::Cuda > Class Template Reference

Specialization of the UniquePointer for the CUDA device. More...

#include <TNL/Pointers/UniquePointer.h>

Inheritance diagram for TNL::Pointers::UniquePointer< Object, Devices::Cuda >:
Inheritance graph
[legend]
Collaboration diagram for TNL::Pointers::UniquePointer< Object, Devices::Cuda >:
Collaboration graph
[legend]

Classes

struct  PointerData
 

Public Types

using AllocatorType = typename Allocators::Default< DeviceType >::Allocator< ObjectType >
 Type of the allocator for DeviceType.
 
using DeviceType = Devices::Cuda
 Type of the device where the object is to be mirrored.
 
using ObjectType = Object
 Type of the object owned by the pointer.
 

Public Member Functions

template<typename... Args>
 UniquePointer (const Args... args)
 Constructor with parameters of the Object constructor.
 
template<typename Value >
 UniquePointer (std::initializer_list< std::initializer_list< Value > > list)
 Constructor with nested initializer lists.
 
template<typename Value >
 UniquePointer (std::initializer_list< Value > list)
 Constructor with initializer list.
 
 UniquePointer (std::nullptr_t)
 Constructor of empty pointer.
 
 ~UniquePointer () override
 Destructor.
 
template<typename Device = Devices::Host>
const ObjectgetData () const
 Constant object reference getter.
 
template<typename Device = Devices::Host>
ObjectmodifyData ()
 Non-constant object reference getter.
 
__cuda_callable__ operator bool () const
 Conversion to boolean type.
 
__cuda_callable__ bool operator! () const
 Negation operator.
 
Objectoperator* ()
 Dereferencing operator for accessing the object owned by non-constant smart pointer.
 
const Objectoperator* () const
 Dereferencing operator for accessing the object owned by constant smart pointer.
 
Objectoperator-> ()
 Arrow operator for accessing the object owned by non-constant smart pointer.
 
const Objectoperator-> () const
 Arrow operator for accessing the object owned by constant smart pointer.
 
const UniquePointeroperator= (UniquePointer &&ptr) noexcept
 Move operator.
 
const UniquePointeroperator= (UniquePointer &ptr)
 Assignment operator.
 
bool synchronize () override
 Cross-device pointer synchronization.
 

Protected Member Functions

template<typename... Args>
bool allocate (Args... args)
 
void free ()
 
bool modified ()
 
void set_last_sync_state ()
 

Protected Attributes

Objectcuda_pointer
 
PointerData * pd
 

Detailed Description

template<typename Object>
class TNL::Pointers::UniquePointer< Object, Devices::Cuda >

Specialization of the UniquePointer for the CUDA device.

Template Parameters
Objectis a type of object to be owned by the pointer.

Constructor & Destructor Documentation

◆ UniquePointer() [1/3]

template<typename Object >
template<typename... Args>
TNL::Pointers::UniquePointer< Object, Devices::Cuda >::UniquePointer ( const Args... args)
inlineexplicit

Constructor with parameters of the Object constructor.

Template Parameters
Argsis variadic template type of arguments of the Object constructor.
argsare arguments passed to the Object constructor.

◆ UniquePointer() [2/3]

template<typename Object >
template<typename Value >
TNL::Pointers::UniquePointer< Object, Devices::Cuda >::UniquePointer ( std::initializer_list< Value > list)
inlineexplicit

Constructor with initializer list.

Template Parameters
Valueis type of the initializer list elements.
Parameters
listis the instance of the initializer list..

◆ UniquePointer() [3/3]

template<typename Object >
template<typename Value >
TNL::Pointers::UniquePointer< Object, Devices::Cuda >::UniquePointer ( std::initializer_list< std::initializer_list< Value > > list)
inlineexplicit

Constructor with nested initializer lists.

Template Parameters
Valueis type of the nested initializer list elements.
Parameters
listis the instance of the nested initializer list..

Member Function Documentation

◆ getData()

template<typename Object >
template<typename Device = Devices::Host>
const Object & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::getData ( ) const
inline

Constant object reference getter.

No synchronization of this pointer will be performed due to calling this method.

Template Parameters
Devicesays what image of the object one want to dereference. It can be either DeviceType or Devices::Host.
Returns
constant reference to the object image on given device.

◆ modifyData()

template<typename Object >
template<typename Device = Devices::Host>
Object & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::modifyData ( )
inline

Non-constant object reference getter.

After calling this method, the object owned by the pointer might need to be synchronized. One should not forget to call Pointers::synchronizeSmartPointersOnDevice< Devices::Cuda >() before calling CUDA kernel using object from this smart pointer.

Template Parameters
Devicesays what image of the object one want to dereference. It can be either DeviceType or Devices::Host.
Returns
constant reference to the object image on given device.

◆ operator bool()

template<typename Object >
__cuda_callable__ TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator bool ( ) const
inline

Conversion to boolean type.

Returns
Returns true if the pointer is not empty, false otherwise.

◆ operator!()

template<typename Object >
__cuda_callable__ bool TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator! ( ) const
inline

Negation operator.

Returns
Returns false if the pointer is not empty, true otherwise.

◆ operator*() [1/2]

template<typename Object >
Object & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator* ( )
inline

Dereferencing operator for accessing the object owned by non-constant smart pointer.

Returns
reference to the object owned by this smart pointer.

◆ operator*() [2/2]

template<typename Object >
const Object & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator* ( ) const
inline

Dereferencing operator for accessing the object owned by constant smart pointer.

Returns
constant reference to the object owned by this smart pointer.

◆ operator->() [1/2]

template<typename Object >
Object * TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator-> ( )
inline

Arrow operator for accessing the object owned by non-constant smart pointer.

Returns
pointer to the object owned by this smart pointer.

◆ operator->() [2/2]

template<typename Object >
const Object * TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator-> ( ) const
inline

Arrow operator for accessing the object owned by constant smart pointer.

Returns
constant pointer to the object owned by this smart pointer.

◆ operator=() [1/2]

template<typename Object >
const UniquePointer & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator= ( UniquePointer< Object, Devices::Cuda > && ptr)
inlinenoexcept

Move operator.

It assigns object owned by the pointer ptr to this pointer. The original pointer ptr is reset to empty state.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ operator=() [2/2]

template<typename Object >
const UniquePointer & TNL::Pointers::UniquePointer< Object, Devices::Cuda >::operator= ( UniquePointer< Object, Devices::Cuda > & ptr)
inline

Assignment operator.

It assigns object owned by the pointer ptr to this pointer. The original pointer ptr is reset to empty state.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ synchronize()

template<typename Object >
bool TNL::Pointers::UniquePointer< Object, Devices::Cuda >::synchronize ( )
inlineoverridevirtual

Cross-device pointer synchronization.

This method is usually called by the smart pointers register when calling Pointers::synchronizeSmartPointersOnDevice< Devices::Cuda >()

Returns
true if the synchronization was successful, false otherwise.

Implements TNL::Pointers::SmartPointer.


The documentation for this class was generated from the following file: