From 57486ffeea477a3c18b66332864ffe7473ca3097 Mon Sep 17 00:00:00 2001 From: Tomas Oberhuber <tomas.oberhuber@fjfi.cvut.cz> Date: Tue, 26 Nov 2019 13:19:16 +0100 Subject: [PATCH] Fixes in SharedPointer documentation. --- src/TNL/Pointers/SharedPointerCuda.h | 99 ++++++++++++++-------------- src/TNL/Pointers/SharedPointerHost.h | 78 +++++++++++----------- 2 files changed, 89 insertions(+), 88 deletions(-) diff --git a/src/TNL/Pointers/SharedPointerCuda.h b/src/TNL/Pointers/SharedPointerCuda.h index 81951a5e90..f4f73ec39f 100644 --- a/src/TNL/Pointers/SharedPointerCuda.h +++ b/src/TNL/Pointers/SharedPointerCuda.h @@ -31,8 +31,8 @@ namespace Pointers { #if ! defined HAVE_CUDA_UNIFIED_MEMORY /** - * \brief Specialization of the UniquePointer for the CUDA device. - * + * \brief Specialization of the \ref SharedPointer for the CUDA device. + * * \tparam Object is a type of object to be owned by the pointer. */ template< typename Object > @@ -41,7 +41,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer private: /** * \typedef Enabler - * + * * Convenient template alias for controlling the selection of copy- and * move-constructors and assignment operators using SFINAE. * The type Object_ is "enabled" iff Object_ and Object are not the same, @@ -58,7 +58,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer public: /** - * \typedef ObjectType is the type of object owned by the pointer. + * \typedef ObjectType is the type of object owned by the pointer. */ using ObjectType = Object; @@ -78,7 +78,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Constructor with parameters of the Object constructor. - * + * * \tparam Args is variadic template type of arguments of the Object constructor. * \tparam args are arguments passed to the Object constructor. */ @@ -92,7 +92,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Copy constructor. - * + * * \param pointer is the source shared pointer. */ SharedPointer( const SharedPointer& pointer ) // this is needed only to avoid the default compiler-generated constructor @@ -104,11 +104,11 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Copy constructor. - * + * * This is specialization for compatible object types. - * + * * See \ref Enabler. - * + * * \param pointer is the source shared pointer. */ template< typename Object_, @@ -122,7 +122,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Move constructor. - * + * * \param pointer is the source shared pointer. */ SharedPointer( SharedPointer&& pointer ) // this is needed only to avoid the default compiler-generated constructor @@ -135,11 +135,11 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Move constructor. - * + * * This is specialization for compatible object types. - * + * * See \ref Enabler. - * + * * \param pointer is the source shared pointer. */ template< typename Object_, @@ -154,7 +154,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Create new object based in given constructor parameters. - * + * * \tparam Args is variadic template type of arguments to be passed to the * object constructor. * \param args are arguments to be passed to the object constructor. @@ -191,9 +191,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Arrow operator for accessing the object owned by constant smart pointer. - * + * * \return 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 + * returns pointer to object image on the CUDA device if it is called from CUDA * kernel and pointer to host image otherwise. */ __cuda_callable__ @@ -209,9 +209,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Arrow operator for accessing the object owned by non-constant smart pointer. - * + * * \return 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 + * returns pointer to object image on the CUDA device if it is called from CUDA * kernel and pointer to host image otherwise. */ __cuda_callable__ @@ -228,9 +228,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Dereferencing operator for accessing the object owned by constant smart pointer. - * + * * \return 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 + * returns reference to object image on the CUDA device if it is called from CUDA * kernel and reference to host image otherwise. */ __cuda_callable__ @@ -246,9 +246,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Dereferencing operator for accessing the object owned by non-constant smart pointer. - * + * * \return 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 + * returns reference to object image on the CUDA device if it is called from CUDA * kernel and reference to host image otherwise. */ __cuda_callable__ @@ -265,7 +265,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Conversion to boolean type. - * + * * \return Returns true if the pointer is not empty, false otherwise. */ __cuda_callable__ @@ -290,7 +290,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer * * No synchronization of this pointer will be performed due to calling * this method. - * + * * \tparam Device says what image of the object one want to dereference. It * can be either \ref DeviceType or Devices::Host. * \return constant reference to the object image on given device. @@ -312,10 +312,10 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer * \brief 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 - * \ref Pointers::synchronizeSmartPointersOnDevice< Devices::Cuda >() + * to be synchronized. One should not forget to call + * \ref Pointers::synchronizeSmartPointersOnDevice< Devices::Cuda >() * before calling CUDA kernel using object from this smart pointer. - * + * * \tparam Device says what image of the object one want to dereference. It * can be either \ref DeviceType or Devices::Host. * \return constant reference to the object image on given device. @@ -338,9 +338,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Assignment operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -359,11 +359,11 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Assignment operator for compatible object types. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * See \ref Enabler. - * + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -384,9 +384,9 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Move operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -405,11 +405,11 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Move operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * See \ref Enabler. - * + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -430,10 +430,11 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer /** * \brief Cross-device pointer synchronization. - * - * For the smart pointers in the host, this method does nothing. - * - * \return true. + * + * This method is usually called by the smart pointers register when calling + * \ref Pointers::synchronizeSmartPointersOnDevice< Devices::Cuda >() + * + * \return true if the synchronization was successful, false otherwise. */ bool synchronize() { @@ -560,8 +561,8 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer // unable to dereference this-pd on the device Object* cuda_pointer; }; - -#else + +#else // Implementation with CUDA unified memory. It is very slow, we keep it only for experimental reasons. template< typename Object > class SharedPointer< Object, Devices::Cuda > : public SmartPointer @@ -582,7 +583,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer public: using ObjectType = Object; - using DeviceType = Devices::Cuda; + using DeviceType = Devices::Cuda; SharedPointer( std::nullptr_t ) : pd( nullptr ) @@ -712,7 +713,7 @@ class SharedPointer< Object, Devices::Cuda > : public SmartPointer { this->free(); this->pd = (PointerData*) ptr.pd; - if( this->pd != nullptr ) + if( this->pd != nullptr ) this->pd->counter += 1; return *this; } diff --git a/src/TNL/Pointers/SharedPointerHost.h b/src/TNL/Pointers/SharedPointerHost.h index 9e71205f52..ea8654d16e 100644 --- a/src/TNL/Pointers/SharedPointerHost.h +++ b/src/TNL/Pointers/SharedPointerHost.h @@ -25,15 +25,15 @@ namespace TNL { namespace Pointers { /** - * \brief Specialization of the UniquePointer for the host system. - * + * \brief Specialization of the \ref SharedPointer for the host system. + * * \tparam Object is a type of object to be owned by the pointer. */ template< typename Object > class SharedPointer< Object, Devices::Host > : public SmartPointer { private: - + /** * \typedef Enabler * Convenient template alias for controlling the selection of copy- and @@ -52,7 +52,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer public: /** - * \typedef ObjectType is the type of object owned by the pointer. + * \typedef ObjectType is the type of object owned by the pointer. */ using ObjectType = Object; @@ -63,7 +63,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer using DeviceType = Devices::Host; /** - * \brief Constructor of empty pointer. + * \brief Constructor of an empty pointer. */ SharedPointer( std::nullptr_t ) : pd( nullptr ) @@ -71,7 +71,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Constructor with parameters of the Object constructor. - * + * * \tparam Args is variadic template type of arguments of the Object constructor. * \tparam args are arguments passed to the Object constructor. */ @@ -87,7 +87,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Copy constructor. - * + * * \param pointer is the source shared pointer. */ SharedPointer( const SharedPointer& pointer ) // this is needed only to avoid the default compiler-generated constructor @@ -98,11 +98,11 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Copy constructor. - * + * * This is specialization for compatible object types. - * + * * See \ref Enabler. - * + * * \param pointer is the source shared pointer. */ template< typename Object_, @@ -115,7 +115,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Move constructor. - * + * * \param pointer is the source shared pointer. */ SharedPointer( SharedPointer&& pointer ) // this is needed only to avoid the default compiler-generated constructor @@ -126,11 +126,11 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Move constructor. - * + * * This is specialization for compatible object types. - * + * * See \ref Enabler. - * + * * \param pointer is the source shared pointer. */ template< typename Object_, @@ -143,7 +143,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Create new object based in given constructor parameters. - * + * * \tparam Args is variadic template type of arguments to be passed to the * object constructor. * \param args are arguments to be passed to the object constructor. @@ -176,7 +176,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Arrow operator for accessing the object owned by constant smart pointer. - * + * * \return constant pointer to the object owned by this smart pointer. */ const Object* operator->() const @@ -187,7 +187,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Arrow operator for accessing the object owned by non-constant smart pointer. - * + * * \return pointer to the object owned by this smart pointer. */ Object* operator->() @@ -198,7 +198,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Dereferencing operator for accessing the object owned by constant smart pointer. - * + * * \return constant reference to the object owned by this smart pointer. */ const Object& operator *() const @@ -209,7 +209,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Dereferencing operator for accessing the object owned by non-constant smart pointer. - * + * * \return reference to the object owned by this smart pointer. */ Object& operator *() @@ -220,7 +220,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Conversion to boolean type. - * + * * \return Returns true if the pointer is not empty, false otherwise. */ operator bool() const @@ -243,7 +243,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer * * No synchronization of this pointer will be performed due to calling * this method. - * + * * \tparam Device says what image of the object one want to dereference. It * can be either \ref DeviceType or Devices::Host. * \return constant reference to the object image on given device. @@ -261,7 +261,7 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer * * No synchronization of this pointer will be performed due to calling * this method. - * + * * \tparam Device says what image of the object one want to dereference. It * can be either \ref DeviceType or Devices::Host. * \return constant reference to the object image on given device. @@ -276,9 +276,9 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Assignment operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -293,11 +293,11 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Assignment operator for compatible object types. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * See \ref Enabler. - * + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -314,9 +314,9 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Move operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -330,11 +330,11 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Move operator. - * - * It assigns object owned by the pointer \ref ptr to \ref this pointer. - * + * + * It assigns object owned by the pointer \ref ptr to \ref this pointer. + * * See \ref Enabler. - * + * * \param ptr input pointer * \return constant reference to \ref this */ @@ -350,9 +350,9 @@ class SharedPointer< Object, Devices::Host > : public SmartPointer /** * \brief Cross-device pointer synchronization. - * - * For the smart pointers in the host, this method does nothing. - * + * + * For the smart pointers on the host, this method does nothing. + * * \return true. */ bool synchronize() -- GitLab