MPI:是否有能够进行消息压缩的mpi库?

osg*_*sgx 7 compression mpi

有时MPI用于在消息中发送低熵数据.因此,在发送消息之前尝试压缩消息会很有用.我知道MPI可以在非常快的网络(10 Gbit/s甚至更高)上工作,但是许多MPI程序与廉价网络(如0,1G或1Gbit/s以太网)和廉价(慢速,低二分)网络交换机一起使用.有一个非常快速的Snappy(维基百科)压缩算法,它具有

压缩速度为250 MB/s,解压缩速度为500 MB/s

所以在可压缩数据和慢速网络上它会提供一些加速.

是否有任何MPI库可以压缩MPI消息(在MPI层;而不是像PPP中那样压缩ip数据包).

MPI消息也是结构化的,因此可以有一些特殊的方法,比如在double数组中压缩指数部分.

PS:还有LZ4压缩方法,速度可比

Jon*_*rsi 8

我不会发誓那里没有,但没有一个共同使用.

有几个原因是为什么它不常见:

MPI通常用于发送大量浮点数据,这些数据难以(但不是不可能)压缩得很好,并且经常在一段时间后具有相对较高的熵.

此外,MPI用户通常将延迟视为带宽,并且在消息传递关键路径中添加压缩/解压缩步骤对这些用户不具吸引力.

最后,一些操作(如简化集合或分散聚集)很难通过压缩有效地实现.

但是,听起来您的用例可以从中受益于点对点通信,因此没有理由不能自己做.如果你打算发送一个大小为N的消息而接收者预期它:

  • 发送方调用压缩例程,接收缓冲区和新长度M;
  • 如果M> = N,则将原始数据(带有0的初始字节)作为N + 1个字节发送给接收器
  • 否则发送1 +压缩数据的初始字节
  • 接收器将数据接收到长度为N + 1的缓冲区
  • 如果第一个字节为1,则调用MPI_Get_count来确定接收的数据量,调用解压缩例程
  • otherwises使用未压缩的数据

我不能给你关于压缩程序的很多指导,但看起来人们之前已经尝试过,例如http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.91.7936.

  • 只能将压缩限制为长度超过一定限制的消息。因此,短消息的等待时间将是相同的;长消息的延迟将减少(在慢速网络和可压缩数据上)。 (2认同)