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::ManagedMemoryResource Class Referencefinal

Managed (unified) memory resource: one allocation reachable from host and device (GPU::memAllocManaged / GPU::memFree). More...

#include <EBGeometry_MemoryResource.hpp>

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

Public Member Functions

 ManagedMemoryResource ()=default
 Default constructor.
 
 ~ManagedMemoryResource () override=default
 Destructor.
 
void * allocate (size_t a_bytes, size_t a_alignment) override
 Allocate a block of managed (unified) 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
 Managed blocks are host-accessible.
 
bool isDeviceAccessible () const noexcept override
 Managed blocks are 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

Managed (unified) memory resource: one allocation reachable from host and device (GPU::memAllocManaged / GPU::memFree).

Compiled only under an offload backend (CUDA/HIP) or for documentation. Blocks are both host- and device-accessible: the same base pointer can be dereferenced by the CPU and passed to a kernel, at the cost of driver-managed page migration.

Member Function Documentation

◆ allocate()

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

Allocate a block of managed (unified) memory.

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

Implements EBGeometry::MemoryResource.

◆ copy()

void EBGeometry::ManagedMemoryResource::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::ManagedMemoryResource::deallocate ( void *  a_ptr,
size_t  a_bytes,
size_t  a_alignment 
)
overridevirtualnoexcept

Free a block previously returned by allocate.

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

Implements EBGeometry::MemoryResource.

◆ isDeviceAccessible()

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

Managed blocks are device-accessible.

Returns
Always true.

Implements EBGeometry::MemoryResource.

◆ isHostAccessible()

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

Managed blocks are host-accessible.

Returns
Always true.

Implements EBGeometry::MemoryResource.


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