GeNN 4.0.0
·
4545 commits
to master
since this release
This release is the result of a second round of fairly major refactoring which we hope will make GeNN easier to use and allow it to be extended more easily in future.
However, especially if you have been using GeNN 2.XX syntax, it breaks backward compatibility.
User Side Changes
- Totally new build system -
make install
can be used to install GeNN to a system location on Linux and Mac and Windows projects work much better in the Visual Studio IDE. - Python interface now supports Windows and can be installed using binary 'wheels'.
- No need to call
initGeNN()
at start andmodel.finalize()
at end of all models. - Initialisation system simplified - if you specify a value or initialiser for a variable or sparse connectivity,
it will be initialised by your chosen backend. If you mark it as uninitialised, it is up to you to initialize it
in user code between the calls toinitialize()
andinitializeSparse()
(where it will be copied to device). genn-create-user-project
helper scripts to create Makefiles or MSBuild projects for building user code- State variables can now be pushed and pulled individually using the
pull<var name><neuron or synapse name>FromDevice()
andpush<var name><neuron or synapse name>ToDevice()
functions. - Management of extra global parameter arrays has been somewhat automated.
GENN_PREFERENCES
is no longer a namespace - it's a global struct so members need to be accessed with . rather than ::.NeuronGroup
,SynapseGroup
,CurrentSource
andNNmodel
all previously exposed a lot of methods that the user wasn't supposed to call but could.
These have now all been made protected and are exposed to GeNN internals using derived classes (NeuronGroupInternal
,SynapseGroupInternal
,CurrentSourceInternal
,ModelSpecInternal
) that make them public usingusing
directives.- Auto-refractory behaviour was controlled using
GENN_PREFERENCES::autoRefractory
, this is now controlled on a per-neuron-model basis using theSET_NEEDS_AUTO_REFRACTORY
macro. - The functions used for pushing and pulling have been unified somewhat this means that
copyStateToDevice
andcopyStateFromDevice
functions no longer copy spikes andpus<neuron or synapse name>SpikesToDevice
andpull<neuron or synapse name>SpikesFromDevice
no longer copy spike times or spike-like events. - Standard models of leaky-integrate-and-fire neuron (
NeuronModels::LIF
) and of exponentially shaped postsynaptic current (PostsynapticModels::ExpCurr
) have been added. - When a model is built using the CUDA backend, the device it was built for is stored using it's PCI bus ID so it will always use the same device.
- -s option for buildmodel.sh allows C++ standard used to build model to be set.
Deprecations
- Yale-format sparse matrices are no longer supported.
- GeNN 2.X syntax for implementing neuron and synapse models is no longer supported.
$(addtoinSyn) = X; $(updatelinsyn);
idiom in weight update models has been replaced by function style$(addToInSyn, X);
.