Template Numerical Library: TNL::Pointers::SharedPointer< Object, Devices::Cuda > Class Template Reference

Template Numerical Library version\ main:c7077e4fd

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 >:
[legend]
Collaboration diagram for TNL::Pointers::SharedPointer< Object, Devices::Cuda >:
[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 Object & | getData () const
| Constant object reference getter.
template<typename Device = Devices::Host>
__cuda_callable__ Object & | modifyData ()
| Non-constant object reference getter.
__cuda_callable__ | operator bool () const
| Conversion to boolean type.
__cuda_callable__ bool | operator! () const
| Negation operator.
__cuda_callable__ Object & | operator* ()
| Dereferencing operator for accessing the object owned by non-constant smart pointer.
__cuda_callable__ const Object & | operator* () const
| Dereferencing operator for accessing the object owned by constant smart pointer.
__cuda_callable__ Object * | operator-> ()
| Arrow operator for accessing the object owned by non-constant smart pointer.
__cuda_callable__ const Object * | operator-> () const
| Arrow operator for accessing the object owned by constant smart pointer.
const SharedPointer & | operator= (const SharedPointer &ptr)
| Assignment operator.
template<typename Object_, typename = Enabler< Object_ >>
const SharedPointer & | operator= (const SharedPointer< Object_, DeviceType > &ptr)
| Assignment operator for compatible object types.
const SharedPointer & | operator= (SharedPointer &&ptr) noexcept
| Move operator.
template<typename Object_, typename = Enabler< Object_ >>
const SharedPointer & | operator= (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) noexcept
| 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
Object * | cuda_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

  Object | is 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

  Args | is variadic template type of arguments of the Object constructor.
  args | are 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

  Value | is type of the initializer list elements.

Parameters

  list | is 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

  Value | is type of the nested initializer list elements.

Parameters

  list | is 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

  pointer | is 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

  pointer | is 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

  pointer | is 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

  pointer | is 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
| inlinenodiscard

Constant object reference getter.

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

Template Parameters

  Device | says 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 | ( |  | ) |
| 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

  Device | says 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

  ptr | input 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

  ptr | input 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

  ptr | input 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

  ptr | input 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

  Args | is variadic template type of arguments to be passed to the object constructor.

Parameters

  args | are 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 | ) |
| inlinenoexcept

Swap the owned object with another pointer.

Parameters

  ptr2 | the 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:

- src/TNL/Pointers/SharedPointerCuda.h