Releases: genn-team/genn
GeNN 4.4.0
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
- Improved documentation covering PyGeNN now available from https://genn-team.github.io/genn/
- New system for efficiently recording spikes from multiple timesteps into GPU memory (#372).
- Connectivity can now be initialised using column-wise as well as row-wise sparse connectivity initialisation snippets (#374).
- Support for 'kernel-based' connectivity, allowing efficient support for connectivity such as convolutions (#373).
- 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). - Added support for accessing spike-like-event times from weight update models via
$(seT_pre)
and$(prev_seT_pre)
variables (#380) - Added support for continuous as well as spike-driven dynamics for pre and postsynaptic weight update model variables (#377).
- Added experimental OpenCL backend - there are still issues outstanding but any feedback would be much appreciated (#340).
- Improved supression of irrelevant NVCC warnings when optimizing block sizes (#361).
- Added support for SM 8.0 and 8.6 architectures to CUDA backend (#361).
- 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:
GeNN 4.3.3
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:
- Fixed bug in bitmask connectivity and procedural connectivity kernels.
- Fixed issues with setting model precision in PyGeNN. Time precision can now be set seperately using the
time_precision
option to thepygenn.genn_model.GeNNModel
constructor.
GeNN 4.3.2
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:
- Fixed bug when simulating models with very small timesteps.
- Fixed bug in code generator where synapse groups with procedural variables could be incorrectly merged.
- Fixed bug in code generator where references to parameters in sparse connectivity initialisation snippet row build state variables were not found.
- Fixed issue with PyGeNN and custom sparse connectivity init snippets that led to segfaults.
- Fixed bug that prevented PyGeNN being used with procedural connectivity.
- 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
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:
- Fixed reference-counting bugs in PyGeNN that prevented multiple models from being instantiated.
- Fixed PyGeNN interface for downloading connectivity from GPU.
- Fixed host initialisation of sparse connectivity initialisation snippet extra global parameters using the CPU backend.
- Upgraded third-party logging library to fix issues compiling SpineML generator with Visual Studio 2019.
- 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
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
- Previously GeNN performed poorly with large numbers of populations. This version includes a new code generator which effectively solves this problem (see paper).
InitSparseConnectivitySnippet::Base
row build state andNeuronModels::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.- 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.
- 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 likegenn_groups.NeuronGroup.push_current_spikes_to_device
which is somewhat nicer. - The
CodeGenerator::generateAll
function now returns memory estimates which are, in turn, returned fromgenn_model.GeNNModel.build
. - 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. - Added extra global parameters to variable initialisation snippets - can be used for lookup table style functionality.
- 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:
- Fixed issues preventing spike recorder classes from compiling with GCC 4.9, thanks to Christoph Ostrau for this one!
- 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.
- Fixed issue with PyGeNN and custom var init snippets that led to segfaults.
GeNN 4.2.1
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
- 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:
- 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. - Fixed a corner case where valid models might result in compiler errors about
Isyn
not being defined. - Fixed a bug preventing multiple include paths being passed to genn-buildmodel.bat on Windows.
GeNN 4.2.0
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
- Kernel timings can now be enabled from python with
pygenn.genn_model.GeNNModel.timing_enabled
and subsequently accessed withpygenn.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
andpygenn.genn_model.GeNNModel.init_sparse_time
. - Backends now generate
getFreeDeviceMemBytes()
function to allow free device memory to be queried from user simulation code. This is also exposed to Python viaGeNNModel.free_device_mem_bytes
property. - GeNN preferences are now fully exposed to PyGeNN by passing kwargs to
pygenn.genn_model.GeNNModel.__init__
. - Logging level can now be seperately specified for GeNN, the code generator, the SpineML generator and the backend and is accessible from PyGeNN.
CodeGenerator::PreferencesBase::enableBitmaskOptimisations
flag enables an alternative algorithm for updating synaptic matrices implemented withSynapseMatrixConnectivity::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.SynapseMatrixConnectivity::PROCEDURAL
andSynapseMatrixWeight::PROCEDURAL
allow connectivity and synaptic weights to be generated on the fly rather than stored in memory.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/).- 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:
- Fixed several bugs in extra global parameter implementation in PyGeNN.
- Floating point min and max should be calculated with
fmax
andfmin
in code snippets - fixed in several models and user projects. - Fixed issues with version of numpy required in PyGeNN (previously held back by an issue with PyNN)
GeNN 4.1.0
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
- 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. - When declaring a model's variables using
SET_VAR
, they can be marked as read-only by adding a 3rd parameter set toVarAccess::READ_ONLY
to enable further optimisations. - 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. - 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
andgenn-create-userproject.bat
now have a "-u" option which puts this in the include path of the generated project. - Timing information generated when
ModelSpec::setTiming
is enabled was not accesible to SpineML models. This is now exposed through theSpineMLSimulator::Simulator
class. - 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.
- SpineML interface will now use heterogeneous dendritic delay system introduced in GeNN 3.2.0 if required.
- Add
CodeGenerator::CUDA::Preferences::generateLineInfo
option to output CUDA line info for profiling. - 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 toVarLocation::DEVICE
. - If
ModelSpec::setDefaultNarrowSparseIndEnabled
is set on a model orSynapseGroup::setNarrowSparseIndEnabled
is set on an individual synapse population with sparse connectivity, 16-bit numbers will be used for postsynaptic indices, almost halving memory requirements. - Manual selection of CUDA devices is now exposed to PyGeNN via the
pygenn.genn_model.GeNNModel.selected_gpu
property.
Bug fixes:
- Fixed incomaptibilies with GCC 4.9
- Fixed bug that occured if derived parameters were used in spike-like-event threshold conditions.
- Fixed bug that occured when merging of postsynaptic models is enabled and GeNN decides to employ specific CUDA optimizations.
- Increase maximum supported CUDA kernel grid size - a bug was limiting this to 65536.
- Fixed bugs in timing system when used with synapse dynamics kernels.
GeNN 4.0.2
This release fixes several small issues with the generation of binary wheels for Python:
Bug fixes:
- There was a conflict between the versions of numpy used to build the wheels and the version required for the PyGeNN packages
- 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
GeNN 4.0.1
This release fixes several small bugs found in GeNN 4.0.0 and implements some small features:
User Side Changes
- Improved detection and handling of errors when specifying model parameters and values in PyGeNN.
- SpineML simulator is now implemented as a library which can be used directly from user applications as well as from command line tool.
Bug fixes:
- Fixed typo in
GeNNModel.push_var_to_device
function in PyGeNN. - Fixed broken support for Visual C++ 2013.
- Fixed zero-copy mode.
- Fixed typo in tutorial 2.