|
| | 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 |
| |