CPU 自适应压缩

CPU 自适应压缩

假设我需要通过一个相当快的网络将一些数据从一台计算机发送到另一台计算机……例如标准的 100Mbit 连接(~10MB/s)。我的磁盘驱动器是标准 HDD,因此它们的速度介于 30MB/s 和 100MB/s 之间。所以我猜即时压缩数据可能会有所帮助。

但是...我不想受到 CPU 的限制。如果我选​​择一种对 CPU 要求较高的算法,传输速度实际上会比没有压缩时更慢。

对于 GZIP 和 BZIP2 之类的压缩器来说,这很困难,因为您通常会为整个传输设置一次压缩强度,而我的数据流有时很容易压缩,有时很难压缩 - 这使得过程不太理想,因为有时我没有使用完整的 CPU,有时带宽未得到充分利用。

是否有一个压缩程序可以适应当前的 CPU/带宽并达到最佳状态,从而使传输达到最佳状态?理想情况下适用于 Linux,但我仍然对所有解决方案都很好奇。我希望看到与 GZIP/BZIP2 解压缩程序兼容的东西,但这不是必需的。

因此我想优化总传输时间,而不仅仅是优化要发送的字节数。

另外,我不需要实时解压……实时压缩就足够了。目标主机可以在空闲时间稍后处理数据。我知道这不会有太大变化(压缩通常比解压更耗费 CPU),但如果有一个解决方案可以利用这个事实,那就更好了。

每次我传输的数据都不一样,我真心希望这些一次性传输尽可能快。因此,我不会因为更强的压缩而更快地进行多次传输。

谢谢,

答案1

这是当前的研究课题 - 主要在传感器网络领域,其目标是最小化功耗,而不是最大化吞吐量。然而,自适应压缩的原理是相同的。

这里这是一篇来自南加州大学教授

也许你可以尝试实现他的算法?我相信会有很多人对好的实现感兴趣。

答案2

嗯,这个问题已经存在一年多了,所以可能会被忽视:

无论如何,谷歌最近发布了Snappy这可能正是您正在寻找的,即:

[...] 它不追求最大程度的压缩,也不追求与任何其他压缩库的兼容性;相反,它追求极高的速度和合理的压缩。例如,与 zlib 的最快模式相比,Snappy 对大多数输入的速度要快一个数量级,但生成的压缩文件却要大 20% 到 100% [...]

它是用 C++ 实现的,并且可以与 C 和一系列其他语言绑定。

相关内容