7

有时 MPI 用于在消息中发送低熵数据。因此,在发送消息之前尝试压缩消息会很有用。我知道 MPI 可以在非常快的网络(10 Gbit/s 或更高)上运行,但许多 MPI 程序用于廉价网络,如 0.1G 或 1Gbit/s 以太网和廉价(慢速、低二分)网络交换机。有一个非常快速的Snappy (wikipedia)压缩算法,它有

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

等等可压缩数据和慢速网络,它会提供一些加速。

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

MPI 消息也是结构化的,因此可以有一些特殊的方法,例如压缩双精度数组中的指数部分。

PS:还有速度相当的LZ4压缩方式

4

3 回答 3

8

我不会发誓那里没有,但没有常用的。

不常见的原因有两个:

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

此外,MPI 用户通常关心延迟和带宽一样,在消息传递关键路径中添加压缩/解压缩步骤对这些用户没有吸引力。

最后,一些操作(如归约集合或分散聚集)将很难通过压缩有效实现。

但是,听起来您的用例可以从点对点通信中受益,因此您没有理由不能自己做。如果您要发送大小为 N 的消息并且接收者期望它,那么:

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

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

于 2012-06-01T12:38:36.797 回答
4

我很高兴被告知其他情况,但我认为我们许多 MPI 用户并不关心拥有压缩数据的传输层。

为什么不呢?

1)我们已经设计了我们的程序以尽可能少地进行通信,因此我们(认为我们)正在通过互连发送最低限度的信息。

2)我们较大的消息的大部分包含浮点数数组,这些浮点数相对难以压缩(因此在时间上相对昂贵)到任何程度。

于 2012-06-01T12:28:39.787 回答
2

爱丁堡大学有一个正在进行的项目:http: //link.springer.com/chapter/10.1007%2F978-3-642-32820-6_72 ?LI=true

于 2013-04-01T11:29:47.067 回答