我读到霍夫曼编码不适用于 GPU,但本文声称并非如此

Posted

技术标签:

【中文标题】我读到霍夫曼编码不适用于 GPU,但本文声称并非如此【英文标题】:I read that Huffman coding does not work on GPU but this paper claims otherwise 【发布时间】:2012-02-26 21:14:27 【问题描述】:

我在几个地方读到过,在 GPU 中构建霍夫曼编码器效率不高,因为算法是顺序的。但是这篇论文提供了一种可能的实现,并声称它比 CPU http://tesla.rcub.bg.ac.rs/~taucet/docs/papers/PAVLE-AnaBalevic09.pdf 更快。

如论文结果有误请指教

【问题讨论】:

【参考方案1】:

这看起来是一种有趣的方法,但我只提供一个警告:关于基线 CPU 实现的信息非常少,但它很可能是单线程的,可能没有特别优化。人们希望使优化的实现看起来尽可能好是人类的天性,因此他们倾向于使用平庸的基线基准来提供令人印象深刻的加速比。就我们所知,在 CPU 上进行适当优化的多线程实现可能与 GPGPU 性能相匹配,在这种情况下,GPGPU 实现就不会那么令人印象深刻了。在为 GPGPU 实现投入大量精力之前,我想首先用尽 CPU 上的所有优化可能性(甚至可能使用论文中描述的并行算法,可能利用 SIMD、线程等),因为 CPU 实现与绑定到特定 GPU 架构的解决方案相比,满足您的性能要求将更加便携和有用。

【讨论】:

“特定的 GPU 架构”是什么意思 @Programmer:好吧,如果您为当前一代的 nVidia 卡开发 CUDA 解决方案,它将无法与其他(非 nVidia)GPU 卡一起使用,并且对于下一代 nVidia 卡可能不是最佳选择。如果这只是一个生命周期短和/或分发受限或几乎不需要可移植性的软件,这可能无关紧要,但在一般情况下,如果它是一个实际产品,它可能会受到严重限制和高维护。 我在 GPU 上运行算法的第一阶段怎么样。这就是我们为这些术语建立频率表的阶段。我可以使用 cudpp hashtable 来收集计数。实际的算法可以在 CPU 上运行 为什么您甚至想要/需要在 GPU 上执行此操作?是为了学生项目还是什么?如果是针对现实世界的应用程序,那么您真的应该首先探索所有 CPU 优化可能性,并确定您是否真的需要查看 GPGPU 解决方案。 Metal for ios 上的 GPU 实现可以在这个 SO 问题中找到链接:***.com/q/3013391/763355【参考方案2】:

你是对的 - 霍夫曼算法是顺序的,尽管它不是高速编码的瓶颈。请查看GTC 2012 上的以下会话。这是真正的解决方案,而不仅仅是一个例子。

您可以在此处找到一些关于 Huffman 编码和解码的 CPU 和 GPU 基准测试。 GPU 上的 Huffman 编码比 CPU 上快得多。仅当 JPEG 图像中没有重新启动标记的情况下,GPU 上的 JPEG 解码可能比 CPU 慢得多。

如果您需要 Huffman 而不是 JPEG,那么应该使用两遍算法。第一遍可以收集统计数据并在第二遍进行编码。两个通道可以并行完成,因此最好使用 GPU 而不是 CPU。

有很多论文说 GPU 不适合 Huffman。这只是意味着有很多尝试来解决这个问题。解决方案的想法很简单:对小块数据进行霍夫曼编码,并尝试并行处理这些块。

【讨论】:

以上是关于我读到霍夫曼编码不适用于 GPU,但本文声称并非如此的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow - 多 GPU 不适用于模型(输入),也不适用于计算梯度

使用 Internet Explorer 10 及更低版本保存 Base64 编码的 PDF

变革计算领域的9个伟大算法:霍夫曼编码快速排序...

哈夫曼编码译码器 java

WPF 应用程序正在使用大量 GPU 功能

tensorflow-gpu 不适用于 Blas GEMM 启动失败