EBGeometry
Compact, header-only C++ library for fast evaluation of signed distance functions
Loading...
Searching...
No Matches
Public Member Functions | List of all members
EBGeometry::PinnedMemoryResource Class Referencefinal

Pinned (page-locked) host memory resource: fast host-to-device staging (GPU::memAllocHost / GPU::memFreeHost). More...

#include <EBGeometry_MemoryResource.hpp>

Inheritance diagram for EBGeometry::PinnedMemoryResource:
Inheritance graph
[legend]
Collaboration diagram for EBGeometry::PinnedMemoryResource:
Collaboration graph
[legend]

Public Member Functions

 PinnedMemoryResource ()=default
 Default constructor.
 
 ~PinnedMemoryResource () override=default
 Destructor.
 
void * allocate (size_t a_bytes, size_t a_alignment) override
 Allocate a block of page-locked host memory.
 
void deallocate (void *a_ptr, size_t a_bytes, size_t a_alignment) noexcept override
 Free a block previously returned by allocate.
 
bool isHostAccessible () const noexcept override
 Pinned blocks are host-accessible.
 
bool isDeviceAccessible () const noexcept override
 Pinned blocks are not device-accessible.
 
void copy (void *a_dst, const MemoryResource &a_dstResource, const void *a_src, const MemoryResource &a_srcResource, size_t a_bytes) const noexcept override
 Copy between host and device memory with the GPU runtime; see MemoryResource::copy.
 
- Public Member Functions inherited from EBGeometry::MemoryResource
 MemoryResource ()=default
 Default constructor.
 
virtual ~MemoryResource ()=default
 Destructor.
 
 MemoryResource (const MemoryResource &)=delete
 Copy constructor. Deleted: a resource's identity is meaningful and non-copyable.
 
MemoryResource & operator= (const MemoryResource &)=delete
 Copy assignment. Deleted: a resource's identity is meaningful and non-copyable.
 

Detailed Description

Pinned (page-locked) host memory resource: fast host-to-device staging (GPU::memAllocHost / GPU::memFreeHost).

Compiled only under an offload backend (CUDA/HIP) or for documentation. Blocks are host-accessible and not device-accessible; being page-locked, they support faster and asynchronous transfers to a device than ordinary pageable host memory.

Member Function Documentation

◆ allocate()

void * EBGeometry::PinnedMemoryResource::allocate ( size_t  a_bytes,
size_t  a_alignment 
)
overridevirtual

Allocate a block of page-locked host memory.

Parameters
[in]a_bytesNumber of bytes to allocate.
[in]a_alignmentRequired alignment (validated to be <= PoolBaseAlign).
Returns
Host pointer to the pinned block (never null on success; aborts on failure).

Implements EBGeometry::MemoryResource.

◆ copy()

void EBGeometry::PinnedMemoryResource::copy ( void *  a_dst,
const MemoryResource &  a_dstResource,
const void *  a_src,
const MemoryResource &  a_srcResource,
size_t  a_bytes 
) const
overridevirtualnoexcept

Copy between host and device memory with the GPU runtime; see MemoryResource::copy.

Host-to-host is a plain copy; device-to-device aborts, in every build.

Parameters
[out]a_dstDestination block.
[in]a_dstResourceResource that allocated a_dst.
[in]a_srcSource block.
[in]a_srcResourceResource that allocated a_src.
[in]a_bytesNumber of bytes to copy.

Reimplemented from EBGeometry::MemoryResource.

◆ deallocate()

void EBGeometry::PinnedMemoryResource::deallocate ( void *  a_ptr,
size_t  a_bytes,
size_t  a_alignment 
)
overridevirtualnoexcept

Free a block previously returned by allocate.

Parameters
[in]a_ptrHost pointer to free (null is a no-op).
[in]a_bytesUnused.
[in]a_alignmentUnused.

Implements EBGeometry::MemoryResource.

◆ isDeviceAccessible()

bool EBGeometry::PinnedMemoryResource::isDeviceAccessible ( ) const
inlineoverridevirtualnoexcept

Pinned blocks are not device-accessible.

Returns
Always false.

Implements EBGeometry::MemoryResource.

◆ isHostAccessible()

bool EBGeometry::PinnedMemoryResource::isHostAccessible ( ) const
inlineoverridevirtualnoexcept

Pinned blocks are host-accessible.

Returns
Always true.

Implements EBGeometry::MemoryResource.


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