genn-team/genn

Problems with revInSyn and merged synapse init groups

tnowotny opened this issue · 0 comments

The m_FusedPreOutputSuffix for revInsyn was not initialised upon synapse group creation. Therefore, in runner.cc (and throughout) we get

float* revInSyn;
float* d_revInSyn;

instead of

float* revInSyn_NAME;
float* d_revInSyn_NAME;

where NAME is the name of the synapse population (or fused name).

After fixing this (branch fix_revInSyn) a new issue occurred where synapse groups were combined in a MergedSynapseDenseInitGroup where some of the synapses have revInSyn and others do not. This then leads to the creation of e.g.

pushMergedSynapseDenseInitGroup0ToDevice(2, d_revInSynin_to_hid, d_win_to_hid, d_dwin_to_hid, 256, 700, 256, 2.00000000000000004e-02f, 1.00000000000000002e-02f);

for a synapse population in_to_hid that does not have revInsyn and hence d_revInSynin_to_hid does not exist.
I suspect there must be some test for mergeability of initGroups where the existence of revInSyn is not considered but should be. Unfortunately, I struggle a little to dig this deep.