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

Device memory resource: raw device allocation (GPU::memAlloc / GPU::memFree). More...

#include <EBGeometry_MemoryResource.hpp>

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

Public Member Functions

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

Device memory resource: raw device allocation (GPU::memAlloc / GPU::memFree).

Compiled only under an offload backend (CUDA/HIP) or for documentation. Blocks are device-accessible and not host-accessible: a host pointer dereference of a returned block is undefined. The backend allocator already returns a base aligned to at least EBGeometry::PoolBaseAlign, so the requested alignment is only validated, not enforced.

Member Function Documentation

◆ allocate()

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

Allocate a block of device memory.

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

Implements EBGeometry::MemoryResource.

◆ copy()

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

Free a block previously returned by allocate.

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

Implements EBGeometry::MemoryResource.

◆ isDeviceAccessible()

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

Device blocks are device-accessible.

Returns
Always true.

Implements EBGeometry::MemoryResource.

◆ isHostAccessible()

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

Device blocks are not host-accessible.

Returns
Always false.

Implements EBGeometry::MemoryResource.


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