MPI:是否有能够压缩消息的 MPI 库



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

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

因此,在可压缩数据和慢速网络上,它将提供一些加速。

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

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

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

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

有几个原因可以解释为什么它不常见:

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.

我很乐意被告知其他情况,但我认为我们MPI的许多人并不关心压缩数据的传输层。

为什么不呢?

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

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

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

最新更新