Lattice Microbes 2.5
This is for whole cell modeling
Loading...
Searching...
No Matches
CudaByteLatticeExtended.h
Go to the documentation of this file.
1/*
2 * University of Illinois Open Source License
3 * Copyright 2024 Luthey-Schulten Group,
4 * All rights reserved.
5 *
6 * Extended CUDA ByteLattice with particle size support
7 */
8
9#ifndef LM_RDME_CUDABYTELATTICEEXTENDED_H_
10#define LM_RDME_CUDABYTELATTICEEXTENDED_H_
11
12#include <vector>
13#include <map>
14#include <memory>
15#include "core/Exceptions.h"
16#include "cuda/lm_cuda.h"
20
21namespace lm {
22// Forward declaration
24
25namespace rdme {
26
35{
37
38public:
47 bool enableSizeChecking = true);
48
59 si_dist_t spacing, uint particlesPerSite, bool enableSizeChecking = true);
60
65
66 // GPU memory management overrides
67 virtual void copyToGPU() override;
68 virtual void copyFromGPU() override;
69 virtual void * getGPUMemorySiteSizes();
70 virtual void * getGPUMemoryParticleSizes();
71 virtual void * getGPUMemorySizeLattice();
72 virtual void * getGPUMemorySizeDest();
73 virtual void swapSizeSrcDest();
74
75 // Particle size management methods
76 void setParticleSize(particle_t particleType, uint32_t size);
77 uint32_t getParticleSize(particle_t particleType) const;
78
79 // Size-aware lattice operations
81 uint32_t getSizeBasedOccupancy(lattice_size_t subvolume) const;
83 bool canAddParticle(lattice_size_t subvolume, particle_t particle) const;
84
85 // GPU-accelerated size-aware operations
87 particle_t particle);
88 virtual void addParticleWithSizeCheck(lattice_size_t subvolume, particle_t particle);
89
90 // Override methods that can cause GPU memory to become stale
91 virtual void addParticle(lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle) override;
92 virtual void addParticle(lattice_size_t index, particle_t particle) override;
94 virtual void removeParticles(lattice_size_t index) override;
95 virtual void removeAllParticles() override;
96
97 // Size checking control
98 void setSizeCheckingEnabled(bool enable);
100
101 // Access to size manager
103
104 // Validation and statistics
106 std::map<uint32_t, uint32_t> getSizeBasedOccupancyStats() const;
107
108 // GPU-specific utilities
111
112protected:
113 virtual void allocateCudaMemory() override;
114 virtual void deallocateCudaMemory() override;
115
116 // Update site size when particles are added/removed
117 void updateSiteSize(lattice_size_t subvolume, particle_t particle, bool adding);
118
119protected:
120 // CPU-side data structures
121 std::unique_ptr<ParticleSizeManager> sizeManager_;
124 std::vector<uint32_t> siteSizes_; // Current size occupancy per site
125
126 // GPU memory for size tracking
128 void * cudaSiteSizes_[2]; // Double-buffered size occupancy lattices on GPU (uint32_t*)
129 uint cudaSiteSizesCurrent_; // Current buffer index (0 or 1)
131 void * cudaParticleSizes_; // Particle sizes lookup table on GPU (uint32_t*)
132
135
136 // Fast GPU operations for size checking
139 bool canAddParticleGPU(lattice_size_t subvolume, particle_t particle) const;
140 void addParticleGPU(lattice_size_t subvolume, particle_t particle);
141 void removeParticleGPU(lattice_size_t subvolume, particle_t particle);
142
143 // Helper methods
145 site_size_t maxCount) const;
146};
147
148}
149}
150
151#endif // LM_RDME_CUDABYTELATTICEEXTENDED_H_
uint32_t site_size_t
Definition ByteLatticeExtended.h:23
uint32_t particle_t
Definition ByteLatticeExtended.h:19
uint32_t lattice_size_t
Definition Lattice.h:55
double si_dist_t
Definition Types.h:63
unsigned int uint
Definition Types.h:52
CudaByteLatticeExtended(lattice_coord_t size, si_dist_t spacing, uint particlesPerSite, bool enableSizeChecking=true)
Constructor with particle size support.
Definition MpdRdmeSolverExtended.h:33
uint32_t * particles
Definition ByteLattice.h:126
bool canAddParticle(lattice_size_t subvolume, particle_t particle) const
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.
bool isGPUSiteSizesSynched_
Definition CudaByteLatticeExtended.h:133
void removeParticleGPU(lattice_size_t subvolume, particle_t particle)
void addParticleGPU(lattice_size_t subvolume, particle_t particle)
site_size_t getParticlesAtSite(lattice_size_t subvolume, particle_t *particles, site_size_t maxCount) const
void updateSiteSize(lattice_size_t subvolume, particle_t particle, bool adding)
bool canAddParticleGPU(lattice_size_t subvolume, particle_t particle) const
virtual void addParticle(lattice_size_t index, particle_t particle) override
Add a particle to the specified site.
const ParticleSizeManager & getParticleSizeManager() const
void * cudaSiteSizes_[2]
Definition CudaByteLatticeExtended.h:128
virtual void * getGPUMemorySizeDest()
bool sizeCheckingEnabled_
Definition CudaByteLatticeExtended.h:122
virtual void copyToGPU() override
virtual ~CudaByteLatticeExtended()
Destructor.
uint32_t getSizeBasedOccupancy(lattice_size_t subvolume) const
void setSizeCheckingEnabled(bool enable)
virtual void removeParticles(lattice_size_t x, lattice_size_t y, lattice_size_t z) override
Remove a particle to the specified site.
uint32_t getSizeBasedOccupancy(lattice_size_t x, lattice_size_t y, lattice_size_t z) const
virtual void addParticleWithSizeCheck(lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle)
virtual void * getGPUMemoryParticleSizes()
uint32_t getParticleSize(particle_t particleType) const
uint cudaSiteSizesCurrent_
Definition CudaByteLatticeExtended.h:129
virtual void deallocateCudaMemory() override
bool isGPUParticleSizesSynched_
Definition CudaByteLatticeExtended.h:134
virtual void * getGPUMemorySizeLattice()
virtual void removeParticles(lattice_size_t index) override
Remove a particle to the specified site.
virtual void copyFromGPU() override
virtual void removeAllParticles() override
Empty all particles from the specified site.
bool canAddParticle(lattice_size_t x, lattice_size_t y, lattice_size_t z, particle_t particle) const
void setParticleSize(particle_t particleType, uint32_t size)
std::unique_ptr< ParticleSizeManager > sizeManager_
Definition CudaByteLatticeExtended.h:121
std::vector< uint32_t > siteSizes_
Definition CudaByteLatticeExtended.h:124
uint32_t maxSiteCapacity_
Definition CudaByteLatticeExtended.h:123
CudaByteLatticeExtended(lattice_coord_t size, si_dist_t spacing, uint particlesPerSite, bool enableSizeChecking=true)
Constructor with particle size support.
virtual void addParticleWithSizeCheck(lattice_size_t subvolume, particle_t particle)
virtual void allocateCudaMemory() override
size_t cudaParticleSizesSize_
Definition CudaByteLatticeExtended.h:130
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 * getGPUMemorySiteSizes()
std::map< uint32_t, uint32_t > getSizeBasedOccupancyStats() const
void * cudaParticleSizes_
Definition CudaByteLatticeExtended.h:131
size_t cudaSiteSizesSize_
Definition CudaByteLatticeExtended.h:127
CudaByteLattice(lattice_coord_t size, si_dist_t spacing, uint particlesPerSite)
lattice_coord_t size
Definition Lattice.h:256
si_dist_t spacing
Definition Lattice.h:258
Manages particle sizes and validates site occupancy constraints.
Definition ParticleSizeManager.h:48
Definition LatticeBuilder.h:60
Definition Capsule.cpp:46
Type to store a lattice coordinate.
Definition Lattice.h:59