我读到霍夫曼编码在GPU上不起作用,但本文另有说法

时间:2012-02-04 16:35:45

标签: cuda parallel-processing gpu nvidia

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

如果论文结果不正确,请提供建议

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

你可以找到有关Huffman编码和解码的CPU和GPU的一些基准测试。 GPU上的霍夫曼编码比CPU快得多。只有在JPEG图像中没有重启标记的情况下,GPU上的JPEG解码与CPU相比可能要慢得多。

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

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