Skip to content
  • Mark OLESEN's avatar
    ENH: improve send/recv robustness in the presence of processorCyclic (#2814) · 3dee3438
    Mark OLESEN authored and Andrew Heather's avatar Andrew Heather committed
    - the changes introduced in f215ad15 aim to reduce unnecessary
      point-to-point communication. However, if there are also
      processorCyclic boundaries involved, there are multiple connections
      between any two processors, so simply skipping empty sends will cause
      synchronization problems.
    
      Eg,
    
        On the send side:
            patch0to1_a is zero (doesn't send) and patch0to1_b does send
            (to the same processor).
    
        On the receive side:
            patch1to0_a receives the data intended for patch1to0_b !
    
      Remedy
      ======
         Simply stream all of send data into PstreamBuffers
         (regardless if empty or non-empty) but track the sends
         as a bit operation: empty (0) or non-empty (1)
    
         Reset the buffer slots that were only sent empty data.
         This adds an additional local overhead but avoids communication
         as much as possible.
    3dee3438