Template Numerical Library version\ main:6c80161
Loading...
Searching...
No Matches
TNL::Pointers::DevicePointer< Object, Devices::Cuda > Class Template Reference

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

#include <TNL/Pointers/DevicePointer.h>

Inheritance diagram for TNL::Pointers::DevicePointer< Object, Devices::Cuda >:
Collaboration diagram for TNL::Pointers::DevicePointer< Object, Devices::Cuda >:

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

 DevicePointer (const DevicePointer &pointer)
 Copy constructor.
 
template<typename Object_ , typename = Enabler< Object_ >>
 DevicePointer (const DevicePointer< Object_, DeviceType > &pointer)
 Copy constructor.
 
 DevicePointer (DevicePointer &&pointer) noexcept
 Move constructor.
 
template<typename Object_ , typename = Enabler< Object_ >>
 DevicePointer (DevicePointer< Object_, DeviceType > &&pointer)
 Move constructor.
 
 DevicePointer (ObjectType &obj)
 Constructor with an object reference.
 
 DevicePointer (std::nullptr_t)
 Constructor of empty pointer.
 
 ~DevicePointer () override
 Destructor.
 
template<typename Device = Devices::Host>
__cuda_callable__ const ObjectgetData () const
 Constant object reference getter.
 
template<typename Device = Devices::Host>
__cuda_callable__ ObjectmodifyData ()
 Non-constant object reference getter.
 
__cuda_callable__ operator bool () const
 Conversion to boolean type.
 
__cuda_callable__ bool operator! () const
 Negation operator.
 
__cuda_callable__ Objectoperator* ()
 Dereferencing operator for accessing the object owned by non-constant smart pointer.
 
__cuda_callable__ const Objectoperator* () const
 Dereferencing operator for accessing the object owned by constant smart pointer.
 
__cuda_callable__ Objectoperator-> ()
 Arrow operator for accessing the object owned by non-constant smart pointer.
 
__cuda_callable__ const Objectoperator-> () const
 Arrow operator for accessing the object owned by constant smart pointer.
 
const DevicePointeroperator= (const DevicePointer &ptr)
 Assignment operator.
 
template<typename Object_ , typename = Enabler< Object_ >>
const DevicePointeroperator= (const DevicePointer< Object_, DeviceType > &ptr)
 Assignment operator for compatible object types.
 
const DevicePointeroperator= (DevicePointer &&ptr) noexcept
 Move operator.
 
template<typename Object_ , typename = Enabler< Object_ >>
const DevicePointeroperator= (DevicePointer< Object_, DeviceType > &&ptr)
 Move operator.
 
void swap (DevicePointer &ptr2)
 Swap the owned object with another pointer.
 
bool synchronize () override
 Cross-device pointer synchronization.
 
- Public Member Functions inherited from TNL::Pointers::SmartPointer

Protected Member Functions

bool allocate (ObjectType &obj)
 
void free ()
 
bool modified ()
 
void set_last_sync_state ()
 

Protected Attributes

Objectcuda_pointer
 
PointerDatapd
 
Objectpointer
 

Detailed Description

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

Specialization of the DevicePointer for the CUDA device.

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

Constructor & Destructor Documentation

◆ DevicePointer() [1/5]

template<typename Object >
TNL::Pointers::DevicePointer< Object, Devices::Cuda >::DevicePointer ( ObjectType & obj)
inlineexplicit

Constructor with an object reference.

Parameters
objis a reference on an object to be managed by the pointer.

◆ DevicePointer() [2/5]

template<typename Object >
TNL::Pointers::DevicePointer< Object, Devices::Cuda >::DevicePointer ( const DevicePointer< Object, Devices::Cuda > & pointer)
inline

Copy constructor.

Parameters
pointeris the source device pointer.

◆ DevicePointer() [3/5]

template<typename Object >
template<typename Object_ , typename = Enabler< Object_ >>
TNL::Pointers::DevicePointer< Object, Devices::Cuda >::DevicePointer ( const DevicePointer< Object_, DeviceType > & pointer)
inline

Copy constructor.

This is specialization for compatible object types.

Parameters
pointeris the source device pointer.

◆ DevicePointer() [4/5]

template<typename Object >
TNL::Pointers::DevicePointer< Object, Devices::Cuda >::DevicePointer ( DevicePointer< Object, Devices::Cuda > && pointer)
inlinenoexcept

Move constructor.

Parameters
pointeris the source device pointer.

◆ DevicePointer() [5/5]

template<typename Object >
template<typename Object_ , typename = Enabler< Object_ >>
TNL::Pointers::DevicePointer< Object, Devices::Cuda >::DevicePointer ( DevicePointer< Object_, DeviceType > && pointer)
inline

Move constructor.

This is specialization for compatible object types.

Parameters
pointeris the source device pointer.

Member Function Documentation

◆ getData()

template<typename Object >
template<typename Device = Devices::Host>
__cuda_callable__ const Object & TNL::Pointers::DevicePointer< Object, Devices::Cuda >::getData ( ) const
inlinenodiscard

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>
__cuda_callable__ Object & TNL::Pointers::DevicePointer< Object, Devices::Cuda >::modifyData ( )
inlinenodiscard

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::DevicePointer< 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::DevicePointer< 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 >
__cuda_callable__ Object & TNL::Pointers::DevicePointer< 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. It returns reference to object image on the CUDA device if it is called from CUDA kernel and reference to host image otherwise.

◆ operator*() [2/2]

template<typename Object >
__cuda_callable__ const Object & TNL::Pointers::DevicePointer< 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. It returns reference to object image on the CUDA device if it is called from CUDA kernel and reference to host image otherwise.

◆ operator->() [1/2]

template<typename Object >
__cuda_callable__ Object * TNL::Pointers::DevicePointer< 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. It returns pointer to object image on the CUDA device if it is called from CUDA kernel and pointer to host image otherwise.

◆ operator->() [2/2]

template<typename Object >
__cuda_callable__ const Object * TNL::Pointers::DevicePointer< 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. It returns pointer to object image on the CUDA device if it is called from CUDA kernel and pointer to host image otherwise.

◆ operator=() [1/4]

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

Assignment operator.

It assigns object owned by the pointer ptr to this pointer.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ operator=() [2/4]

template<typename Object >
template<typename Object_ , typename = Enabler< Object_ >>
const DevicePointer & TNL::Pointers::DevicePointer< Object, Devices::Cuda >::operator= ( const DevicePointer< Object_, DeviceType > & ptr)
inline

Assignment operator for compatible object types.

It assigns object owned by the pointer ptr to this pointer.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ operator=() [3/4]

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

Move operator.

It assigns object owned by the pointer ptr to this pointer.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ operator=() [4/4]

template<typename Object >
template<typename Object_ , typename = Enabler< Object_ >>
const DevicePointer & TNL::Pointers::DevicePointer< Object, Devices::Cuda >::operator= ( DevicePointer< Object_, DeviceType > && ptr)
inline

Move operator.

It assigns object owned by the pointer ptr to this pointer.

Parameters
ptrinput pointer
Returns
constant reference to this

◆ swap()

template<typename Object >
void TNL::Pointers::DevicePointer< Object, Devices::Cuda >::swap ( DevicePointer< Object, Devices::Cuda > & ptr2)
inline

Swap the owned object with another pointer.

Parameters
ptr2the other device pointer for swapping.

◆ synchronize()

template<typename Object >
bool TNL::Pointers::DevicePointer< 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: