MPI: are there any mpi libraries capable of compressing messages?

Sometimes MPI is used to send low entropy data in messages. Therefore, it may be useful to try to compress messages before sending. I know that MPI can work in very fast networks (10 Gbit / s and more), but many MPI programs are used with a cheap network such as Ethernet 0.1 Gbit / s or 1 Gbit / s, and with cheap (slow, low-pole) network switch. There is a very fast Snappy (wikipedia) compression algorithm that has

The compression speed is 250 MB / s and the decompression speed is 500 MB / s

therefore, on compressed data and a slow network, this will give some acceleration.

Is there any MPI library that can compress MPI messages (at the MPI level, rather than compressing IP packets like PPP).

MPI messages are also structured, so there may be some special method, for example, compression of the exponential part in a double array.

PS: There is also a LZ4 compression method with comparable speed

+6
source share
3 answers

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 .

+7
source

I’m happy to talk about this, but I don’t think that many of us MPI users have a transport layer that compresses data.

Why the hell not?

1) We are already developing our programs to communicate as little as possible, so we (as we think) send the minimum minimum through the interconnect.

2) Most of our larger messages contain arrays of floating point numbers, which are relatively difficult (and therefore relatively expensive over time) to compress to any degree.

+4
source

The project is ongoing at the University of Edinburgh: http://link.springer.com/chapter/10.1007%2F978-3-642-32820-6_72?LI=true

+2
source

Source: https://habr.com/ru/post/917179/


All Articles