OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
ExtPreAlloc< Mem > Class Template Reference

Detailed Description

template<typename Mem>
class ExtPreAlloc< Mem >

Preallocated memory sequence

External pre-allocated memory, is a class that preallocate memory and than it answer to a particular allocation pattern

Warning
zero sized allocation are removed from the request pattern
Template Parameters
Basememory allocation class [Example] HeapMemory or CudaMemory

Definition at line 27 of file ExtPreAlloc.hpp.

#include <ExtPreAlloc.hpp>

+ Inheritance diagram for ExtPreAlloc< Mem >:

Public Member Functions

 ExtPreAlloc ()
 Default constructor.
 
 ExtPreAlloc (size_t size, Mem &mem)
 Preallocated memory sequence. More...
 
bool copyDeviceToDevice (const ExtPreAlloc< Mem > &m)
 Copy the memory from device to device. More...
 
void deviceToDevice (void *ptr, size_t start, size_t stop, size_t offset)
 special function to move memory from a raw device pointer More...
 
virtual void incRef ()
 Increment the reference counter.
 
virtual void decRef ()
 Decrement the reference counter.
 
virtual long int ref ()
 Return the reference counter.
 
virtual bool flush ()
 flush the memory
 
virtual void fill (unsigned char c)
 fill host and device memory with the selected byte More...
 
virtual bool allocate (size_t sz)
 Allocate a chunk of memory. More...
 
bool allocate_nocheck (size_t sz)
 Allocate a chunk of memory. More...
 
void * getPointerEnd ()
 Return the end pointer of the previous allocated memory. More...
 
void * getDevicePointerEnd ()
 Return the device end pointer of the previous allocated memory. More...
 
void * getPointerBase ()
 The the base pointer of the preallocate memory. More...
 
virtual void * getDevicePointer ()
 Return the pointer of the last allocation. More...
 
virtual void hostToDevice ()
 Return the pointer of the last allocation. More...
 
virtual void hostToDevice (size_t start, size_t stop)
 Return the pointer of the last allocation. More...
 
virtual void deviceToHost ()
 Do nothing.
 
virtual void deviceToHost (size_t start, size_t stop)
 Do nothing.
 
virtual void * getPointer ()
 Return the pointer of the last allocation. More...
 
virtual const void * getPointer () const
 Return the pointer of the last allocation. More...
 
void * getPointerOffset (size_t offset)
 Get the base memory pointer increased with an offset. More...
 
virtual bool resize (size_t sz)
 Allocate or resize the allocated memory. More...
 
virtual size_t size () const
 Get the size of the LAST allocated memory. More...
 
void destroy ()
 Destroy memory. More...
 
virtual bool copy (const memory &m)
 Copy memory. More...
 
bool isInitialized ()
 Allocated Memory is never initialized. More...
 
void shift_backward (size_t sz)
 shift the pointer backward More...
 
void shift_forward (size_t sz)
 shift the pointer forward More...
 
size_t getOffset ()
 Get offset. More...
 
size_t getOffsetEnd ()
 Get offset. More...
 
void reset ()
 Reset the internal counters. More...
 
- Public Member Functions inherited from memory
virtual ~memory ()
 destructor More...
 

Static Public Member Functions

static constexpr bool isDeviceHostSame ()
 
static size_t calculateMem (std::vector< size_t > &mm)
 Calculate the total memory required to pack the message. More...
 

Private Attributes

size_t a_seq
 Actual allocation pointer.
 
size_t l_size
 Last allocation size.
 
Mem * mem
 Main class for memory allocation.
 
long int ref_cnt
 Reference counter.
 

Constructor & Destructor Documentation

◆ ExtPreAlloc()

template<typename Mem>
ExtPreAlloc< Mem >::ExtPreAlloc ( size_t  size,
Mem &  mem 
)
inline

Preallocated memory sequence.

Parameters
sizenumber of bytes
memexternal memory, used if you want to keep the memory

Definition at line 61 of file ExtPreAlloc.hpp.

Member Function Documentation

◆ allocate()

template<typename Mem>
virtual bool ExtPreAlloc< Mem >::allocate ( size_t  sz)
inlinevirtual

Allocate a chunk of memory.

Allocate a chunk of memory

Parameters
szsize of the chunk of memory to allocate in byte

Implements memory.

Definition at line 130 of file ExtPreAlloc.hpp.

◆ allocate_nocheck()

template<typename Mem>
bool ExtPreAlloc< Mem >::allocate_nocheck ( size_t  sz)
inline

Allocate a chunk of memory.

Allocate a chunk of memory

Parameters
szsize of the chunk of memory to allocate in byte

Definition at line 157 of file ExtPreAlloc.hpp.

◆ calculateMem()

template<typename Mem>
static size_t ExtPreAlloc< Mem >::calculateMem ( std::vector< size_t > &  mm)
inlinestatic

Calculate the total memory required to pack the message.

Returns
the total required memory

Definition at line 336 of file ExtPreAlloc.hpp.

◆ copy()

template<typename Mem>
virtual bool ExtPreAlloc< Mem >::copy ( const memory m)
inlinevirtual

Copy memory.

Implements memory.

Definition at line 316 of file ExtPreAlloc.hpp.

◆ copyDeviceToDevice()

template<typename Mem>
bool ExtPreAlloc< Mem >::copyDeviceToDevice ( const ExtPreAlloc< Mem > &  m)
inline

Copy the memory from device to device.

Parameters
mmemory from where to copy

Definition at line 74 of file ExtPreAlloc.hpp.

◆ destroy()

template<typename Mem>
void ExtPreAlloc< Mem >::destroy ( )
inlinevirtual

Destroy memory.

Implements memory.

Definition at line 307 of file ExtPreAlloc.hpp.

◆ deviceToDevice()

template<typename Mem>
void ExtPreAlloc< Mem >::deviceToDevice ( void *  ptr,
size_t  start,
size_t  stop,
size_t  offset 
)
inline

special function to move memory from a raw device pointer

Parameters
startbyte
stopbyte
offsetdestination byte

Definition at line 87 of file ExtPreAlloc.hpp.

◆ fill()

template<typename Mem>
virtual void ExtPreAlloc< Mem >::fill ( unsigned char  c)
inlinevirtual

fill host and device memory with the selected byte

Implements memory.

Definition at line 118 of file ExtPreAlloc.hpp.

◆ getDevicePointer()

template<typename Mem>
virtual void* ExtPreAlloc< Mem >::getDevicePointer ( )
inlinevirtual

Return the pointer of the last allocation.

NULL if memory has not been allocated

Returns
the pointer

Implements memory.

Definition at line 206 of file ExtPreAlloc.hpp.

◆ getDevicePointerEnd()

template<typename Mem>
void* ExtPreAlloc< Mem >::getDevicePointerEnd ( )
inline

Return the device end pointer of the previous allocated memory.

Returns
the pointer

Definition at line 184 of file ExtPreAlloc.hpp.

◆ getOffset()

template<typename Mem>
size_t ExtPreAlloc< Mem >::getOffset ( )
inline

Get offset.

Returns
the offset

Definition at line 408 of file ExtPreAlloc.hpp.

◆ getOffsetEnd()

template<typename Mem>
size_t ExtPreAlloc< Mem >::getOffsetEnd ( )
inline

Get offset.

Returns
the offset

Definition at line 418 of file ExtPreAlloc.hpp.

◆ getPointer() [1/2]

template<typename Mem>
virtual void* ExtPreAlloc< Mem >::getPointer ( )
inlinevirtual

Return the pointer of the last allocation.

Returns
the pointer

Implements memory.

Definition at line 250 of file ExtPreAlloc.hpp.

◆ getPointer() [2/2]

template<typename Mem>
virtual const void* ExtPreAlloc< Mem >::getPointer ( ) const
inlinevirtual

Return the pointer of the last allocation.

Returns
the pointer

Implements memory.

Definition at line 260 of file ExtPreAlloc.hpp.

◆ getPointerBase()

template<typename Mem>
void* ExtPreAlloc< Mem >::getPointerBase ( )
inline

The the base pointer of the preallocate memory.

Returns
the base pointer

Definition at line 194 of file ExtPreAlloc.hpp.

◆ getPointerEnd()

template<typename Mem>
void* ExtPreAlloc< Mem >::getPointerEnd ( )
inline

Return the end pointer of the previous allocated memory.

Returns
the pointer

Definition at line 174 of file ExtPreAlloc.hpp.

◆ getPointerOffset()

template<typename Mem>
void* ExtPreAlloc< Mem >::getPointerOffset ( size_t  offset)
inline

Get the base memory pointer increased with an offset.

Parameters
offsetmemory offset

Definition at line 270 of file ExtPreAlloc.hpp.

◆ hostToDevice() [1/2]

template<typename Mem>
virtual void ExtPreAlloc< Mem >::hostToDevice ( )
inlinevirtual

Return the pointer of the last allocation.

Returns
the pointer

Implements memory.

Definition at line 218 of file ExtPreAlloc.hpp.

◆ hostToDevice() [2/2]

template<typename Mem>
virtual void ExtPreAlloc< Mem >::hostToDevice ( size_t  start,
size_t  stop 
)
inlinevirtual

Return the pointer of the last allocation.

Returns
the pointer

Implements memory.

Definition at line 228 of file ExtPreAlloc.hpp.

◆ isInitialized()

template<typename Mem>
bool ExtPreAlloc< Mem >::isInitialized ( )
inlinevirtual

Allocated Memory is never initialized.

Returns
false

Implements memory.

Definition at line 326 of file ExtPreAlloc.hpp.

◆ reset()

template<typename Mem>
void ExtPreAlloc< Mem >::reset ( )
inline

Reset the internal counters.

Definition at line 427 of file ExtPreAlloc.hpp.

◆ resize()

template<typename Mem>
virtual bool ExtPreAlloc< Mem >::resize ( size_t  sz)
inlinevirtual

Allocate or resize the allocated memory.

Resize the allocated memory, if request is smaller than the allocated, memory is not resized

Parameters
szsize
Returns
true if the resize operation complete correctly

Implements memory.

Definition at line 285 of file ExtPreAlloc.hpp.

◆ shift_backward()

template<typename Mem>
void ExtPreAlloc< Mem >::shift_backward ( size_t  sz)
inline

shift the pointer backward

Warning
when you shift backward the pointer, the last allocation is lost this mean that you have to do again an allocation.

This function is useful to go ahead in memory and fill the memory later on

mem.allocate(16); <------ Here we allocate 16 byte but we do not fill it because
subsequently we do another allocation without using mem
unsigned char * start = (unsigned char *)mem.getPointer()
mem.allocate(100)
// ...
// ...
// Code that fill mem in some way and do other mem.allocate(...)
// ...
// ...
unsigned char * final = (unsigned char *)mem.getPointer()
mem.shift_backward(final - start);
mem.allocate(16); <------ Here I am getting the same memory that I request for the
first allocate
// we now fill the memory
Parameters
howmany byte to shift

Definition at line 380 of file ExtPreAlloc.hpp.

◆ shift_forward()

template<typename Mem>
void ExtPreAlloc< Mem >::shift_forward ( size_t  sz)
inline

shift the pointer forward

The same as shift backward, but in this case it move the pointer forward

In general you use this function after the you went back with shift_backward and you have to move forward again

Warning
when you shift forward the pointer, the last allocation is lost this mean that you have to do again an allocation.

Definition at line 397 of file ExtPreAlloc.hpp.

◆ size()

template<typename Mem>
virtual size_t ExtPreAlloc< Mem >::size ( ) const
inlinevirtual

Get the size of the LAST allocated memory.

Get the size of the allocated memory

Returns
the size of the allocated memory

Implements memory.

Definition at line 298 of file ExtPreAlloc.hpp.


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