Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve presynaptic updates using square blocks and shared memory #437

Open
tnowotny opened this issue Jul 15, 2021 · 1 comment
Open

Improve presynaptic updates using square blocks and shared memory #437

tnowotny opened this issue Jul 15, 2021 · 1 comment

Comments

@tnowotny
Copy link
Member

As detailed in https://arxiv.org/pdf/2107.04092.pdf one can slice the rows of the connectivity matrix into vertical slices where each slice addresses a defined slice of post-synaptic neurons. Pre-loading these neurons' relevant variables into shared memory and using shared atomics for inSyn updates reduces global memory traffic leading to measurable performance gains.

@neworderofjamie neworderofjamie added this to the GeNN 4.6.0 milestone Jul 15, 2021
@neworderofjamie neworderofjamie changed the title Improve spike delivery for sparse connections using shared memory and shared atomics Improve presynaptic updates using square blocks and shared memory Jul 15, 2021
@neworderofjamie
Copy link
Contributor

neworderofjamie commented Jul 15, 2021

Square blocks might also lets us improve the performance of spike processing in all postsynaptically-parallelised strategies by using threads in y to process multiple spikes in parallel. For sparse matrices these can atomically update inSyn in global/shared memory and for dense matrices they can update registers and then atomic add the partial sums or use warp shuffles to sum and then add.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants