Skip to content

GeNN 4.0.0

Compare
Choose a tag to compare
@neworderofjamie neworderofjamie released this 23 May 08:48
· 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

  1. 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.
  2. Python interface now supports Windows and can be installed using binary 'wheels'.
  3. No need to call initGeNN() at start and model.finalize() at end of all models.
  4. 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 to initialize() and initializeSparse() (where it will be copied to device).
  5. genn-create-user-project helper scripts to create Makefiles or MSBuild projects for building user code
  6. State variables can now be pushed and pulled individually using the pull<var name><neuron or synapse name>FromDevice() and push<var name><neuron or synapse name>ToDevice() functions.
  7. Management of extra global parameter arrays has been somewhat automated.
  8. GENN_PREFERENCES is no longer a namespace - it's a global struct so members need to be accessed with . rather than ::.
  9. NeuronGroup, SynapseGroup, CurrentSource and NNmodel 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 using using directives.
  10. Auto-refractory behaviour was controlled using GENN_PREFERENCES::autoRefractory, this is now controlled on a per-neuron-model basis using the SET_NEEDS_AUTO_REFRACTORY macro.
  11. The functions used for pushing and pulling have been unified somewhat this means that copyStateToDevice and copyStateFromDevice functions no longer copy spikes and pus<neuron or synapse name>SpikesToDevice and pull<neuron or synapse name>SpikesFromDevice no longer copy spike times or spike-like events.
  12. Standard models of leaky-integrate-and-fire neuron (NeuronModels::LIF) and of exponentially shaped postsynaptic current (PostsynapticModels::ExpCurr) have been added.
  13. 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.
  14. -s option for buildmodel.sh allows C++ standard used to build model to be set.

Deprecations

  1. Yale-format sparse matrices are no longer supported.
  2. GeNN 2.X syntax for implementing neuron and synapse models is no longer supported.
  3. $(addtoinSyn) = X; $(updatelinsyn); idiom in weight update models has been replaced by function style $(addToInSyn, X);.