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

标签 compression mpi

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

Compression speed is 250 MB/s and decompression speed is 500 MB/s



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

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

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

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

最佳答案

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

它不常见的原因有两个:

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 .

    关于compression - MPI:是否有能够压缩消息的 MPI 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849983/

    相关文章:

    c - 询问 mpi mpich 中的 MPI_Reduce 和 MPI_Bcast

    mpi - MPI 运行时传播 argc 和 argv 的内容

    java - 字符串和符号的压缩

    java - 从 Java 中的数组列表中删除连续的重复元素(带有派头)

    c# - .NET MPI 实现?

    c++ - 是否可以使用 Catch2 测试 MPI 代码?

    python - 如何判断文件是否经过 gzip 压缩?

    java - 使用 java 对谷歌地球图像进行 kmz 压缩

    c# - 原始文件比 GZip 解压文件大

    c++ - MPI_Comm_Rank的段错误