GeNN 4.1.0
neworderofjamie
released this
05 Nov 16:04
·
4240 commits
to master
since this release
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.