Skip to content

Conversation

@med-ayssar
Copy link
Contributor

@med-ayssar med-ayssar commented Jul 20, 2025

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-spikes off, std::lower_bound was being applied on unsorted vector.

  • With compressed-spikes off, and regardless of (1), disconnecting a connection was not implemented correctly, because the query on the snode_id and tnode_id delivers a wrong lcid.

  • While testing, I discovered that disconnecting a connection, it changes the entry in the sourceTable, and when working with a sorted sourceTable (compressed-spikes=true), we might get an undefined behaviour

connections

@med-ayssar med-ayssar changed the title Fix issue: #3532: Disconnect given compressedSpikes Fix issue: #3532: Disconnect issue with CompressedSpikes:ON/Off Jul 20, 2025
@gtrensch gtrensch added T: Bug Wrong statements in the code or documentation S: Normal Handle this with default priority labels Jul 25, 2025
@gtrensch gtrensch added this to Kernel Jul 25, 2025
@github-project-automation github-project-automation bot moved this to In progress in Kernel Jul 25, 2025
@heplesser heplesser added S: High Should be handled next I: No breaking change Previously written code will work as before, no one should note anything changing (aside the fix) and removed S: Normal Handle this with default priority labels Aug 7, 2025
@heplesser
Copy link
Contributor

@med-ayssar Thanks for your detective work and the PR! I will look at it in detail asap.

Copy link
Contributor

@heplesser heplesser left a 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.

@github-project-automation github-project-automation bot moved this from In progress to PRs pending approval in Kernel Aug 8, 2025
@med-ayssar
Copy link
Contributor Author

@heplesser: Is it possible to setup a meeting to discuss this? Any time after 17:30 should work for me.

@med-ayssar
Copy link
Contributor Author

med-ayssar commented Sep 26, 2025

Fair enough, but remember, the source table is not always sorted ( compressed spikes are off ). Otherwise the PR is ready for reviewing.

@cjotade cjotade self-assigned this Oct 6, 2025
@heplesser heplesser requested a review from cjotade October 7, 2025 19:52
@terhorstd terhorstd requested a review from heplesser November 17, 2025 10:53
@heplesser
Copy link
Contributor

@med-ayssar Have you had time to look at the open comments?

@heplesser heplesser linked an issue Nov 25, 2025 that may be closed by this pull request
Copy link
Contributor

@heplesser heplesser left a 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.

@heplesser heplesser removed the request for review from JanVogelsang November 25, 2025 13:39
Remove unused imports/methods and improve doxygen documentation
Copy link
Contributor

@heplesser heplesser left a 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.

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

Labels

I: No breaking change Previously written code will work as before, no one should note anything changing (aside the fix) S: High Should be handled next T: Bug Wrong statements in the code or documentation

Projects

Status: PRs pending approval

Development

Successfully merging this pull request may close these issues.

disconnect() does not work reliably without compressed spikes

6 participants