I will not swear that there is not, but there is no common.
There are a couple of reasons why this is not often:
MPI is often used to send large amounts of floating point data, which are difficult (but not impossible) to compress well and often have relatively high entropy after some time.
In addition, MPI users are often as concerned about latency as bandwidth, and adding a compression / decompression step to the critical message path will not be attractive to these users.
Finally, some operations (for example, reduction teams or scattering assemblies) will be very difficult to efficiently perform compression.
However, you say that your use case can benefit from this for point-to-point communications, so there is no reason why you could not do it yourself. If you are going to send a message of size N, and the recipient expected it:
- the sender calls the compression procedure, receives a buffer and a new length M;
- if M> = N, send the source data with the start byte, for example 0, as N + 1 byte to the receiver
- otherwise sends the start byte of 1 + compressed data
- receives data in buffer N + 1 of length
- if the first byte is 1, calls MPI_Get_count to determine the amount of data received, calls the decompression procedure
- otherwises uses uncompressed data
I cannot give you many recommendations regarding compilation procedures, but it seems like people used to try to do this, for example http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.91.7936 .
source share