使用Nvidia的CUDA的压缩库

Xn0*_*v3r 51 compression cuda gpgpu

有没有人知道一个使用NVIDIA的CUDA库实现标准压缩方法(如Zip,GZip,BZip2,LZMA ......)的项目?

我想知道是否能够利用大量并行任务(如压缩)的算法在显卡上的运行速度要比使用双核或四核CPU快得多.

您如何看待这种方法的优缺点?

小智 48

我们已经完成了第一阶段的研究,以提高无损数据压缩算法的性能.Bzip2被选为原型,我们的团队只优化了一个操作--Burrows-Wheeler转换,我们得到了一些结果:2x-4x加速了良好的可压缩文件.代码在我们所有的测试中运行得更快.

我们将完成bzip2,支持deflate和LZMA来完成一些现实生活中的任务,例如:HTTP流量和备份压缩.

博客链接:http: //www.wave-access.com/public_en/blog/2011/april/22/breakthrough-in-cuda-data-compression.aspx

  • 4年过去了...我(我们都)希望更多关于你的项目.结果是什么?在哪里可以找到来源,如果有的话?等待你的反馈 (4认同)
  • 亚历山大,任何新闻?代码可以在某处使用吗? (4认同)
  • 加上一个用于在发布一年后跟进这个问题。另外你的作品看起来很有趣,谢谢 (2认同)

Die*_*nte 44

不知道有人这样做并公之于众.只是恕我直言,这听起来不是很有希望.

正如Martinus所指出的,一些压缩算法是高度串行的.像LZW这样的块压缩算法可以通过独立编码每个块来并行化.Ziping大型文件树可以在文件级并行化.

然而,这些都不是SIMD风格的并行性(单指令多数据),并且它们不是大规模并行的.

GPU基本上是矢量处理器,您可以在锁定步骤中执行数百或数千个ADD指令,并执行几乎没有数据相关分支的程序.

一般来说,压缩算法更像是SPMD(单程序多数据)或MIMD(多指令多数据)编程模型,它更适合于多核cpu.

视频压缩算法可以通过像CUDA这样的GPGPU处理来加速,只要有大量的像素块被并行地进行余弦变换或卷积(用于运动检测),并且可以表达IDCT或卷积子程序.无分支代码.

GPU也喜欢具有高数值强度(数学运算与内存访问的比率)的算法.数值强度较低的算法(如添加两个向量)可以大规模并行和SIMD,但在gpu上运行速度仍然比cpu慢,因为它们记忆受限了.

  • @bene我没有正确表达。内存绑定算法可以在 gpu 上运行得一样快或更快——大多数 gpu 具有非常高的内存带宽。具有最高有效内存带宽的处理器将更快地执行这些算法。 cpu,它总是会变慢,而且很容易为此构建一个基准。 (3认同)
  • 我对并行化的第一个想法是那些具有“大文件树”的并行化,但是您提到的其他原因已经说服了我,谢谢。 (2认同)

mar*_*nus 7

通常,压缩算法不能使用并行任务,要使算法高度并行化并不容易.在您的示例中,TAR不是压缩算法,并且唯一可以高度并行化的算法是BZIP,因为它是块压缩算法.每个块都可以单独压缩,但这需要大量的内存.当你看到使用多个线程的7zip时,LZMA也不能并行工作,这是因为7zip将数据流拆分为2个不同的流,每个流都在一个单独的线程中用LZMA压缩,因此压缩算法本身并不是平行的.这种拆分仅在数据允许时才有效.