-
Notifications
You must be signed in to change notification settings - Fork 391
Fix issue: #3532: Disconnect correctly with CompressedSpikes:ON/Off #3536
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
Conversation
|
@med-ayssar Thanks for your detective work and the PR! I will look at it in detail asap. |
heplesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@med-ayssar Thanks for the PR! I am not entirely sure I follow the logic around nth_equal(), see comments below.
I also wonder if, for the uncompressed case, we should not take a different approach. In that case, I believe, we simply need to run through all connections of a given synapse type linearly and disconnect the first one for which source and target match, and which has not yet been disconnected. I guess that means parallel iteration through source and target tables. The split into find_first_source() and find_first_target() does not make sense in that case.
We also need some tests, including tests where there are multiple connections between the same source-target pair and we delete one at a time.
|
@heplesser: Is it possible to setup a meeting to discuss this? Any time after 17:30 should work for me. |
heplesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @med-ayssar! Thanks, this looks very good now. I will shortly send you a small PR which removes a few unused imports and an unused method, and adds/improves doxygen comments. Once that is merged, I will approve.
Remove unused imports/methods and improve doxygen documentation
heplesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@med-ayssar Thanks, all fine now from my side.
|
@cjotade Thank you for your review! e-prop synapses hold a pointer to an optimizer object (could be simple gradient descent or an Adam optimizer). This optimizer needs to be destroyed when the synapse is deleted. The old code contained a bug that would lead to NEST trying to destroy the optimizer twice, and trying to delete an already deleted object leads to a runtime error. The changes make sure that the optimizer is deleted exactly once. And the change is in this PR because I discovered this problem when testing disconnection with all our synpase types, including eprop synapses. |
|
I see, thanks for the clarification! |
Adding test thats check if num_connections is 0 after all_to_all disconnection
heplesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding empty lines to fulfill coding standards.
|
@cjotade With your test now merged, could you re-check and then approve explicitly if you think the PR is ready to be merged? |
cjotade
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Everything correct from my side, I think that the PR is ready to be merged. Thanks!
Fix for #3532
The main issue occurs when CompressedSpikes is disabled — the wrong connection gets deleted. The following image illustrates the problem."
Issues:
With
compressed-spikesoff,std::lower_boundwas being applied onunsortedvector.With
compressed-spikesoff, and regardless of (1), disconnecting a connection was not implemented correctly, because the query on thesnode_idandtnode_iddelivers a wronglcid.While testing, I discovered that disconnecting a connection, it changes the entry in the
sourceTable, and when working with a sortedsourceTable(compressed-spikes=true), we might get anundefined behaviour