Skip to content

GeNN 4.1.0

Compare
Choose a tag to compare
@neworderofjamie neworderofjamie released this 05 Nov 16:04
· 4240 commits to master since this release
37e7a83

This release adds a number of new features to GeNN and its SpineML interface as well as fixing a number of bugs that have been identified since the 4.0.2 release.

User Side Changes

  1. The SpineML simulator could previously only be used as a standalone application. This functionality is now provided by the spineml_simulator library and can be used via the SpineMLSimulator::Simulator class.
  2. When declaring a model's variables using SET_VAR, they can be marked as read-only by adding a 3rd parameter set to VarAccess::READ_ONLY to enable further optimisations.
  3. Previously, unless models were very large or had very high spike rates, using SynapseGroup::SpanType::PRESYNAPTIC typically resulted in poor performance. When using the CUDA backend, SynapseGroup::setNumThreadsPerSpike can now be used to increase parallelism.
  4. There were useful helpers for recording spikes (SpikeRecorder) and timing (Timer, TimerAccumulate) in "userproject\include" which were not easily usable to user projects. genn-create-userproject.sh and genn-create-userproject.bat now have a "-u" option which puts this in the include path of the generated project.
  5. Timing information generated when ModelSpec::setTiming is enabled was not accesible to SpineML models. This is now exposed through the SpineMLSimulator::Simulator class.
  6. Neuron population state variables were not easily accessible if the populations had incoming or outgoing connections with synaptic delays. Additional helper functions are now generated.
  7. SpineML interface will now use heterogeneous dendritic delay system introduced in GeNN 3.2.0 if required.
  8. Add CodeGenerator::CUDA::Preferences::generateLineInfo option to output CUDA line info for profiling.
  9. CUDA backend supports half datatype allowing memory savings through reduced precision. Host C++ code does not support half-precision types so such state variables must have their location set to VarLocation::DEVICE.
  10. If ModelSpec::setDefaultNarrowSparseIndEnabled is set on a model or SynapseGroup::setNarrowSparseIndEnabled is set on an individual synapse population with sparse connectivity, 16-bit numbers will be used for postsynaptic indices, almost halving memory requirements.
  11. Manual selection of CUDA devices is now exposed to PyGeNN via the pygenn.genn_model.GeNNModel.selected_gpu property.

Bug fixes:

  1. Fixed incomaptibilies with GCC 4.9
  2. Fixed bug that occured if derived parameters were used in spike-like-event threshold conditions.
  3. Fixed bug that occured when merging of postsynaptic models is enabled and GeNN decides to employ specific CUDA optimizations.
  4. Increase maximum supported CUDA kernel grid size - a bug was limiting this to 65536.
  5. Fixed bugs in timing system when used with synapse dynamics kernels.