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

我想知道可以利用大量并行任务(例如压缩)的算法在显卡上的运行速度是否不会比双核或四核 CPU 快得多。

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

有帮助吗?

解决方案

不知道的人已经这样做了,并使其公开。只是恕我直言,它不健全的前景十分看好。

正如马丁努斯所指出的,一些压缩算法是高度序列。块的压缩算法等LZW可以通过独立地编码每个块进行并行化。资平文件的大树可以在文件级进行并行化。

不过,这些都不是真正的SIMD式并行(单指令多数据),而他们不是大规模并行。

GPU的基本向量处理器,在那里你可以做的加法指令,数百或数千所有步调一致,并执行其中很少有数据相关的分支程序。

在一般的声音压缩算法更象一个SPMD(单程序多数据)或MIMD(多指令多数据)编程模型,其更适合于多核CPU。

视频压缩算法可以通过GPGPU处理等CUDA被加速而只有一个非常大的数量的正在余弦变换或并联卷积(用于运动检测)像素块的程度,和IDCT或卷积子程序可以用网点代码来表示。

的GPU中也是这样的具有高的数字强度算法(数学运算,以存储器存取的比例。)与低数字强度(如添加两个向量)算法可以大规模并行和SIMD,但仍然在GPU比运行较慢的CPU因为它们受存储器限制。

其他提示

的研究

我们已经完成了第一阶段,以增加的无损数据压缩算法的性能。 bzip2的选择为原型,我们的团队优化只需一人操作 - 伯罗斯 - 惠勒改造,我们得到了一些成果:2X-4X良好的压缩文件加快。代码工作在我们所有的测试速度更快。

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

博客链接: HTTP:// WWW .wave-access.com / public_en /博客/ 2011 /月/ 22 /突破合CUDA的数据compression.aspx

典型地压缩算法不能利用的并行任务,这是不容易使算法高度parallelizeable。在你的例子,TAR是不是压缩算法,这可能是高度parallelizeable唯一的算法是BZIP,因为它是块压缩算法。每个块可以单独被压缩,但是这需要很多很多的记忆。 LZMA不平行工作,要么,当使用多线程,这是因为7zip的拆分数据流分成各自与LZMA在单独的线程压缩2个不同的流看到7zip的,所以压缩算法本身不paralllel。此分割仅当数据允许其工作原理。

加密算法在这一领域非常成功,因此您可能想研究一下。这是一篇与CUDA和AES加密相关的论文:http://www.manavski.com/downloads/PID505889.pdf

我们正在做的移植到bzip2的CUDA的尝试。 :)到目前为止(且仅做粗略的测试),我们的Burrows-Wheeler变换比串行算法快30%。 http://bzip2.github.com

30%是好的,但对于像备份应用中,由一个长镜头是不够的。

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

这里的限制,通常是指数据可被馈送到CPU本身的速度。

不幸的是,为了保持一个LTO5磁带驱动器高兴,它需要一个原始(uncompressable)数据的160MB左右/ s的速率。如果馈送可压缩数据它需要甚至更快的数据速率。

LTO压缩显然快了很多,但有些低效(相当于gzip压缩-1 - 这是大多数来说已经足够好)。 LTO4驱动器和向上通常具有内置的AES-256加密引擎,其也可以保持这些种速度。

这意味着什么,我的情况是,我需要一个400%或更高的impreovement以认为值得。

类似的考虑适用在LAN。在30MB /秒,压缩是在千兆级网络一个阻,问题是是否花费更多的关于联网或压缩...:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top