GeNN  4.9.0
GPU enhanced Neuronal Networks (GeNN)
CodeGenerator::SingleThreadedCPU::Backend Class Reference

#include <backend.h>

Inheritance diagram for CodeGenerator::SingleThreadedCPU::Backend:
CodeGenerator::BackendBase

Public Member Functions

 Backend (const std::string &scalarType, const Preferences &preferences)
 
virtual void genNeuronUpdate (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler pushEGPHandler) const override
 Generate platform-specific function to update the state of all neurons. More...
 
virtual void genSynapseUpdate (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler pushEGPHandler) const override
 Generate platform-specific function to update the state of all synapses. More...
 
virtual void genCustomUpdate (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler pushEGPHandler) const override
 Generate platform-specific functions to perform custom updates. More...
 
virtual void genInit (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler initPushEGPHandler, HostHandler initSparsePushEGPHandler) const override
 Generate platform-specific function to initialise model. More...
 
virtual size_t getSynapticMatrixRowStride (const SynapseGroupInternal &sg) const override
 Gets the stride used to access synaptic matrix rows, taking into account sparse data structure, padding etc. More...
 
virtual void genDefinitionsPreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const override
 Definitions is the usercode-facing header file for the generated code. This function generates a 'preamble' to this header file. More...
 
virtual void genDefinitionsInternalPreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const override
 Definitions internal is the internal header file for the generated code. This function generates a 'preamble' to this header file. More...
 
virtual void genRunnerPreamble (CodeStream &os, const ModelSpecMerged &modelMerged, const MemAlloc &memAlloc) const override
 
virtual void genAllocateMemPreamble (CodeStream &os, const ModelSpecMerged &modelMerged, const MemAlloc &memAlloc) const override
 
virtual void genFreeMemPreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const override
 
virtual void genStepTimeFinalisePreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const override
 After all timestep logic is complete. More...
 
virtual void genVariableDefinition (CodeStream &definitions, CodeStream &definitionsInternal, const std::string &type, const std::string &name, VarLocation loc) const override
 
virtual void genVariableImplementation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc) const override
 
virtual void genVariableAllocation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, size_t count, MemAlloc &memAlloc) const override
 
virtual void genVariableFree (CodeStream &os, const std::string &name, VarLocation loc) const override
 
virtual void genExtraGlobalParamDefinition (CodeStream &definitions, CodeStream &definitionsInternal, const std::string &type, const std::string &name, VarLocation loc) const override
 
virtual void genExtraGlobalParamImplementation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc) const override
 
virtual void genExtraGlobalParamAllocation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, const std::string &countVarName="count", const std::string &prefix="") const override
 
virtual void genExtraGlobalParamPush (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, const std::string &countVarName="count", const std::string &prefix="") const override
 
virtual void genExtraGlobalParamPull (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, const std::string &countVarName="count", const std::string &prefix="") const override
 
virtual void genMergedExtraGlobalParamPush (CodeStream &os, const std::string &suffix, size_t mergedGroupIdx, const std::string &groupIdx, const std::string &fieldName, const std::string &egpName) const override
 ! Generate code for pushing an updated EGP value into the merged group structure on 'device' More...
 
virtual std::string getMergedGroupFieldHostType (const std::string &type) const override
 When generating function calls to push to merged groups, backend without equivalent of Unified Virtual Addressing e.g. OpenCL 1.2 may use different types on host. More...
 
virtual std::string getMergedGroupSimRNGType () const override
 When generating merged structures what type to use for simulation RNGs. More...
 
virtual void genPopVariableInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const override
 
virtual void genVariableInit (CodeStream &os, const std::string &count, const std::string &indexVarName, const Substitutions &kernelSubs, Handler handler) const override
 
virtual void genSparseSynapseVariableRowInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const override
 
virtual void genDenseSynapseVariableRowInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const override
 
virtual void genKernelSynapseVariableInit (CodeStream &os, const SynapseInitGroupMerged &sg, const Substitutions &kernelSubs, Handler handler) const final
 
virtual void genKernelCustomUpdateVariableInit (CodeStream &os, const CustomWUUpdateInitGroupMerged &cu, const Substitutions &kernelSubs, Handler handler) const final
 
virtual void genVariablePush (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, bool autoInitialized, size_t count) const override
 Generate code for pushing a variable to the 'device'. More...
 
virtual void genVariablePull (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, size_t count) const override
 Generate code for pulling a variable from the 'device'. More...
 
virtual void genCurrentVariablePush (CodeStream &os, const NeuronGroupInternal &ng, const std::string &type, const std::string &name, VarLocation loc, unsigned int batchSize) const override
 Generate code for pushing a variable's value in the current timestep to the 'device'. More...
 
virtual void genCurrentVariablePull (CodeStream &os, const NeuronGroupInternal &ng, const std::string &type, const std::string &name, VarLocation loc, unsigned int batchSize) const override
 Generate code for pulling a variable's value in the current timestep from the 'device'. More...
 
virtual void genCurrentTrueSpikePush (CodeStream &os, const NeuronGroupInternal &ng, unsigned int batchSize) const override
 Generate code for pushing true spikes emitted by a neuron group in the current timestep to the 'device'. More...
 
virtual void genCurrentTrueSpikePull (CodeStream &os, const NeuronGroupInternal &ng, unsigned int batchSize) const override
 Generate code for pulling true spikes emitted by a neuron group in the current timestep from the 'device'. More...
 
virtual void genCurrentSpikeLikeEventPush (CodeStream &os, const NeuronGroupInternal &ng, unsigned int batchSize) const override
 Generate code for pushing spike-like events emitted by a neuron group in the current timestep to the 'device'. More...
 
virtual void genCurrentSpikeLikeEventPull (CodeStream &os, const NeuronGroupInternal &ng, unsigned int batchSize) const override
 Generate code for pulling spike-like events emitted by a neuron group in the current timestep from the 'device'. More...
 
virtual void genGlobalDeviceRNG (CodeStream &definitions, CodeStream &definitionsInternal, CodeStream &runner, CodeStream &allocations, CodeStream &free, MemAlloc &memAlloc) const override
 Generate a single RNG instance. More...
 
virtual void genPopulationRNG (CodeStream &definitions, CodeStream &definitionsInternal, CodeStream &runner, CodeStream &allocations, CodeStream &free, const std::string &name, size_t count, MemAlloc &memAlloc) const override
 Generate an RNG with a state per population member. More...
 
virtual void genTimer (CodeStream &definitions, CodeStream &definitionsInternal, CodeStream &runner, CodeStream &allocations, CodeStream &free, CodeStream &stepTimeFinalise, const std::string &name, bool updateInStepTime) const override
 
virtual void genReturnFreeDeviceMemoryBytes (CodeStream &os) const override
 Generate code to return amount of free 'device' memory in bytes. More...
 
virtual void genMakefilePreamble (std::ostream &os) const override
 This function can be used to generate a preamble for the GNU makefile used to build. More...
 
virtual void genMakefileLinkRule (std::ostream &os) const override
 
virtual void genMakefileCompileRule (std::ostream &os) const override
 
virtual void genMSBuildConfigProperties (std::ostream &os) const override
 
virtual void genMSBuildImportProps (std::ostream &os) const override
 
virtual void genMSBuildItemDefinitions (std::ostream &os) const override
 
virtual void genMSBuildCompileModule (const std::string &moduleName, std::ostream &os) const override
 
virtual void genMSBuildImportTarget (std::ostream &os) const override
 
virtual std::string getDeviceVarPrefix () const override
 
virtual bool isDeviceScalarRequired () const override
 Should 'scalar' variables be implemented on device or can host variables be used directly? More...
 
virtual bool isGlobalHostRNGRequired (const ModelSpecMerged &modelMerged) const override
 Different backends use different RNGs for different things. Does this one require a global host RNG for the specified model? More...
 
virtual bool isGlobalDeviceRNGRequired (const ModelSpecMerged &modelMerged) const override
 Different backends use different RNGs for different things. Does this one require a global device RNG for the specified model? More...
 
virtual bool isPopulationRNGRequired () const override
 Different backends use different RNGs for different things. Does this one require population RNGs? More...
 
virtual bool isPopulationRNGInitialisedOnDevice () const override
 Different backends seed RNGs in different ways. Does this one initialise population RNGS on device? More...
 
virtual bool isPostsynapticRemapRequired () const override
 Different backends may implement synaptic plasticity differently. Does this one require a postsynaptic remapping data structure? More...
 
virtual bool isHostReductionRequired () const override
 Backends which support batch-parallelism might require an additional host reduction phase after reduction kernels. More...
 
virtual size_t getDeviceMemoryBytes () const override
 How many bytes of memory does 'device' have. More...
 
virtual MemorySpaces getMergedGroupMemorySpaces (const ModelSpecMerged &modelMerged) const override
 
virtual bool supportsNamespace () const override
 Does this backend support namespaces i.e. can C++ implementation of support functions be used. More...
 
virtual boost::uuids::detail::sha1::digest_type getHashDigest () const override
 Get hash digest of this backends identification and the preferences it has been configured with. More...
 
- Public Member Functions inherited from CodeGenerator::BackendBase
 BackendBase (const std::string &scalarType, const PreferencesBase &preferences)
 
virtual ~BackendBase ()
 
virtual std::string getAllocateMemParams (const ModelSpecMerged &) const
 Get backend-specific allocate memory parameters. More...
 
virtual std::vector< filesystem::path > getFilesToCopy (const ModelSpecMerged &) const
 Get list of files to copy into generated code. More...
 
virtual std::string getHostVarPrefix () const
 
virtual std::string getPointerPrefix () const
 Different backends may have different or no pointer prefix (e.g. __global for OpenCL) More...
 
void genVariablePushPull (CodeStream &push, CodeStream &pull, const std::string &type, const std::string &name, VarLocation loc, bool autoInitialized, size_t count) const
 Helper function to generate matching push and pull functions for a variable. More...
 
void genCurrentVariablePushPull (CodeStream &push, CodeStream &pull, const NeuronGroupInternal &ng, const std::string &type, const std::string &name, VarLocation loc, unsigned int batchSize) const
 Helper function to generate matching push and pull functions for the current state of a variable. More...
 
void genArray (CodeStream &definitions, CodeStream &definitionsInternal, CodeStream &runner, CodeStream &allocations, CodeStream &free, const std::string &type, const std::string &name, VarLocation loc, size_t count, MemAlloc &memAlloc) const
 Helper function to generate matching definition, declaration, allocation and free code for an array. More...
 
size_t getSize (const std::string &type) const
 Get the size of the type. More...
 
std::string getLowestValue (const std::string &type) const
 Get the lowest value of a type. More...
 
std::string getScalarAddressPrefix () const
 Get the prefix for accessing the address of 'scalar' variables. More...
 
bool areSixtyFourBitSynapseIndicesRequired (const SynapseGroupMergedBase &sg) const
 
const PreferencesBasegetPreferences () const
 
template<typename T >
const T & getPreferences () const
 

Additional Inherited Members

- Public Types inherited from CodeGenerator::BackendBase
typedef std::function< void(CodeStream &)> HostHandler
 
typedef std::function< void(CodeStream &, Substitutions &)> Handler
 
template<typename T >
using GroupHandler = std::function< void(CodeStream &, const T &, Substitutions &)>
 
typedef std::vector< std::pair< std::string, size_t > > MemorySpaces
 Vector of prefixes required to allocate in memory space and size of memory space. More...
 
- Protected Member Functions inherited from CodeGenerator::BackendBase
void addType (const std::string &type, size_t size, const std::string &lowestValue="")
 
void setPointerBytes (size_t pointerBytes)
 
void genNeuronIndexCalculation (CodeStream &os, const NeuronUpdateGroupMerged &ng, unsigned int batchSize) const
 
void genSynapseIndexCalculation (CodeStream &os, const SynapseGroupMergedBase &sg, unsigned int batchSize) const
 
void genCustomUpdateIndexCalculation (CodeStream &os, const CustomUpdateGroupMerged &cu) const
 
std::vector< ReductionTargetgenInitReductionTargets (CodeStream &os, const CustomUpdateGroupMerged &cg, const std::string &idx="") const
 
std::vector< ReductionTargetgenInitReductionTargets (CodeStream &os, const CustomUpdateWUGroupMerged &cg, const std::string &idx="") const
 

Constructor & Destructor Documentation

◆ Backend()

CodeGenerator::SingleThreadedCPU::Backend::Backend ( const std::string &  scalarType,
const Preferences preferences 
)
inline

Member Function Documentation

◆ genAllocateMemPreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genAllocateMemPreamble ( CodeStream os,
const ModelSpecMerged modelMerged,
const MemAlloc memAlloc 
) const
overridevirtual

Allocate memory is the first function in GeNN generated code called by usercode and it should only ever be called once. Therefore it's a good place for any global initialisation. This function generates a 'preamble' to this function.

Implements CodeGenerator::BackendBase.

◆ genCurrentSpikeLikeEventPull()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentSpikeLikeEventPull ( CodeStream os,
const NeuronGroupInternal ng,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pulling spike-like events emitted by a neuron group in the current timestep from the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCurrentSpikeLikeEventPush()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentSpikeLikeEventPush ( CodeStream os,
const NeuronGroupInternal ng,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pushing spike-like events emitted by a neuron group in the current timestep to the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCurrentTrueSpikePull()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentTrueSpikePull ( CodeStream os,
const NeuronGroupInternal ng,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pulling true spikes emitted by a neuron group in the current timestep from the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCurrentTrueSpikePush()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentTrueSpikePush ( CodeStream os,
const NeuronGroupInternal ng,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pushing true spikes emitted by a neuron group in the current timestep to the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCurrentVariablePull()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentVariablePull ( CodeStream os,
const NeuronGroupInternal ng,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pulling a variable's value in the current timestep from the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCurrentVariablePush()

void CodeGenerator::SingleThreadedCPU::Backend::genCurrentVariablePush ( CodeStream os,
const NeuronGroupInternal ng,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
unsigned int  batchSize 
) const
overridevirtual

Generate code for pushing a variable's value in the current timestep to the 'device'.

Implements CodeGenerator::BackendBase.

◆ genCustomUpdate()

void CodeGenerator::SingleThreadedCPU::Backend::genCustomUpdate ( CodeStream os,
const ModelSpecMerged modelMerged,
HostHandler  preambleHandler,
HostHandler  pushEGPHandler 
) const
overridevirtual

Generate platform-specific functions to perform custom updates.

Parameters
osCodeStream to write function to
modelMergedmerged model to generate code for
preambleHandlercallback to write functions for pushing extra-global parameters
pushEGPHandlercallback to write required extra-global parameter pushing code to start of customUpdate function

Implements CodeGenerator::BackendBase.

◆ genDefinitionsInternalPreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genDefinitionsInternalPreamble ( CodeStream os,
const ModelSpecMerged modelMerged 
) const
overridevirtual

Definitions internal is the internal header file for the generated code. This function generates a 'preamble' to this header file.

This will only be included by the platform-specific compiler used to build this backend so can include platform-specific types or headers

Implements CodeGenerator::BackendBase.

◆ genDefinitionsPreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genDefinitionsPreamble ( CodeStream os,
const ModelSpecMerged modelMerged 
) const
overridevirtual

Definitions is the usercode-facing header file for the generated code. This function generates a 'preamble' to this header file.

This will be included from a standard C++ compiler so shouldn't include any platform-specific types or headers

Implements CodeGenerator::BackendBase.

◆ genDenseSynapseVariableRowInit()

void CodeGenerator::SingleThreadedCPU::Backend::genDenseSynapseVariableRowInit ( CodeStream os,
const Substitutions kernelSubs,
Handler  handler 
) const
overridevirtual

◆ genExtraGlobalParamAllocation()

void CodeGenerator::SingleThreadedCPU::Backend::genExtraGlobalParamAllocation ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
const std::string &  countVarName = "count",
const std::string &  prefix = "" 
) const
overridevirtual

◆ genExtraGlobalParamDefinition()

void CodeGenerator::SingleThreadedCPU::Backend::genExtraGlobalParamDefinition ( CodeStream definitions,
CodeStream definitionsInternal,
const std::string &  type,
const std::string &  name,
VarLocation  loc 
) const
overridevirtual

◆ genExtraGlobalParamImplementation()

void CodeGenerator::SingleThreadedCPU::Backend::genExtraGlobalParamImplementation ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc 
) const
overridevirtual

◆ genExtraGlobalParamPull()

void CodeGenerator::SingleThreadedCPU::Backend::genExtraGlobalParamPull ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
const std::string &  countVarName = "count",
const std::string &  prefix = "" 
) const
overridevirtual

◆ genExtraGlobalParamPush()

void CodeGenerator::SingleThreadedCPU::Backend::genExtraGlobalParamPush ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
const std::string &  countVarName = "count",
const std::string &  prefix = "" 
) const
overridevirtual

◆ genFreeMemPreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genFreeMemPreamble ( CodeStream os,
const ModelSpecMerged modelMerged 
) const
overridevirtual

Free memory is called by usercode to free all memory allocatd by GeNN and should only ever be called once. This function generates a 'preamble' to this function, for example to free backend-specific objects

Implements CodeGenerator::BackendBase.

◆ genGlobalDeviceRNG()

void CodeGenerator::SingleThreadedCPU::Backend::genGlobalDeviceRNG ( CodeStream definitions,
CodeStream definitionsInternal,
CodeStream runner,
CodeStream allocations,
CodeStream free,
MemAlloc memAlloc 
) const
overridevirtual

Generate a single RNG instance.

On single-threaded platforms this can be a standard RNG like M.T. but, on parallel platforms, it is likely to be a counter-based RNG

Implements CodeGenerator::BackendBase.

◆ genInit()

void CodeGenerator::SingleThreadedCPU::Backend::genInit ( CodeStream os,
const ModelSpecMerged modelMerged,
HostHandler  preambleHandler,
HostHandler  initPushEGPHandler,
HostHandler  initSparsePushEGPHandler 
) const
overridevirtual

Generate platform-specific function to initialise model.

Parameters
osCodeStream to write function to
modelMergedmerged model to generate code for
preambleHandlercallback to write functions for pushing extra-global parameters
initPushEGPHandlercallback to write required extra-global parameter pushing code to start of initialize function
initSparsePushEGPHandlercallback to write required extra-global parameter pushing code to start of initializeSparse function

Implements CodeGenerator::BackendBase.

◆ genKernelCustomUpdateVariableInit()

void CodeGenerator::SingleThreadedCPU::Backend::genKernelCustomUpdateVariableInit ( CodeStream os,
const CustomWUUpdateInitGroupMerged cu,
const Substitutions kernelSubs,
Handler  handler 
) const
finalvirtual

◆ genKernelSynapseVariableInit()

void CodeGenerator::SingleThreadedCPU::Backend::genKernelSynapseVariableInit ( CodeStream os,
const SynapseInitGroupMerged sg,
const Substitutions kernelSubs,
Handler  handler 
) const
finalvirtual

◆ genMakefileCompileRule()

void CodeGenerator::SingleThreadedCPU::Backend::genMakefileCompileRule ( std::ostream &  os) const
overridevirtual

The GNU make build system uses 'pattern rules' (https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html) to build backend modules into objects. This function should generate a GNU make pattern rule capable of building each module (i.e. compiling .cc file $< into .o file $@).

Implements CodeGenerator::BackendBase.

◆ genMakefileLinkRule()

void CodeGenerator::SingleThreadedCPU::Backend::genMakefileLinkRule ( std::ostream &  os) const
overridevirtual

The GNU make build system will populate a variable called with a list of objects to link. This function should generate a GNU make rule to build these objects into a shared library.

Implements CodeGenerator::BackendBase.

◆ genMakefilePreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genMakefilePreamble ( std::ostream &  os) const
overridevirtual

This function can be used to generate a preamble for the GNU makefile used to build.

Implements CodeGenerator::BackendBase.

◆ genMergedExtraGlobalParamPush()

void CodeGenerator::SingleThreadedCPU::Backend::genMergedExtraGlobalParamPush ( CodeStream os,
const std::string &  suffix,
size_t  mergedGroupIdx,
const std::string &  groupIdx,
const std::string &  fieldName,
const std::string &  egpName 
) const
overridevirtual

! Generate code for pushing an updated EGP value into the merged group structure on 'device'

Implements CodeGenerator::BackendBase.

◆ genMSBuildCompileModule()

void CodeGenerator::SingleThreadedCPU::Backend::genMSBuildCompileModule ( const std::string &  moduleName,
std::ostream &  os 
) const
overridevirtual

◆ genMSBuildConfigProperties()

void CodeGenerator::SingleThreadedCPU::Backend::genMSBuildConfigProperties ( std::ostream &  os) const
overridevirtual

In MSBuild, 'properties' are used to configure global project settings e.g. whether the MSBuild project builds a static or dynamic library This function can be used to add additional XML properties to this section.

see https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-properties for more information.

Implements CodeGenerator::BackendBase.

◆ genMSBuildImportProps()

void CodeGenerator::SingleThreadedCPU::Backend::genMSBuildImportProps ( std::ostream &  os) const
overridevirtual

◆ genMSBuildImportTarget()

void CodeGenerator::SingleThreadedCPU::Backend::genMSBuildImportTarget ( std::ostream &  os) const
overridevirtual

◆ genMSBuildItemDefinitions()

void CodeGenerator::SingleThreadedCPU::Backend::genMSBuildItemDefinitions ( std::ostream &  os) const
overridevirtual

In MSBuild, the 'item definitions' are used to override the default properties of 'items' such as <ClCompile> or <Link>. This function should generate XML to correctly configure the 'items' required to build the generated code, taking into account etc.

see https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-items#item-definitions for more information.

Implements CodeGenerator::BackendBase.

◆ genNeuronUpdate()

void CodeGenerator::SingleThreadedCPU::Backend::genNeuronUpdate ( CodeStream os,
const ModelSpecMerged modelMerged,
HostHandler  preambleHandler,
HostHandler  pushEGPHandler 
) const
overridevirtual

Generate platform-specific function to update the state of all neurons.

Parameters
osCodeStream to write function to
modelMergedmerged model to generate code for
preambleHandlercallback to write functions for pushing extra-global parameters
pushEGPHandlercallback to write required extra-global parameter pushing code to start of neuronUpdate function

Implements CodeGenerator::BackendBase.

◆ genPopulationRNG()

void CodeGenerator::SingleThreadedCPU::Backend::genPopulationRNG ( CodeStream definitions,
CodeStream definitionsInternal,
CodeStream runner,
CodeStream allocations,
CodeStream free,
const std::string &  name,
size_t  count,
MemAlloc memAlloc 
) const
overridevirtual

Generate an RNG with a state per population member.

Implements CodeGenerator::BackendBase.

◆ genPopVariableInit()

void CodeGenerator::SingleThreadedCPU::Backend::genPopVariableInit ( CodeStream os,
const Substitutions kernelSubs,
Handler  handler 
) const
overridevirtual

◆ genReturnFreeDeviceMemoryBytes()

void CodeGenerator::SingleThreadedCPU::Backend::genReturnFreeDeviceMemoryBytes ( CodeStream os) const
overridevirtual

Generate code to return amount of free 'device' memory in bytes.

Implements CodeGenerator::BackendBase.

◆ genRunnerPreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genRunnerPreamble ( CodeStream os,
const ModelSpecMerged modelMerged,
const MemAlloc memAlloc 
) const
overridevirtual

◆ genSparseSynapseVariableRowInit()

void CodeGenerator::SingleThreadedCPU::Backend::genSparseSynapseVariableRowInit ( CodeStream os,
const Substitutions kernelSubs,
Handler  handler 
) const
overridevirtual

◆ genStepTimeFinalisePreamble()

void CodeGenerator::SingleThreadedCPU::Backend::genStepTimeFinalisePreamble ( CodeStream os,
const ModelSpecMerged modelMerged 
) const
overridevirtual

After all timestep logic is complete.

Implements CodeGenerator::BackendBase.

◆ genSynapseUpdate()

void CodeGenerator::SingleThreadedCPU::Backend::genSynapseUpdate ( CodeStream os,
const ModelSpecMerged modelMerged,
HostHandler  preambleHandler,
HostHandler  pushEGPHandler 
) const
overridevirtual

Generate platform-specific function to update the state of all synapses.

Parameters
osCodeStream to write function to
modelMergedmerged model to generate code for
preambleHandlercallback to write functions for pushing extra-global parameters
pushEGPHandlercallback to write required extra-global parameter pushing code to start of synapseUpdate function

Implements CodeGenerator::BackendBase.

◆ genTimer()

void CodeGenerator::SingleThreadedCPU::Backend::genTimer ( CodeStream definitions,
CodeStream definitionsInternal,
CodeStream runner,
CodeStream allocations,
CodeStream free,
CodeStream stepTimeFinalise,
const std::string &  name,
bool  updateInStepTime 
) const
overridevirtual

◆ genVariableAllocation()

void CodeGenerator::SingleThreadedCPU::Backend::genVariableAllocation ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
size_t  count,
MemAlloc memAlloc 
) const
overridevirtual

◆ genVariableDefinition()

void CodeGenerator::SingleThreadedCPU::Backend::genVariableDefinition ( CodeStream definitions,
CodeStream definitionsInternal,
const std::string &  type,
const std::string &  name,
VarLocation  loc 
) const
overridevirtual

◆ genVariableFree()

void CodeGenerator::SingleThreadedCPU::Backend::genVariableFree ( CodeStream os,
const std::string &  name,
VarLocation  loc 
) const
overridevirtual

◆ genVariableImplementation()

void CodeGenerator::SingleThreadedCPU::Backend::genVariableImplementation ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc 
) const
overridevirtual

◆ genVariableInit()

void CodeGenerator::SingleThreadedCPU::Backend::genVariableInit ( CodeStream os,
const std::string &  count,
const std::string &  indexVarName,
const Substitutions kernelSubs,
Handler  handler 
) const
overridevirtual

◆ genVariablePull()

void CodeGenerator::SingleThreadedCPU::Backend::genVariablePull ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
size_t  count 
) const
overridevirtual

Generate code for pulling a variable from the 'device'.

Implements CodeGenerator::BackendBase.

◆ genVariablePush()

void CodeGenerator::SingleThreadedCPU::Backend::genVariablePush ( CodeStream os,
const std::string &  type,
const std::string &  name,
VarLocation  loc,
bool  autoInitialized,
size_t  count 
) const
overridevirtual

Generate code for pushing a variable to the 'device'.

Implements CodeGenerator::BackendBase.

◆ getDeviceMemoryBytes()

virtual size_t CodeGenerator::SingleThreadedCPU::Backend::getDeviceMemoryBytes ( ) const
inlineoverridevirtual

How many bytes of memory does 'device' have.

Implements CodeGenerator::BackendBase.

◆ getDeviceVarPrefix()

virtual std::string CodeGenerator::SingleThreadedCPU::Backend::getDeviceVarPrefix ( ) const
inlineoverridevirtual

When backends require separate 'device' and 'host' versions of variables, they are identified with a prefix. This function returns the device prefix so it can be used in otherwise platform-independent code.

Reimplemented from CodeGenerator::BackendBase.

◆ getHashDigest()

boost::uuids::detail::sha1::digest_type CodeGenerator::SingleThreadedCPU::Backend::getHashDigest ( ) const
overridevirtual

Get hash digest of this backends identification and the preferences it has been configured with.

Implements CodeGenerator::BackendBase.

◆ getMergedGroupFieldHostType()

std::string CodeGenerator::SingleThreadedCPU::Backend::getMergedGroupFieldHostType ( const std::string &  type) const
overridevirtual

When generating function calls to push to merged groups, backend without equivalent of Unified Virtual Addressing e.g. OpenCL 1.2 may use different types on host.

Implements CodeGenerator::BackendBase.

◆ getMergedGroupMemorySpaces()

Backend::MemorySpaces CodeGenerator::SingleThreadedCPU::Backend::getMergedGroupMemorySpaces ( const ModelSpecMerged modelMerged) const
overridevirtual

Some backends will have additional small, fast, memory spaces for read-only data which might Be well-suited to storing merged group structs. This method returns the prefix required to Place arrays in these and their size in preferential order

Implements CodeGenerator::BackendBase.

◆ getMergedGroupSimRNGType()

std::string CodeGenerator::SingleThreadedCPU::Backend::getMergedGroupSimRNGType ( ) const
overridevirtual

When generating merged structures what type to use for simulation RNGs.

Implements CodeGenerator::BackendBase.

◆ getSynapticMatrixRowStride()

size_t CodeGenerator::SingleThreadedCPU::Backend::getSynapticMatrixRowStride ( const SynapseGroupInternal sg) const
overridevirtual

Gets the stride used to access synaptic matrix rows, taking into account sparse data structure, padding etc.

Implements CodeGenerator::BackendBase.

◆ isDeviceScalarRequired()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::isDeviceScalarRequired ( ) const
inlineoverridevirtual

Should 'scalar' variables be implemented on device or can host variables be used directly?

Implements CodeGenerator::BackendBase.

◆ isGlobalDeviceRNGRequired()

bool CodeGenerator::SingleThreadedCPU::Backend::isGlobalDeviceRNGRequired ( const ModelSpecMerged modelMerged) const
overridevirtual

Different backends use different RNGs for different things. Does this one require a global device RNG for the specified model?

Implements CodeGenerator::BackendBase.

◆ isGlobalHostRNGRequired()

bool CodeGenerator::SingleThreadedCPU::Backend::isGlobalHostRNGRequired ( const ModelSpecMerged modelMerged) const
overridevirtual

Different backends use different RNGs for different things. Does this one require a global host RNG for the specified model?

Implements CodeGenerator::BackendBase.

◆ isHostReductionRequired()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::isHostReductionRequired ( ) const
inlineoverridevirtual

Backends which support batch-parallelism might require an additional host reduction phase after reduction kernels.

Implements CodeGenerator::BackendBase.

◆ isPopulationRNGInitialisedOnDevice()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::isPopulationRNGInitialisedOnDevice ( ) const
inlineoverridevirtual

Different backends seed RNGs in different ways. Does this one initialise population RNGS on device?

Implements CodeGenerator::BackendBase.

◆ isPopulationRNGRequired()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::isPopulationRNGRequired ( ) const
inlineoverridevirtual

Different backends use different RNGs for different things. Does this one require population RNGs?

Implements CodeGenerator::BackendBase.

◆ isPostsynapticRemapRequired()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::isPostsynapticRemapRequired ( ) const
inlineoverridevirtual

Different backends may implement synaptic plasticity differently. Does this one require a postsynaptic remapping data structure?

Implements CodeGenerator::BackendBase.

◆ supportsNamespace()

virtual bool CodeGenerator::SingleThreadedCPU::Backend::supportsNamespace ( ) const
inlineoverridevirtual

Does this backend support namespaces i.e. can C++ implementation of support functions be used.

Implements CodeGenerator::BackendBase.


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