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

Compression MPI:是否有能够进行消息压缩的MPI库?,compression,mpi,Compression,Mpi,有时MPI用于发送消息中的低熵数据。因此,在发送消息之前尝试压缩消息可能会很有用。我知道MPI可以在非常快的网络(10 Gbit/s及以上)上工作,但许多MPI程序用于廉价的网络,如0,1G或1Gbit/s以太网,以及廉价的(慢速、低二分)网络交换机。有一种非常快速的压缩算法,它 压缩速度为250 MB/s,解压缩速度为500 MB/s 因此,对于可压缩数据和较慢的网络,它将提供一些加速 是否有任何MPI库可以压缩MPI消息(在MPI层;而不是像PPP那样压缩ip数据包) MPI消息也是结构化的

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

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

因此,对于可压缩数据和较慢的网络,它将提供一些加速

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

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


PS:还有一种速度相当的方法

我很高兴听到其他的说法,但我认为我们许多MPI用户并不关心有一个压缩数据的传输层

为什么不呢

1) 我们已经将程序设计为尽可能少的通信,所以我们(喜欢认为我们)正在通过互连发送最小值


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

这不常见的原因有两个:

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

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

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

然而,听起来您的用例可以从点对点通信中受益,所以您没有理由不能自己完成。如果您要发送大小为N的消息,而接收者期望这样做,则:

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

<>我不能给你很多关于压缩例程的指导,但是它看起来像人们以前尝试过的,例如,

< P>爱丁堡大学有一个正在进行的项目:

有一些关于NAS并行的评价:压缩只能限制在比某个极限更长的消息中;因此,短消息的延迟将是相同的;长消息的延迟将更少(在慢速网络和可压缩数据上)。这是一个比我的更好的答案。唉。看起来这两份报纸是由同两个人写的(每一份都有不同的第三份)。这是有趣的东西,但结果中有一些奇怪的东西。例如,sPPM在其系统上没有扩展到>64个处理器?这表明他们的以太网严重过载,sPPM是最近的邻居,应该可以很好地扩展。我也希望他们有一个延迟主导的代码,比如粒子代码,或者一个集体主导的代码(比如优化问题)来添加到混合中。还有一些有趣的东西。与平台无关的库(如OpenMPI或MPICH(2))中的集合通常使用p2p通信例程在内部实现(因此可以使用正常的
MPI.*
调用重新实现)。但是压缩会把那些试图最小化小消息延迟开销的聪明的分层算法弄得一团糟。这个答案更简洁,不需要压缩。第一点特别好;我们的期望是我们已经发送了最低限度的数据。出于这个原因,我本以为对于标准类型的应用程序来说,没有真正的机会通过压缩来改进事情,但是@osgx列出的论文非常有趣。我希望能够压缩网络延迟…:)@Hristo:您尝试过使用更短的电缆吗?我想我们的电缆已经尽可能短了。我将添加文章标题“一种用于加速基于MPI的应用程序的自适应、可扩展和便携式技术”,该文章发表在“2012年欧洲平行处理课堂讲稿,计算机科学卷7484,2012年,第729-740页”,内政部10.1007/978-3-642-32820-6_72。他们的项目名为PRAcTICaL MPI,这里有一个关于它的页面:还有一个由同一作者编写的较老的项目:CoMPI,例如:here:或here: