Lattice Microbes 2.5
This is for whole cell modeling
Loading...
Searching...
No Matches
CudaByteLatticeExtended Class Reference

CUDA-accelerated extended ByteLattice with particle size awareness. More...

#include <CudaByteLatticeExtended.h>

Inheritance diagram for CudaByteLatticeExtended:
[legend]
Collaboration diagram for CudaByteLatticeExtended:
[legend]

Public Member Functions

 CudaByteLatticeExtended (lattice_coord_t size, si_dist_t spacing, uint particlesPerSite, bool enableSizeChecking=true)
 Constructor with particle size support.
 CudaByteLatticeExtended (lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, si_dist_t spacing, uint particlesPerSite, bool enableSizeChecking=true)
 Constructor with particle size support.
virtual ~CudaByteLatticeExtended ()
 Destructor.
virtual void copyToGPU () override
virtual void copyFromGPU () override
virtual void * getGPUMemorySiteSizes ()
virtual void * getGPUMemoryParticleSizes ()
virtual void * getGPUMemorySizeLattice ()
virtual void * getGPUMemorySizeDest ()
virtual void swapSizeSrcDest ()
void setParticleSize (particle_t particleType, uint32_t size)
uint32_t getParticleSize (particle_t particleType) const
uint32_t getSizeBasedOccupancy (lattice_size_t x, lattice_size_t y, lattice_size_t z) const
uint32_t getSizeBasedOccupancy (lattice_size_t subvolume) const
bool canAddParticle (lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle) const
bool canAddParticle (lattice_size_t subvolume, particle_t particle) const
virtual void addParticleWithSizeCheck (lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle)
virtual void addParticleWithSizeCheck (lattice_size_t subvolume, particle_t particle)
virtual void addParticle (lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle) override
 Add a particle to the specified site.
virtual void addParticle (lattice_size_t index, particle_t particle) override
 Add a particle to the specified site.
virtual void removeParticles (lattice_size_t x, lattice_size_t y, lattice_size_t z) override
 Remove a particle to the specified site.
virtual void removeParticles (lattice_size_t index) override
 Remove a particle to the specified site.
virtual void removeAllParticles () override
 Empty all particles from the specified site.
void setSizeCheckingEnabled (bool enable)
bool isSizeCheckingEnabled () const
const ParticleSizeManager & getParticleSizeManager () const
void validateSizeConstraints () const
std::map< uint32_t, uint32_t > getSizeBasedOccupancyStats () const
void updateGPUSiteSizes ()
void syncSiteSizesFromGPU ()
Public Member Functions inherited from lm::rdme::CudaByteLattice
 CudaByteLattice (lattice_coord_t size, si_dist_t spacing, uint particlesPerSite)
 CudaByteLattice (lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, si_dist_t spacing, uint particlesPerSite)
virtual ~CudaByteLattice ()
virtual void * getGPUMemorySrc ()
virtual void * getGPUMemoryDest ()
virtual void swapSrcDest ()
virtual void * getGPUMemorySiteTypes ()
virtual size_t getParticleMemorySize () const
virtual void setSiteType (lattice_size_t x, lattice_size_t y, lattice_size_t z, site_t site)
 Set the site type at the specified location.
virtual void setSiteType (lattice_size_t index, site_t site)
 Set the site type at the specified location.
virtual void setFromRowMajorByteData (void *buffer, size_t bufferSize)
virtual void getSiteLatticeView (uint8_t **siteLattice, int *Nz, int *Ny, int *Nx)
virtual void getParticleLatticeView (uint8_t **particleLattice, int *Nw, int *Nz, int *Ny, int *Nx, int *Np)
Public Member Functions inherited from lm::rdme::ByteLattice
virtual site_t getMaxSiteType () const
 Get the maximum number of site types possible in the lattice.
virtual particle_t getMaxParticle () const
 Get the maximum number of particle types possible in the lattice.
virtual site_size_t getMaxOccupancy () const
 Get the maximum number of particles that can live in a site.
 ByteLattice (lattice_coord_t size, si_dist_t spacing, uint particlesPerSite)
 ByteLattice (lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, si_dist_t spacing, uint particlesPerSite)
virtual ~ByteLattice ()
virtual void getNeighboringSites (lattice_size_t index, lattice_size_t *neighboringIndices)
 Get the sites that are neighbor to the indicated site.
virtual site_t getSiteType (lattice_size_t x, lattice_size_t y, lattice_size_t z) const
 Get the site type at the specified location.
virtual site_t getSiteType (lattice_size_t subvolume) const
 Get the site type at the specified location.
void copySites (void *destBuffer, size_t latticeSize)
virtual site_size_t getOccupancy (lattice_size_t x, lattice_size_t y, lattice_size_t z) const
 Get the number of particles in the specified lattice site.
virtual site_size_t getOccupancy (lattice_size_t subvolume) const
 Get the number of particles in the specified lattice site.
virtual particle_t getParticle (lattice_size_t x, lattice_size_t y, lattice_size_t z, site_size_t particleIndex) const
 Get the particle at the specified site with at the specified number in the particle list.
virtual particle_t getParticle (lattice_size_t subvolume, site_size_t particleIndex) const
 Get the particle at the specified site with at the specified number in the particle list.
virtual std::map< particle_t, uintgetParticleCounts ()
 Get the number of each particle type in the lattice.
virtual std::vector< particle_loc_tfindParticles (particle_t minParticleType, particle_t maxParticleType)
 Get the number of the specified particles types in the lattice.
virtual void setSitesFromRowMajorByteData (void *buffer, size_t bufferSize)
virtual size_t getLatticeMemorySize () const
Public Member Functions inherited from lm::rdme::Lattice
 Lattice (lattice_coord_t size, si_dist_t spacing)
 Create a Lattice object.
 Lattice (lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, si_dist_t spacing)
 Create a Lattice object.
virtual ~Lattice ()
 Destroy the Lattice object.
virtual lattice_coord_t getSize () const
 Get size of the Lattice.
virtual lattice_size_t getXSize () const
 Get x dimension of the Lattice.
virtual lattice_size_t getYSize () const
 Get y dimension of the Lattice.
virtual lattice_size_t getZSize () const
 Get z dimension of the Lattice.
virtual lattice_size_t getNumberSites () const
 Get total number of sites in the Lattice.
virtual si_dist_t getSpacing () const
 Get spacing between lattice sites.
std::vector< lattice_coord_tgetNearbySites (lattice_size_t xc, lattice_size_t yc, lattice_size_t zc, uint minDistance, uint maxDistance)
 Get a list of sites near the specified site within a certain distance.
virtual void print () const
 Print the lattice to the console.

Protected Member Functions

virtual void allocateCudaMemory () override
virtual void deallocateCudaMemory () override
void updateSiteSize (lattice_size_t subvolume, particle_t particle, bool adding)
void initializeGPUSiteSizes ()
void recalculateAllSiteSizes ()
bool canAddParticleGPU (lattice_size_t subvolume, particle_t particle) const
void addParticleGPU (lattice_size_t subvolume, particle_t particle)
void removeParticleGPU (lattice_size_t subvolume, particle_t particle)
site_size_t getParticlesAtSite (lattice_size_t subvolume, particle_t *particles, site_size_t maxCount) const
Protected Member Functions inherited from lm::rdme::ByteLattice
virtual void allocateMemory ()
virtual void deallocateMemory ()
virtual uint32_t * getParticlesMemory ()
virtual uint8_t * getSitesMemory ()

Protected Attributes

std::unique_ptr< ParticleSizeManager > sizeManager_
bool sizeCheckingEnabled_
uint32_t maxSiteCapacity_
std::vector< uint32_t > siteSizes_
size_t cudaSiteSizesSize_
void * cudaSiteSizes_ [2]
uint cudaSiteSizesCurrent_
size_t cudaParticleSizesSize_
void * cudaParticleSizes_
bool isGPUSiteSizesSynched_
bool isGPUParticleSizesSynched_
Protected Attributes inherited from lm::rdme::CudaByteLattice
uint cudaParticlesCurrent
size_t cudaParticlesSize
void * cudaParticles [2]
size_t cudaSiteTypesSize
void * cudaSiteTypes
bool isGPUMemorySynched
Protected Attributes inherited from lm::rdme::ByteLattice
size_t wordsPerSite
uint32_t * particles
uint8_t * siteTypes
Protected Attributes inherited from lm::rdme::Lattice
lattice_coord_t size
lattice_size_t numberSites
si_dist_t spacing

Friends

class lm::MpdRdmeSolverExtended

Additional Inherited Members

Static Public Member Functions inherited from lm::rdme::ByteLattice
static void nativeSerialize (void *destBuffer, void *lattice, size_t latticeSize)
static void nativeSerializeSites (void *destBuffer, void *lattice, size_t latticeSize)
static void copyNativeToRowMajorByte (void *destBuffer, void *sourceBuffer, lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, uint particlesPerSite, size_t bufferSize)
static void copyRowMajorByteToNative (void *destBuffer, void *sourceBuffer, lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, uint particlesPerSite, size_t bufferSize)
static void copySitesRowMajorByteToNative (void *destBuffer, void *sourceBuffer, lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, size_t bufferSize)
static void copySitesNativeToRowMajorByte (void *destBuffer, void *sourceBuffer, lattice_size_t xSize, lattice_size_t ySize, lattice_size_t zSize, size_t bufferSize)
Static Public Member Functions inherited from lm::rdme::Lattice
static void rowMajorByteSerialize (void *destBuffer, void *lattice, size_t bufferSize)
static void rowMajorIntSerialize (void *destBuffer, void *lattice, size_t bufferSize)
static void rowMajorByteSerializeSites (void *destBuffer, void *lattice, size_t bufferSize)

Detailed Description

CUDA-accelerated extended ByteLattice with particle size awareness.

This class extends CudaByteLattice to support particles with different sizes, providing GPU-accelerated capacity validation and site occupancy tracking. It maintains current site size = sum(particle * particle_size) for each site.

Constructor & Destructor Documentation

◆ CudaByteLatticeExtended() [1/2]

lm::rdme::CudaByteLatticeExtended::CudaByteLatticeExtended ( lattice_coord_t size,
si_dist_t spacing,
uint particlesPerSite,
bool enableSizeChecking = true )

Constructor with particle size support.

Parameters
sizeLattice dimensions
spacingLattice spacing
particlesPerSiteMaximum particles per site
enableSizeCheckingEnable particle size validation (default: true)

◆ CudaByteLatticeExtended() [2/2]

lm::rdme::CudaByteLatticeExtended::CudaByteLatticeExtended ( lattice_size_t xSize,
lattice_size_t ySize,
lattice_size_t zSize,
si_dist_t spacing,
uint particlesPerSite,
bool enableSizeChecking = true )

Constructor with particle size support.

Parameters
xSizeX dimension
ySizeY dimension
zSizeZ dimension
spacingLattice spacing
particlesPerSiteMaximum particles per site
enableSizeCheckingEnable particle size validation (default: true)

◆ ~CudaByteLatticeExtended()

virtual lm::rdme::CudaByteLatticeExtended::~CudaByteLatticeExtended ( )
virtual

Destructor.

Member Function Documentation

◆ addParticle() [1/2]

virtual void lm::rdme::CudaByteLatticeExtended::addParticle ( lattice_size_t index,
particle_t particle )
overridevirtual

Add a particle to the specified site.

Reimplemented from lm::rdme::CudaByteLattice.

◆ addParticle() [2/2]

virtual void lm::rdme::CudaByteLatticeExtended::addParticle ( lattice_size_t x,
lattice_size_t y,
lattice_size_t z,
particle_t particle )
overridevirtual

Add a particle to the specified site.

Reimplemented from lm::rdme::CudaByteLattice.

◆ addParticleGPU()

void lm::rdme::CudaByteLatticeExtended::addParticleGPU ( lattice_size_t subvolume,
particle_t particle )
protected

◆ addParticleWithSizeCheck() [1/2]

virtual void lm::rdme::CudaByteLatticeExtended::addParticleWithSizeCheck ( lattice_size_t subvolume,
particle_t particle )
virtual

◆ addParticleWithSizeCheck() [2/2]

virtual void lm::rdme::CudaByteLatticeExtended::addParticleWithSizeCheck ( lattice_size_t x,
lattice_size_t y,
lattice_size_t z,
particle_t particle )
virtual

◆ allocateCudaMemory()

virtual void lm::rdme::CudaByteLatticeExtended::allocateCudaMemory ( )
overrideprotectedvirtual

Reimplemented from lm::rdme::CudaByteLattice.

◆ canAddParticle() [1/2]

bool lm::rdme::CudaByteLatticeExtended::canAddParticle ( lattice_size_t subvolume,
particle_t particle ) const

◆ canAddParticle() [2/2]

bool lm::rdme::CudaByteLatticeExtended::canAddParticle ( lattice_size_t x,
lattice_size_t y,
lattice_size_t z,
particle_t particle ) const

◆ canAddParticleGPU()

bool lm::rdme::CudaByteLatticeExtended::canAddParticleGPU ( lattice_size_t subvolume,
particle_t particle ) const
protected

◆ copyFromGPU()

virtual void lm::rdme::CudaByteLatticeExtended::copyFromGPU ( )
overridevirtual

Reimplemented from lm::rdme::CudaByteLattice.

◆ copyToGPU()

virtual void lm::rdme::CudaByteLatticeExtended::copyToGPU ( )
overridevirtual

Reimplemented from lm::rdme::CudaByteLattice.

◆ deallocateCudaMemory()

virtual void lm::rdme::CudaByteLatticeExtended::deallocateCudaMemory ( )
overrideprotectedvirtual

Reimplemented from lm::rdme::CudaByteLattice.

◆ getGPUMemoryParticleSizes()

virtual void * lm::rdme::CudaByteLatticeExtended::getGPUMemoryParticleSizes ( )
virtual

◆ getGPUMemorySiteSizes()

virtual void * lm::rdme::CudaByteLatticeExtended::getGPUMemorySiteSizes ( )
virtual

◆ getGPUMemorySizeDest()

virtual void * lm::rdme::CudaByteLatticeExtended::getGPUMemorySizeDest ( )
virtual

◆ getGPUMemorySizeLattice()

virtual void * lm::rdme::CudaByteLatticeExtended::getGPUMemorySizeLattice ( )
virtual

◆ getParticlesAtSite()

site_size_t lm::rdme::CudaByteLatticeExtended::getParticlesAtSite ( lattice_size_t subvolume,
particle_t * particles,
site_size_t maxCount ) const
protected

◆ getParticleSize()

uint32_t lm::rdme::CudaByteLatticeExtended::getParticleSize ( particle_t particleType) const

◆ getParticleSizeManager()

const ParticleSizeManager & lm::rdme::CudaByteLatticeExtended::getParticleSizeManager ( ) const

◆ getSizeBasedOccupancy() [1/2]

uint32_t lm::rdme::CudaByteLatticeExtended::getSizeBasedOccupancy ( lattice_size_t subvolume) const

◆ getSizeBasedOccupancy() [2/2]

uint32_t lm::rdme::CudaByteLatticeExtended::getSizeBasedOccupancy ( lattice_size_t x,
lattice_size_t y,
lattice_size_t z ) const

◆ getSizeBasedOccupancyStats()

std::map< uint32_t, uint32_t > lm::rdme::CudaByteLatticeExtended::getSizeBasedOccupancyStats ( ) const

◆ initializeGPUSiteSizes()

void lm::rdme::CudaByteLatticeExtended::initializeGPUSiteSizes ( )
protected

◆ isSizeCheckingEnabled()

bool lm::rdme::CudaByteLatticeExtended::isSizeCheckingEnabled ( ) const

◆ recalculateAllSiteSizes()

void lm::rdme::CudaByteLatticeExtended::recalculateAllSiteSizes ( )
protected

◆ removeAllParticles()

virtual void lm::rdme::CudaByteLatticeExtended::removeAllParticles ( )
overridevirtual

Empty all particles from the specified site.

Reimplemented from lm::rdme::CudaByteLattice.

◆ removeParticleGPU()

void lm::rdme::CudaByteLatticeExtended::removeParticleGPU ( lattice_size_t subvolume,
particle_t particle )
protected

◆ removeParticles() [1/2]

virtual void lm::rdme::CudaByteLatticeExtended::removeParticles ( lattice_size_t index)
overridevirtual

Remove a particle to the specified site.

Reimplemented from lm::rdme::CudaByteLattice.

◆ removeParticles() [2/2]

virtual void lm::rdme::CudaByteLatticeExtended::removeParticles ( lattice_size_t x,
lattice_size_t y,
lattice_size_t z )
overridevirtual

Remove a particle to the specified site.

Reimplemented from lm::rdme::CudaByteLattice.

◆ setParticleSize()

void lm::rdme::CudaByteLatticeExtended::setParticleSize ( particle_t particleType,
uint32_t size )

◆ setSizeCheckingEnabled()

void lm::rdme::CudaByteLatticeExtended::setSizeCheckingEnabled ( bool enable)

◆ swapSizeSrcDest()

virtual void lm::rdme::CudaByteLatticeExtended::swapSizeSrcDest ( )
virtual

◆ syncSiteSizesFromGPU()

void lm::rdme::CudaByteLatticeExtended::syncSiteSizesFromGPU ( )

◆ updateGPUSiteSizes()

void lm::rdme::CudaByteLatticeExtended::updateGPUSiteSizes ( )

◆ updateSiteSize()

void lm::rdme::CudaByteLatticeExtended::updateSiteSize ( lattice_size_t subvolume,
particle_t particle,
bool adding )
protected

◆ validateSizeConstraints()

void lm::rdme::CudaByteLatticeExtended::validateSizeConstraints ( ) const

◆ lm::MpdRdmeSolverExtended

friend class lm::MpdRdmeSolverExtended
friend

Member Data Documentation

◆ cudaParticleSizes_

void* lm::rdme::CudaByteLatticeExtended::cudaParticleSizes_
protected

◆ cudaParticleSizesSize_

size_t lm::rdme::CudaByteLatticeExtended::cudaParticleSizesSize_
protected

◆ cudaSiteSizes_

void* lm::rdme::CudaByteLatticeExtended::cudaSiteSizes_[2]
protected

◆ cudaSiteSizesCurrent_

uint lm::rdme::CudaByteLatticeExtended::cudaSiteSizesCurrent_
protected

◆ cudaSiteSizesSize_

size_t lm::rdme::CudaByteLatticeExtended::cudaSiteSizesSize_
protected

◆ isGPUParticleSizesSynched_

bool lm::rdme::CudaByteLatticeExtended::isGPUParticleSizesSynched_
protected

◆ isGPUSiteSizesSynched_

bool lm::rdme::CudaByteLatticeExtended::isGPUSiteSizesSynched_
protected

◆ maxSiteCapacity_

uint32_t lm::rdme::CudaByteLatticeExtended::maxSiteCapacity_
protected

◆ siteSizes_

std::vector<uint32_t> lm::rdme::CudaByteLatticeExtended::siteSizes_
protected

◆ sizeCheckingEnabled_

bool lm::rdme::CudaByteLatticeExtended::sizeCheckingEnabled_
protected

◆ sizeManager_

std::unique_ptr<ParticleSizeManager> lm::rdme::CudaByteLatticeExtended::sizeManager_
protected

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