Updated implementation of lookup tables for exponential computations in homogenous STDP synapses (original commits by @suku248 @jarsi), for now just applied to stdp_pl_synapse_hom. There are a few potential concerns:
Ideally we'd be able to keep ArchivingNode as a common base class and support both (potentially) precise spike times as well as size_t-implemented grid steps, but due to the way history is stored this is impossible without costly conversion on multiple occasions. A dynamic polymorphism approach + conversions was implemented, but did considerably worse in benchmarks (albeit still better than the baseline, see figures below). For a simplified implementation, see: https://github.com/nest/nest-simulator/issues/3307
Since we now require a separate archiving node (could be a static template impl but that also has minor overhead), we also need to duplicate the nodes that support homogenous STDP synapses; we introduced iaf_psc_alpha_hom. A better solution would probably require a restructuring for the way archivers are implemented, e.g. as pointers.
In the figures below, "plain" is an implementation that just replaced existing structures for testing purposes while "separate" is the current version with duplicated classes, they are both listed as a sanity check and performance should be the same. "Converted" uses a templated histentry and conversion approach in archiving node. Std and mean values taken over 3 rng seeds.
Updated implementation of lookup tables for exponential computations in homogenous STDP synapses (original commits by @suku248 @jarsi), for now just applied to
stdp_pl_synapse_hom
. There are a few potential concerns:Ideally we'd be able to keep
ArchivingNode
as a common base class and support both (potentially) precise spike times as well assize_t
-implemented grid steps, but due to the way history is stored this is impossible without costly conversion on multiple occasions. A dynamic polymorphism approach + conversions was implemented, but did considerably worse in benchmarks (albeit still better than the baseline, see figures below). For a simplified implementation, see: https://github.com/nest/nest-simulator/issues/3307Since we now require a separate archiving node (could be a static template impl but that also has minor overhead), we also need to duplicate the nodes that support homogenous STDP synapses; we introduced
iaf_psc_alpha_hom
. A better solution would probably require a restructuring for the way archivers are implemented, e.g. as pointers.In the figures below, "plain" is an implementation that just replaced existing structures for testing purposes while "separate" is the current version with duplicated classes, they are both listed as a sanity check and performance should be the same. "Converted" uses a templated histentry and conversion approach in archiving node. Std and mean values taken over 3 rng seeds.