10 #include <plog/Severity.h> 60 typedef std::function<void(CodeStream &, Substitutions&)>
Handler;
63 using GroupHandler = std::function <void(CodeStream &, const T &, Substitutions&)> ;
77 : m_LocalHostID(localHostID)
90 virtual void genNeuronUpdate(
CodeStream &os,
const ModelSpecInternal &model, NeuronGroupSimHandler simHandler, NeuronGroupHandler wuVarUpdateHandler)
const = 0;
108 SynapseGroupHandler wumThreshHandler, SynapseGroupHandler wumSimHandler, SynapseGroupHandler wumEventHandler,
109 SynapseGroupHandler postLearnHandler, SynapseGroupHandler synapseDynamicsHandler)
const = 0;
112 NeuronGroupHandler localNGHandler, NeuronGroupHandler remoteNGHandler,
113 SynapseGroupHandler sgDenseInitHandler, SynapseGroupHandler sgSparseConnectHandler,
114 SynapseGroupHandler sgSparseInitHandler)
const = 0;
118 virtual void genDefinitionsPreamble(
CodeStream &os)
const = 0;
122 virtual void genDefinitionsInternalPreamble(
CodeStream &os)
const = 0;
125 virtual void genRunnerPreamble(
CodeStream &os)
const = 0;
134 virtual void genVariableDefinition(
CodeStream &definitions,
CodeStream &definitionsInternal,
const std::string &type,
const std::string &name,
VarLocation loc)
const = 0;
135 virtual void genVariableImplementation(
CodeStream &os,
const std::string &type,
const std::string &name,
VarLocation loc)
const = 0;
136 virtual void genVariableAllocation(
CodeStream &os,
const std::string &type,
const std::string &name,
VarLocation loc,
size_t count)
const = 0;
139 virtual void genExtraGlobalParamDefinition(
CodeStream &definitions,
const std::string &type,
const std::string &name,
VarLocation loc)
const = 0;
140 virtual void genExtraGlobalParamImplementation(
CodeStream &os,
const std::string &type,
const std::string &name,
VarLocation loc)
const = 0;
141 virtual void genExtraGlobalParamAllocation(
CodeStream &os,
const std::string &type,
const std::string &name,
VarLocation loc)
const = 0;
142 virtual void genExtraGlobalParamPush(
CodeStream &os,
const std::string &type,
const std::string &name)
const = 0;
143 virtual void genExtraGlobalParamPull(
CodeStream &os,
const std::string &type,
const std::string &name)
const = 0;
146 virtual void genVariableInit(
CodeStream &os,
VarLocation loc,
size_t count,
const std::string &indexVarName,
151 virtual void genVariablePush(
CodeStream &os,
const std::string &type,
const std::string &name,
bool autoInitialized,
size_t count)
const = 0;
152 virtual void genVariablePull(
CodeStream &os,
const std::string &type,
const std::string &name,
size_t count)
const = 0;
160 const std::string &name,
size_t count)
const = 0;
162 CodeStream &stepTimeFinalise,
const std::string &name,
bool updateInStepTime)
const = 0;
165 virtual void genMakefilePreamble(std::ostream &os)
const = 0;
169 virtual void genMakefileLinkRule(std::ostream &os)
const = 0;
173 virtual void genMakefileCompileRule(std::ostream &os)
const = 0;
178 virtual void genMSBuildConfigProperties(std::ostream &os)
const = 0;
179 virtual void genMSBuildImportProps(std::ostream &os)
const = 0;
184 virtual void genMSBuildItemDefinitions(std::ostream &os)
const = 0;
185 virtual void genMSBuildCompileModule(
const std::string &moduleName, std::ostream &os)
const = 0;
186 virtual void genMSBuildImportTarget(std::ostream &os)
const = 0;
194 virtual bool isSynRemapRequired()
const = 0;
195 virtual bool isPostsynapticRemapRequired()
const = 0;
202 const std::string &type,
const std::string &name,
bool autoInitialized,
size_t count)
const 204 genVariablePush(push, type, name, autoInitialized, count);
205 genVariablePull(pull, type, name, count);
210 const std::string &type,
const std::string &name,
VarLocation loc,
size_t count)
const 212 genVariableDefinition(definitions, definitionsInternal, type +
"*", name, loc);
213 genVariableImplementation(runner, type +
"*", name, loc);
214 genVariableAllocation(allocations, type, name, loc, count);
215 genVariableFree(free, name, loc);
221 genVariableDefinition(definitions, definitionsInternal, type, name, loc);
222 genVariableImplementation(runner, type, name, loc);
232 const int m_LocalHostID;
void genVariablePushPull(CodeStream &push, CodeStream &pull, const std::string &type, const std::string &name, bool autoInitialized, size_t count) const
Helper function to generate matching push and pull functions for a variable.
Definition: backendBase.h:201
Definition: neuronGroupInternal.h:9
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) const
Helper function to generate matching definition, declaration, allocation and free code for an array...
Definition: backendBase.h:209
BackendBase(int localHostID)
Definition: backendBase.h:76
VarLocation
< Flags defining which memory space variables should be allocated in
Definition: variableMode.h:10
#define GENN_EXPORT
Definition: gennExport.h:13
Base class for backend preferences - can be accessed via a global in 'classic' C++ code generator...
Definition: backendBase.h:33
std::function< void(CodeStream &, const NeuronGroupInternal &, Substitutions &, NeuronGroupHandler, NeuronGroupHandler)> NeuronGroupSimHandler
Callback function type for generation neuron group simulation code.
Definition: backendBase.h:74
GroupHandler< SynapseGroupInternal > SynapseGroupHandler
Standard callback type which provides a CodeStream to write platform-independent code for the specifi...
Definition: backendBase.h:69
Helper class for generating code - automatically inserts brackets, indents etc.
Definition: backendBase.h:22
GroupHandler< NeuronGroupInternal > NeuronGroupHandler
Standard callback type which provides a CodeStream to write platform-independent code for the specifi...
Definition: backendBase.h:66
Definition: synapseGroupInternal.h:9
Definition: codeStream.h:19
Definition: substitutions.h:19
void genScalar(CodeStream &definitions, CodeStream &definitionsInternal, CodeStream &runner, const std::string &type, const std::string &name, VarLocation loc) const
Helper function to generate matching definition and declaration code for a scalar variable...
Definition: backendBase.h:219
Definition: backendBase.h:54
bool debugCode
Generate code with debug symbols.
Definition: backendBase.h:39
std::string userCxxFlagsGNU
C++ compiler options to be used for building all host side code (used for unix based platforms) ...
Definition: backendBase.h:42
Definition: modelSpecInternal.h:10
int getLocalHostID() const
Gets ID of local host backend is building code for.
Definition: backendBase.h:226
std::function< void(CodeStream &, const T &, Substitutions &)> GroupHandler
Definition: backendBase.h:63
virtual ~BackendBase()
Definition: backendBase.h:80
plog::Severity logLevel
Logging level to use for code generation.
Definition: backendBase.h:48
std::string userNvccFlagsGNU
NVCC compiler options they may want to use for all GPU code (used for unix based platforms) ...
Definition: backendBase.h:45
virtual std::string getVarPrefix() const
Definition: backendBase.h:190
std::function< void(CodeStream &, Substitutions &)> Handler
Definition: backendBase.h:60
bool optimizeCode
Generate speed-optimized code, potentially at the expense of floating-point accuracy.
Definition: backendBase.h:36