Skip to content
  • Mark OLESEN's avatar
    ENH: improve handling of multi-pass send/recv (#3152) · d9c73ae4
    Mark OLESEN authored
    - the maxCommsSize variable is used to 'chunk' large data transfers
      (eg, with PstreamBuffers) into a multi-pass send/recv sequence.
    
      The send/recv windows for chunk-wise transfers:
    
          iter    data window
          ----    -----------
          0       [0, 1*chunk]
          1       [1*chunk, 2*chunk]
          2       [2*chunk, 3*chunk]
          ...
    
      Since we mostly send/recv in bytes, the current internal limit
      for MPI counts (INT_MAX) can be hit rather quickly.
    
      The chunking limit should thus also be INT_MAX, but since it is
      rather tedious to specify such large numbers, can instead use
    
          maxCommsSize = -1
    
      to specify (INT_MAX-1) as the limit.
      The default value of maxCommsSize = 0 (ie, no chunking).
    
    Note
    ~~~~
      In previous versions, the number of chunks was determined by the
      sender sizes. This required an additional MPI_Allreduce to establish
      an overall consistent number of chunks to walk. This additional
      overhead each time meant that maxCommsSize was rarely actually
      enabled.
    
      We can, however, instead rely on the send/recv buffers having been
      consistently sized and simply walk through the local send/recvs until
      no further chunks need to be exchanged. As an additional enhancement,
      the message tags are connected to chunking iteration, which allows
      the setup of all send/recvs without an intermediate Allwait.
    
    ENH: extend UPstream::probeMessage to use int64 instead of int for sizes
    d9c73ae4