|
| BackendSIMT (const KernelBlockSize &kernelBlockSizes, const PreferencesBase &preferences, const std::string &scalarType) |
|
virtual bool | areSharedMemAtomicsSlow () const =0 |
| On some older devices, shared memory atomics are actually slower than global memory atomics so should be avoided. More...
|
|
virtual std::string | getSharedPrefix () const =0 |
| Get the prefix to use for shared memory variables. More...
|
|
virtual std::string | getThreadID (unsigned int axis=0) const =0 |
| Get the ID of the current thread within the threadblock. More...
|
|
virtual std::string | getBlockID (unsigned int axis=0) const =0 |
| Get the ID of the current thread block. More...
|
|
virtual std::string | getCLZ () const =0 |
| Get the name of the count-leading-zeros function. More...
|
|
virtual std::string | getAtomic (const std::string &type, AtomicOperation op=AtomicOperation::ADD, AtomicMemSpace memSpace=AtomicMemSpace::GLOBAL) const =0 |
| Get name of atomic operation. More...
|
|
virtual void | genSharedMemBarrier (CodeStream &os) const =0 |
| Generate a shared memory barrier. More...
|
|
virtual void | genPopulationRNGInit (CodeStream &os, const std::string &globalRNG, const std::string &seed, const std::string &sequence) const =0 |
| For SIMT backends which initialize RNGs on device, initialize population RNG with specified seed and sequence. More...
|
|
virtual void | genPopulationRNGPreamble (CodeStream &os, Substitutions &subs, const std::string &globalRNG, const std::string &name="rng") const =0 |
| Generate a preamble to add substitution name for population RNG. More...
|
|
virtual void | genPopulationRNGPostamble (CodeStream &os, const std::string &globalRNG) const =0 |
| If required, generate a postamble for population RNG. More...
|
|
virtual void | genGlobalRNGSkipAhead (CodeStream &os, Substitutions &subs, const std::string &sequence, const std::string &name="rng") const =0 |
| Generate code to skip ahead local copy of global RNG. More...
|
|
virtual size_t | getSynapticMatrixRowStride (const SynapseGroupInternal &sg) const final |
| Gets the stride used to access synaptic matrix rows, taking into account sparse data structure, padding etc. More...
|
|
virtual std::string | getDeviceVarPrefix () const final |
|
virtual void | genPopVariableInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const final |
|
virtual void | genVariableInit (CodeStream &os, const std::string &count, const std::string &indexVarName, const Substitutions &kernelSubs, Handler handler) const final |
|
virtual void | genSparseSynapseVariableRowInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const final |
|
virtual void | genDenseSynapseVariableRowInit (CodeStream &os, const Substitutions &kernelSubs, Handler handler) const final |
|
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 bool | isDeviceScalarRequired () const final |
| Should 'scalar' variables be implemented on device or can host variables be used directly? More...
|
|
virtual bool | isGlobalHostRNGRequired (const ModelSpecMerged &modelMerged) const final |
| 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 final |
| 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 final |
| Different backends use different RNGs for different things. Does this one require population RNGs? More...
|
|
virtual bool | isPostsynapticRemapRequired () const final |
| Different backends may implement synaptic plasticity differently. Does this one require a postsynaptic remapping data structure? More...
|
|
size_t | getNumInitialisationRNGStreams (const ModelSpecMerged &modelMerged) const |
| Get total number of RNG streams potentially used to initialise model. More...
|
|
size_t | getKernelBlockSize (Kernel kernel) const |
|
size_t | getPaddedNumCustomUpdateThreads (const CustomUpdateInternal &cg, unsigned int batchSize) const |
|
size_t | getPaddedNumCustomUpdateWUThreads (const CustomUpdateWUInternal &cg, unsigned int batchSize) const |
|
size_t | getPaddedNumCustomUpdateTransposeWUThreads (const CustomUpdateWUInternal &cg, unsigned int batchSize) const |
|
| BackendBase (const std::string &scalarType, const PreferencesBase &preferences) |
|
virtual | ~BackendBase () |
|
virtual void | genNeuronUpdate (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler pushEGPHandler) const =0 |
| 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 =0 |
| 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 =0 |
| Generate platform-specific functions to perform custom updates. More...
|
|
virtual void | genInit (CodeStream &os, const ModelSpecMerged &modelMerged, HostHandler preambleHandler, HostHandler initPushEGPHandler, HostHandler initSparsePushEGPHandler) const =0 |
| Generate platform-specific function to initialise model. More...
|
|
virtual void | genDefinitionsPreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const =0 |
| 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 =0 |
| 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 =0 |
|
virtual void | genAllocateMemPreamble (CodeStream &os, const ModelSpecMerged &modelMerged, const MemAlloc &memAlloc) const =0 |
|
virtual void | genFreeMemPreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const =0 |
|
virtual void | genStepTimeFinalisePreamble (CodeStream &os, const ModelSpecMerged &modelMerged) const =0 |
| 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 =0 |
|
virtual void | genVariableImplementation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc) const =0 |
|
virtual void | genVariableAllocation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, size_t count, MemAlloc &memAlloc) const =0 |
|
virtual void | genVariableFree (CodeStream &os, const std::string &name, VarLocation loc) const =0 |
|
virtual void | genExtraGlobalParamDefinition (CodeStream &definitions, CodeStream &definitionsInternal, const std::string &type, const std::string &name, VarLocation loc) const =0 |
|
virtual void | genExtraGlobalParamImplementation (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc) const =0 |
|
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 =0 |
|
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 =0 |
|
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 =0 |
|
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 =0 |
| 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 =0 |
| 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 =0 |
| When generating merged structures what type to use for simulation RNGs. More...
|
|
virtual void | genVariablePush (CodeStream &os, const std::string &type, const std::string &name, VarLocation loc, bool autoInitialized, size_t count) const =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
| 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 =0 |
|
virtual void | genReturnFreeDeviceMemoryBytes (CodeStream &os) const =0 |
| Generate code to return amount of free 'device' memory in bytes. More...
|
|
virtual void | genMakefilePreamble (std::ostream &os) const =0 |
| This function can be used to generate a preamble for the GNU makefile used to build. More...
|
|
virtual void | genMakefileLinkRule (std::ostream &os) const =0 |
|
virtual void | genMakefileCompileRule (std::ostream &os) const =0 |
|
virtual void | genMSBuildConfigProperties (std::ostream &os) const =0 |
|
virtual void | genMSBuildImportProps (std::ostream &os) const =0 |
|
virtual void | genMSBuildItemDefinitions (std::ostream &os) const =0 |
|
virtual void | genMSBuildCompileModule (const std::string &moduleName, std::ostream &os) const =0 |
|
virtual void | genMSBuildImportTarget (std::ostream &os) const =0 |
|
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...
|
|
virtual bool | isPopulationRNGInitialisedOnDevice () const =0 |
| Different backends seed RNGs in different ways. Does this one initialise population RNGS on device? More...
|
|
virtual bool | isHostReductionRequired () const =0 |
| Backends which support batch-parallelism might require an additional host reduction phase after reduction kernels. More...
|
|
virtual size_t | getDeviceMemoryBytes () const =0 |
| How many bytes of memory does 'device' have. More...
|
|
virtual MemorySpaces | getMergedGroupMemorySpaces (const ModelSpecMerged &modelMerged) const =0 |
|
virtual bool | supportsNamespace () const =0 |
| 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 =0 |
| Get hash digest of this backends identification and the preferences it has been configured with. 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 PreferencesBase & | getPreferences () const |
|
template<typename T > |
const T & | getPreferences () const |
|