IBConnection stores a single remoteUpdateDstAddr_ for IB no-atomic. When multiple semaphores are built on one IBConnection (e.g., src/core/executor/executor.cc), each semaphore constructor calls setRemoteUpdateDstAddr to update the single remoteUpdateDstAddr_. Therefore, only the last semaphore’s GPU address remains in remoteUpdateDstAddr_; earlier semaphores on the same connection no longer receive inbound updates at the correct location.
I would suggest either refactoring IB no-atomic delivery so the destination is not stored once per connection (stateless or per-completion semantics), or formally forbidding multiple semaphores on one connection for IB no-atomic. Let me know which you prefer so that I can raise a PR to fix.
IBConnectionstores a singleremoteUpdateDstAddr_for IB no-atomic. When multiple semaphores are built on oneIBConnection(e.g.,src/core/executor/executor.cc), each semaphore constructor callssetRemoteUpdateDstAddrto update the singleremoteUpdateDstAddr_. Therefore, only the last semaphore’s GPU address remains inremoteUpdateDstAddr_; earlier semaphores on the same connection no longer receive inbound updates at the correct location.I would suggest either refactoring IB no-atomic delivery so the destination is not stored once per connection (stateless or per-completion semantics), or formally forbidding multiple semaphores on one connection for IB no-atomic. Let me know which you prefer so that I can raise a PR to fix.