Program Listing for File CUDAScanCompaction.h
↰ Return to documentation for file (include/flamegpu/simulation/detail/CUDAScanCompaction.h
)
#ifndef INCLUDE_FLAMEGPU_SIMULATION_DETAIL_CUDASCANCOMPACTION_H_
#define INCLUDE_FLAMEGPU_SIMULATION_DETAIL_CUDASCANCOMPACTION_H_
#include <driver_types.h>
namespace flamegpu {
// forward declare classes from other modules
class CUDASimulation;
namespace detail {
struct CUDAScanCompactionPtrs {
unsigned int *scan_flag = nullptr;
unsigned int *position = nullptr;
};
struct CUDAScanCompactionConfig {
CUDAScanCompactionConfig()
: scan_flag_len(0)
{ }
~CUDAScanCompactionConfig();
CUDAScanCompactionConfig(CUDAScanCompactionConfig const&) = delete;
void operator=(CUDAScanCompactionConfig const&) = delete;
unsigned int scan_flag_len = 0;
CUDAScanCompactionPtrs d_ptrs;
void free_scan_flag();
void resize_scan_flag(unsigned int count);
void zero_scan_flag_async(cudaStream_t stream);
};
class CUDAScanCompaction {
public:
static const unsigned int MAX_TYPES = 3;
static const unsigned int MAX_STREAMS = 128;
enum Type : unsigned int {
MESSAGE_OUTPUT = 0,
AGENT_DEATH = 1,
AGENT_OUTPUT = 2
};
CUDAScanCompaction() { }
CUDAScanCompaction(CUDAScanCompaction const&) = delete;
void operator=(CUDAScanCompaction const&) = delete;
void resize(unsigned int newCount, const Type& type, unsigned int streamId);
void zero_async(const Type& type, cudaStream_t stream, unsigned int streamId);
const CUDAScanCompactionConfig &getConfig(const Type& type, unsigned int streamId);
CUDAScanCompactionConfig &Config(const Type& type, unsigned int streamId);
private:
CUDAScanCompactionConfig configs[MAX_TYPES][MAX_STREAMS];
};
} // namespace detail
} // namespace flamegpu
#endif // INCLUDE_FLAMEGPU_SIMULATION_DETAIL_CUDASCANCOMPACTION_H_