Skip to content

Releases: genn-team/genn

GeNN 4.5.0

15 Jul 11:31
1d46a69
Compare
Choose a tag to compare

Release Notes for GeNN v4.5.0 (PyGeNN 0.4.5)

This release adds a number of significant new features to GeNN as well as several usability improvements for PyGeNN.
It also includes a number of bug fixes that have been identified since the 4.4.0 release.

User Side Changes

  1. When performing inference on datasets, batching helps fill the GPU and improve performance. This could be previously achieved using "master" and "slave" synapse populations but this didn't scale well. Models can now be automatically batched using ModelSpec::setBatchSize or pygenn.genn_model.GeNNModel.batch_size (#392).
  2. As well as more typical neuron, weight update, postsynaptic and current source models, you can now define custom update models which define a process which can be applied to any variable in the model. These can be used for e.g. resetting state variables or implementing optimisers for gradient-based learning (#405).
  3. Model compilation and CUDA block size optimisation could be rather slow in previous versions. More work is still required in this area but, code will now only be re-generated if the model has actually changed and block sizes will only be re-optimised for modules which have changed. Rebuilding can be forced with the -f flag to genn-buildmodel or the force_rebuild flag to pygenn.GeNNModel.build (#427, #430).
  4. Binary PyGeNN wheels are now always built with Python 3 (#401).
  5. To aid debugging, debug versions of PyGeNN can now be built (#396).
  6. OpenCL performance on AMD devices is improved - this has only been tested on a Radeon RX 5700 XT so any feedback from users with other devices would be much appreciated (#390).
  7. Exceptions raised by GeNN are now correctly passed through PyGeNN to Python (#433).
  8. Spike times (and spike-like event times) can now be accessed, pushed and pulled from PyGeNN (see pygenn.genn_groups.NeuronGroup.spike_times, pygenn.genn_groups.NeuronGroup.push_spike_times_to_device and pygenn.genn_groups.NeuronGroup.pull_spike_times_from_device ) (#432)
  9. On models where postsynaptic merging isn't enabled, the postsynaptic input current from a synapse group can now be accessed from PyGeNN via pygenn.genn_groups.SynapseGroup.in_syn; and pushed and pulled with pygenn.genn_groups.SynapseGroup.push_in_syn_to_device and pygenn.genn_groups.SynapseGroup.pull_in_syn_from_device respectively (#432).
  10. Accessing extra global parameters from PyGeNN was previously rather cumbersome. Now, you don't need to manually pass a size to e.g. pygenn.genn_groups.NeuronGroup.pull_extra_global_param_from_device and, if you are using non-pointer extra global parameters, you no longer need to call e.g. pygenn.genn_groups.NeuronGroup.set_extra_global_param before loading your model (#415).

Bug fixes:

  1. cudaFree was incorrectly called twice on zero-copy variables, causing crashes on exit (#395)
  2. Build in Izhikevich neurons incorrectly used auto-refractory mechanism, limiting their maximum firing rate (#404)
  3. On Windows, 64-bit version of compiler is now always used (#407)
  4. Fixed issues with CUDA 9.0 and 9.1 introduced in v4.4.0 release (#412)
  5. Fixed race condition relating to accessing previous spike times (#414)
  6. Fixed bug in column-wise connectivity initialisation (#419)
  7. Fixed issue with binomialInverseCDF function (used for calculating the maximum row length of probabilistic connectivity) which could fail when using some parameter combinations (#426)

GeNN 4.4.0

05 Jan 09:37
Compare
Choose a tag to compare

Release Notes for GeNN v4.4.0 (PyGeNN 0.4.4)

This release adds a number of significant new features to GeNN and expands the documentation to cover using GeNN from Python with PyGeNN. It also includes a number of bug fixes that have been identified since the 4.3.3 release.

User Side Changes

  1. Improved documentation covering PyGeNN now available from https://genn-team.github.io/genn/
  2. New system for efficiently recording spikes from multiple timesteps into GPU memory (#372).
  3. Connectivity can now be initialised using column-wise as well as row-wise sparse connectivity initialisation snippets (#374).
  4. Support for 'kernel-based' connectivity, allowing efficient support for connectivity such as convolutions (#373).
  5. Improved access to spike times from weight update models - previous spike times can now be accessed via $(prev_sT_pre) and $(prev_sT_post) (#376).
  6. Added support for accessing spike-like-event times from weight update models via $(seT_pre) and $(prev_seT_pre) variables (#380)
  7. Added support for continuous as well as spike-driven dynamics for pre and postsynaptic weight update model variables (#377).
  8. Added experimental OpenCL backend - there are still issues outstanding but any feedback would be much appreciated (#340).
  9. Improved supression of irrelevant NVCC warnings when optimizing block sizes (#361).
  10. Added support for SM 8.0 and 8.6 architectures to CUDA backend (#361).
  11. Number of presynaptic and postsynaptic neurons are now available via $(num_pre) and $(num_post) in all connectivity initialisation and procedural connectivity kernels (#384)

Bug fixes:

  1. Fixed support for CUDA 8 and older (#361).
  2. Replaced deprecated __linux macro with __linux__ making GeNN compatible with compiler on POWER9 Linux (#363).
  3. Fixed bug where the initialisation of neuron groups which are identical apart from one needing an RNG could be incorrectly merged (#387).

GeNN 4.3.3

10 Sep 12:35
cf10ee1
Compare
Choose a tag to compare

Release Notes for GeNN v4.3.3 (PyGeNN 0.4.3)

This release fixes several small issues found in the 4.3.2 release.

Bug fixes:

  1. Fixed bug in bitmask connectivity and procedural connectivity kernels.
  2. Fixed issues with setting model precision in PyGeNN. Time precision can now be set seperately using the time_precision option to the pygenn.genn_model.GeNNModel constructor.

GeNN 4.3.2

10 Aug 08:03
9957b0c
Compare
Choose a tag to compare

Release Notes for GeNN v4.3.2 (PyGeNN 0.4.2)

This release fixes several small issues found in the 4.3.1 release.

Bug fixes:

  1. Fixed bug when simulating models with very small timesteps.
  2. Fixed bug in code generator where synapse groups with procedural variables could be incorrectly merged.
  3. Fixed bug in code generator where references to parameters in sparse connectivity initialisation snippet row build state variables were not found.
  4. Fixed issue with PyGeNN and custom sparse connectivity init snippets that led to segfaults.
  5. Fixed bug that prevented PyGeNN being used with procedural connectivity.
  6. In models with a large number of populations, the CUDA constant cache could overflow. This has been fixed and, if your application has additional constant cache requirements, these can be added to GENN_PREFERENCES.constantCacheOverhead.

GeNN 4.3.1

13 Jul 11:09
14b8de3
Compare
Choose a tag to compare

Release Notes for GeNN v4.3.1 (PyGeNN 0.4.1)

This release fixes several small issues found in the 4.3.0 release.

Bug fixes:

  1. Fixed reference-counting bugs in PyGeNN that prevented multiple models from being instantiated.
  2. Fixed PyGeNN interface for downloading connectivity from GPU.
  3. Fixed host initialisation of sparse connectivity initialisation snippet extra global parameters using the CPU backend.
  4. Upgraded third-party logging library to fix issues compiling SpineML generator with Visual Studio 2019.
  5. Fixed bug in new code generator that didn't disambiguate between pre or postsynaptic neuron parameters and synapse parameters with the same name.

GeNN 4.3.0

29 May 16:27
cd2e531
Compare
Choose a tag to compare

Release Notes for GeNN v4.3.0 (PyGeNN 0.4.0)

This release adds a number of significant new features to GeNN as well as making small improvements to PyGeNN. It also includes a number of bug fixes that have been identified since the 4.2.1 release.

User Side Changes

  1. Previously GeNN performed poorly with large numbers of populations. This version includes a new code generator which effectively solves this problem (see paper).
  2. InitSparseConnectivitySnippet::Base row build state and NeuronModels::Base additional input variables could previously only be initialised with a numeric value. Now they can be initialised with a code string supporting substitutions etc.
  3. Added GeNN implementation of cortical microcircuit model to userprojects (discussed further in paper). Also demonstrates how to dynamically load GeNN models rather than linking against them.
  4. Previously one pushed states and spikes to and from device in PyGeNN using methods like genn_model.GeNNModel.push_current_spikes_to_device which was somewhat cumbersome. These have now been wrapped in methods like genn_groups.NeuronGroup.push_current_spikes_to_device which is somewhat nicer.
  5. The CodeGenerator::generateAll function now returns memory estimates which are, in turn, returned from genn_model.GeNNModel.build.
  6. To better support batching of inputs into multiple instances of the same model, added ModelSpec::addSlaveSynapsePopulation to add synapse populations which share per-synapse state with a 'master' synapse group.
  7. Added extra global parameters to variable initialisation snippets - can be used for lookup table style functionality.
  8. Added support for host initialisation of sparse connectivity initialisation snippet extra global parameters. This allows host-based initialisation to be encapsulated within an InitSparseConnectivitySnippet::Base class.

Bug fixes:

  1. Fixed issues preventing spike recorder classes from compiling with GCC 4.9, thanks to Christoph Ostrau for this one!
  2. The initialisers for pre and postsynaptic weight update model variables were not searched for references to an RNG when determining whether a neuron group requires an initialisation RNG.
  3. Fixed issue with PyGeNN and custom var init snippets that led to segfaults.

GeNN 4.2.1

27 Apr 16:32
0006a5f
Compare
Choose a tag to compare

Release Notes for GeNN v4.2.1 (PyGeNN 0.3.1)

This release fixes several small issues including several relating to Brian2GeNN compatibility.

User Side Changes

  1. Added -s option to genn-buildmodel.bat on Windows to turn off Visual C++ additional security checks (SDL), allowing Brian2GeNN libraries to be included in code generator.

Bug fixes:

  1. Fixed bug where $(sT_pre) and $(sT_post) were incorrect when accessed in weight update model pre and postsynaptic spike code respectively when using the single-threaded CPU backend.
  2. Fixed a corner case where valid models might result in compiler errors about Isyn not being defined.
  3. Fixed a bug preventing multiple include paths being passed to genn-buildmodel.bat on Windows.

GeNN 4.2.0

24 Mar 14:12
Compare
Choose a tag to compare

Release Notes for GeNN v4.2.0 (PyGeNN 0.3)

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

User Side Changes

  1. Kernel timings can now be enabled from python with pygenn.genn_model.GeNNModel.timing_enabled and subsequently accessed with pygenn.genn_model.GeNNModel.neuron_update_time, pygenn.genn_model.GeNNModel.init_time, pygenn.genn_model.GeNNModel.presynaptic_update_time, pygenn.genn_model.GeNNModel.postsynaptic_update_time, pygenn.genn_model.GeNNModel.synapse_dynamics_time and pygenn.genn_model.GeNNModel.init_sparse_time.
  2. Backends now generate getFreeDeviceMemBytes() function to allow free device memory to be queried from user simulation code. This is also exposed to Python via GeNNModel.free_device_mem_bytes property.
  3. GeNN preferences are now fully exposed to PyGeNN by passing kwargs to pygenn.genn_model.GeNNModel.__init__.
  4. Logging level can now be seperately specified for GeNN, the code generator, the SpineML generator and the backend and is accessible from PyGeNN.
  5. CodeGenerator::PreferencesBase::enableBitmaskOptimisations flag enables an alternative algorithm for updating synaptic matrices implemented with SynapseMatrixConnectivity::BITMASK which performs better on smaller GPUs and CPUs. If you are manually initialising matrices this adds padding to align words to rows of the matrix.
  6. SynapseMatrixConnectivity::PROCEDURAL and SynapseMatrixWeight::PROCEDURAL allow connectivity and synaptic weights to be generated on the fly rather than stored in memory.
  7. CodeGenerator::PreferencesBase::automaticCopy flag allows models to be built without the need for explicitly copying data between host and device. For CUDA backend this uses unified memory (https://devblogs.nvidia.com/unified-memory-cuda-beginners/).
  8. Speed of code compilation can be improved by building using multiple threads. This is now done everywhere where make or MSBuild is invocated automatically.

Bug fixes:

  1. Fixed several bugs in extra global parameter implementation in PyGeNN.
  2. Floating point min and max should be calculated with fmax and fmin in code snippets - fixed in several models and user projects.
  3. Fixed issues with version of numpy required in PyGeNN (previously held back by an issue with PyNN)

GeNN 4.1.0

05 Nov 16:04
37e7a83
Compare
Choose a tag to compare

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.

GeNN 4.0.2

22 Aug 10:22
Compare
Choose a tag to compare

This release fixes several small issues with the generation of binary wheels for Python:

Bug fixes:

  1. There was a conflict between the versions of numpy used to build the wheels and the version required for the PyGeNN packages
  2. Wheels were renamed to include the CUDA version which meant they could not be installed

Note:

All Python wheels are build for CUDA 10 except for on Mac OS which is built for CUDA 9