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::SharedPointer< Object, Devices::Cuda > Class Template Reference

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

#include <TNL/Pointers/SharedPointerCuda.h>

Inheritance diagram for TNL::Pointers::SharedPointer< Object, Devices::Cuda >:
Inheritance graph
[legend]
Collaboration diagram for TNL::Pointers::SharedPointer< 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>
 SharedPointer (Args... args)
 Constructor with parameters of the Object constructor.
 
 SharedPointer (const SharedPointer &pointer)
 Copy constructor.
 
template<typename Object_ , typename = Enabler< Object_ >>
 SharedPointer (const SharedPointer< Object_, DeviceType > &pointer)
 Copy constructor.
 
 SharedPointer (SharedPointer &&pointer) noexcept
 Move constructor.
 
template<typename Object_ , typename = Enabler< Object_ >>
 SharedPointer (SharedPointer< Object_, DeviceType > &&pointer)
 Move constructor.
 
template<typename Value >
 SharedPointer (std::initializer_list< std::initializer_list< Value > > list)
 Constructor with nested initializer lists.
 
template<typename Value >
 SharedPointer (std::initializer_list< Value > list)
 Constructor with initializer list.
 
 SharedPointer (std::nullptr_t)
 Constructor of empty pointer.
 
 ~SharedPointer () override
 Destructor.
 
void clear ()
 Reset the pointer to empty state.
 
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 SharedPointeroperator= (const SharedPointer &ptr)
 Assignment operator.
 
template<typename Object_ , typename = Enabler< Object_ >>
const SharedPointeroperator= (const SharedPointer< Object_, DeviceType > &ptr)
 Assignment operator for compatible object types.
 
const SharedPointeroperator= (SharedPointer &&ptr) noexcept
 Move operator.
 
template<typename Object_ , typename = Enabler< Object_ >>
const SharedPointeroperator= (SharedPointer< Object_, DeviceType > &&ptr)
 Move operator.
 
template<typename... Args>
bool recreate (Args... args)
 Create new object based in given constructor parameters.
 
void swap (SharedPointer &ptr2)
 Swap the owned object with another pointer.
 
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::SharedPointer< Object, Devices::Cuda >

Specialization of the SharedPointer for the CUDA device.

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

Constructor & Destructor Documentation

◆ SharedPointer() [1/7]

template<typename Object >
template<typename... Args>
TNL::Pointers::SharedPointer< Object, Devices::Cuda >::SharedPointer ( 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.

◆ SharedPointer() [2/7]

template<typename Object >
template<typename Value >
TNL::Pointers::SharedPointer< Object, Devices::Cuda >::SharedPointer ( 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..

◆ SharedPointer() [3/7]

template<typename Object >
template<typename Value >
TNL::Pointers::SharedPointer< Object, Devices::Cuda >::SharedPointer ( 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..

◆ SharedPointer() [4/7]

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

Copy constructor.

Parameters
pointeris the source shared pointer.

◆ SharedPointer() [5/7]

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

Copy constructor.

This is specialization for compatible object types.

Parameters
pointeris the source shared pointer.

◆ SharedPointer() [6/7]

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

Move constructor.

Parameters
pointeris the source shared pointer.

◆ SharedPointer() [7/7]

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

Move constructor.

This is specialization for compatible object types.

Parameters
pointeris the source shared pointer.

Member Function Documentation

◆ getData()

template<typename Object >
template<typename Device = Devices::Host>
__cuda_callable__ const Object & TNL::Pointers::SharedPointer< 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>
__cuda_callable__ Object & TNL::Pointers::SharedPointer< 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::SharedPointer< 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::SharedPointer< 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::SharedPointer< 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::SharedPointer< 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::SharedPointer< 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::SharedPointer< 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 SharedPointer & TNL::Pointers::SharedPointer< Object, Devices::Cuda >::operator= ( const SharedPointer< 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 SharedPointer & TNL::Pointers::SharedPointer< Object, Devices::Cuda >::operator= ( const SharedPointer< 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 SharedPointer & TNL::Pointers::SharedPointer< Object, Devices::Cuda >::operator= ( SharedPointer< 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 SharedPointer & TNL::Pointers::SharedPointer< Object, Devices::Cuda >::operator= ( SharedPointer< 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

◆ recreate()

template<typename Object >
template<typename... Args>
bool TNL::Pointers::SharedPointer< Object, Devices::Cuda >::recreate ( Args... args)
inline

Create new object based in given constructor parameters.

Template Parameters
Argsis variadic template type of arguments to be passed to the object constructor.
Parameters
argsare arguments to be passed to the object constructor.
Returns
true if recreation was successful, false otherwise.

◆ swap()

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

Swap the owned object with another pointer.

Parameters
ptr2the other shared pointer for swapping.

◆ synchronize()

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