2年半ぐらい前にちょっと実験したもののその後放置していたハフマンデコードの高速化ですが、最近なんかやる気が出て来たので当時やってなかったアセンブラルーチンを書きました。

で、それっぽい指数分布を処理した結果。いつも通り i7-2600K 定格での1シンボル当たりの所要時間 (ns) です。コンパイラが変わっているので既存のモノも測りなおしています。

出力 C++ asm
1つ 5.31 3.63
最大4つ 1.65 1.11

速い。実際速い。

ところで、複数シンボル同時出力はデコード自体は圧倒的に高速化されるのですが、デコードテーブルの生成がかなり遅くなります。2年半前に実験した時は1シンボル用テーブルの生成が 10us なのに対して複数シンボル用は 295us もかかっていて結構つらかったのですが、今さっきやってみたらコードを修正していないのに 27us で生成できてしました。コンパイラが新しくなって最適化が強くなったんでしょうか…?まあ結構なことですが。

Trackback

no comment untill now

Add your comment now