Cuda 使用Nvidia'的压缩库;s库达

Cuda 使用Nvidia'的压缩库;s库达,cuda,compression,gpgpu,Cuda,Compression,Gpgpu,有谁知道有一个项目使用NVIDIA实现标准压缩方法(如Zip、GZip、BZip2、LZMA等) 我想知道,能够利用大量并行任务(如压缩)的算法在图形卡上的运行速度是否不会比使用双核或四核CPU快得多 您认为这种方法的优缺点是什么?通常压缩算法不能使用并行任务,要使算法高度并行化并不容易。在您的示例中,TAR不是一种压缩算法,唯一可能具有高度并行性的算法是BZIP,因为它是一种块压缩算法。每个块都可以单独压缩,但这需要大量的内存。LZMA也不能并行工作,当您看到7zip使用多个线程时,这是因为7

有谁知道有一个项目使用NVIDIA实现标准压缩方法(如Zip、GZip、BZip2、LZMA等)

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


您认为这种方法的优缺点是什么?

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

加密算法在这方面已经相当成功,因此您可能需要对此进行研究。这里有一篇与CUDA和AES加密相关的文章:

不知道有人这样做并将其公开。只是我觉得,这听起来不太有希望

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

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

GPU基本上是向量处理器,您可以在锁定步骤中执行数百或数千条ADD指令,并在数据相关分支很少的情况下执行程序

压缩算法通常听起来更像SPMD(单程序多数据)或MIMD(多指令多数据)编程模型,更适合多核CPU

像CUDA这样的GPGPU处理可以加速视频压缩算法,但前提是有大量像素块并行进行余弦变换或卷积(用于运动检测),并且IDCT或卷积子例程可以用无分支代码表示


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

我们正在尝试将bzip2移植到CUDA。:)到目前为止(只做了粗略的测试),我们的Burrows-Wheeler变换比串行算法快30%

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

我们将完成bzip2,支持deflate和LZMA,用于一些实际任务,如:HTTP流量和备份压缩

博客链接:

30%是不错的选择,但对于像备份这样的应用程序来说,这远远不够

我的经验是,在这种情况下,平均数据流使用gzip得到1.2-1.7:1的压缩,最终输出速率限制在30-60Mb/s(这在现代(大约2010-2012年)中高端CPU的范围内)

这里的限制通常是数据输入CPU本身的速度

不幸的是,为了使LTO5磁带机保持良好的性能,它需要大约160Mb/s的原始(不可压缩)数据速率。如果输入可压缩数据,则需要更快的数据速率

LTO压缩显然要快得多,但效率有点低(相当于gzip-1,对于大多数用途来说已经足够好了)。LTO4驱动器和更高版本通常内置AES-256加密引擎,也可以保持这种速度

这对我的情况意味着,我需要一个400%或更好的改进来考虑它的价值。


类似的考虑也适用于局域网。在30Mb/s的速度下,压缩是Gb级网络上的一个障碍,问题是在网络上还是在压缩上花费更多…:)

快速浏览一下,这似乎加快了每个数据块的加密。分组密码需要链接以避免某些类型的攻击,这一点没有帮助。诚然,这篇文章并没有涵盖它,但GPU gems中有一篇文章是一位同事写的,关于使用shafer代码的AES描述,而不是Cuda,它涵盖了链接。不幸的是,这篇文章不在网上。无论如何,链接可以由GPU来处理。我第一次想到并行化的是那些具有“大文件树”的链接,但是你提到的其他原因让我信服了,thx。你能参考一些测量结果吗?这些测量结果表明,内存受限的算法(如添加两个向量)在GPU上运行得比在CPU上慢?@bene我没有正确地表达这一点。内存限制算法可以在gpu上运行得同样快或更快——大多数gpu都有非常高的内存带宽。无论哪个处理器具有最高的有效内存带宽,执行这些算法的速度都会更快。但是,如果您在cpu上获取数据,将其传输到gpu(通常通过PCIE总线),然后进行添加,然后将数据传输回cpu,则执行这些算法的速度总是会慢得多,为这个问题建立一个基准是非常容易的,另外还有一个在发布一年后用来跟进这个问题的基准。加上你的工作看起来很有趣,感谢四年过去了。。。我(我们大家)想更多地了解你的项目。结果如何?我们在哪里可以找到