10月
07
AVX2、具体的には VPGATHERDD と VPSLLVQ が実装されたので、それを使ってハフマンデコードを4つ並列に行うコードを書いていました。
で、計測した結果…
C:\Users\umezawa\Documents\huff4>huff4 _exp.dat * NORMAL Huffman Decode x4 decode 771.877848msec 2.875469nsec/symbol ok * AVX2 Parallel Huffman Decode decode 1021.410574msec 3.805051nsec/symbol ok
ダメじゃん(´・ω・`)
やっぱり VGATHER が「期待したほどには」速くないのが最大の要因かと思うのですが、SIMD化に伴う処理方法の変化(原則的に条件分岐を使わなくなる)も大きいかもしれません。Skylake あたりで VGATHER が高速化され、ついでに AVX-512 が投入されてようやくスカラー処理より早くなるんじゃないかという気がします。また2年待ちか…
あとこのコードは x64 用に書いています。定数を保持するために16本あるレジスタのうちの8本を使っているので、x86 だと目に見えて遅くなりそうです。
AVX2 による並列ハフマンデコード(その2)
ちょっと高速化した。 Haswell では、レジスタ幅が同じなら VGATHERDD より VGATHERQQ の方が常に速いので、置き換えられるところは置き換える。 符号列の読み込みが一切不要な場合は条件分岐…
ハフマンデコードにおける単一ストリーム複数シンボル同時出力
以前、AVX2 を利用してハフマンデコードにおける複数ストリーム同時デコードを試したことがありますが、今度は単一のストリームで複数シンボルを同時にデコードする話です。 ハフマン…
AVX512 による並列ハフマン符号処理
以前、AVX2 による並列ハフマンデコードを試したことがあって、その時には利点が無いという結論になっていました。 AVX2 ではハフマン符号処理をベクトル化するにはいくつかのベクトル…