Class CUDAAgentStateList
Defined in File CUDAAgentStateList.h
Class Documentation
-
class CUDAAgentStateList
Manages data for an agent state Forwards alot of operations to parent statelist if they need to affected mapped vars too
Public Functions
Construct a CUDAAgentStateList view into the provided fat_list
- Parameters:
fat_list – The parent CUDAFatAgentStateList
cuda_agent – The owning CUDAAgent
_fat_index – The owning CUDAAgent’s fat index within the CUDAFatAgent
description – The owning CUDAAgent’s description, used to identify variables
_isSubStateList – If true, the statelist is mapped to a master agent (and will be reset after CUDASimulation::simulate())
Construct a CUDAAgentStateList view into the provided fat_list
- Parameters:
fat_list – The parent CUDAFatAgentStateList
cuda_agent – The owning CUDAAgent
_fat_index – The owning CUDAAgent’s fat index within the CUDAFatAgent
description – The owning CUDAAgent’s description, used to identify variables
_isSubStateList – If true, the statelist is mapped to a master agent (and will be reset after CUDASimulation::simulate())
mapping – Mapping definition for how the variables are to their master state.
-
void resize(unsigned int minimumSize, bool retainData, cudaStream_t stream)
Resize all variable buffers within the parent CUDAFatAgentStateList Only initialises unmapped agent data
See also
CUDAFatAgentStateList::resize(unsigned int, bool)
- Parameters:
minimumSize – The minimum number of agents that must be representable
retainData – If true existing buffer data is retained
stream – The stream used to perform memcpys if data is retained
-
unsigned int getSize() const
Returns the number of alive and active agents in the state list
-
unsigned int getAllocatedSize() const
Returns the maximum number of agents that can be stored based on the current buffer allocations
-
void *getVariablePointer(const std::string &variable_name)
Returns the device pointer for the named variable
-
void setAgentData(const AgentVector &data, detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Store agent data from agent state memory into state list
- Parameters:
data – data Source for agent data
scatter – Scatter instance and scan arrays to be used
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
-
void getAgentData(AgentVector &data) const
Retrieve agent data from the agent state list into agent state memory
- Parameters:
data – data Destination for agent data
-
void scatterHostCreation(unsigned int newSize, char *const d_inBuff, const VarOffsetStruct &offsets, detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Initialises the specified number of new agents based on agent data from a device buffer Variables in mapped agents are also initialised to their default values Also updates the count of alive agents to accommodate the new agents
- Parameters:
newSize – The number of new agents to initialise
d_inBuff – device pointer to buffer of agent init data
offsets – Offset data explaining the layout of d_inBuff
scatter – Scatter instance and scan arrays to be used
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
-
void scatterSort_async(detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Sorts all agent variables according to the positions stored inside Message Output scan buffer
- Parameters:
scatter – Scatter instance and scan arrays to be used (CUDASimulation::singletons->scatter)
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
-
unsigned int scatterNew(void *d_newBuff, unsigned int newSize, detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Scatters agents from the currently assigned device agent birth buffer (see member variable newBuffs) The device buffer must be packed in the same format as CUDAAgent::mapNewRuntimeVariables(const AgentFunctionData&, unsigned int, unsigned int)
- Parameters:
d_newBuff – The buffer holding the new agent data
newSize – The maximum number of new agents (this will be the size of the agent state executing func)
scatter – Scatter instance and scan arrays to be used
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
- Returns:
The number of newly birthed agents
-
bool getIsSubStatelist()
Returns true if the state list is not the primary statelist (and is mapped to a master agent state)
-
void initUnmappedVars(detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Returns any unmapped variables (for alive agents) to their default value
- Parameters:
scatter – Scatter instance and scan arrays to be used
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
-
void initExcludedVars(unsigned int count, unsigned int offset, CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream)
Initialises any agent variables within the CUDAFatAgentStateList which are not present in this CUDAAgentStateList
- Parameters:
count – Number of variables to init
offset – Offset into the buffer of agents to init
scatter – Scatter instance and scan arrays to be used
streamId – The stream index to use for accessing stream specific resources such as scan compaction arrays and buffers
stream – CUDA stream to be used for async CUDA operations
-
void clear()
Returns the statelist to an empty state This resets the size to 0.
-
void setAgentCount(unsigned int newSize)
Updates the number of alive agents, does not affect disabled agents or change agent data
- Parameters:
newSize – Number of active agents
- Throws:
exception::InvalidMemoryCapacity – If the new number of disabled + active agents would exceed currently allocated buffer capacity
-
std::list<std::shared_ptr<VariableBuffer>> getUnboundVariableBuffers()
Returns a list of variable buffers attached to bound agents, not available in this agent
Note
This access is only intended for DeviceAgentVector’s correctly handling of subagents