Chiharu の日記

絵描き C/C++ プログラマーの日記です。

Parallel force - パラレル・フォース 〜SIMD まだまだ

公開中のデモについて、AtomCore i7 では SSE2 適用でとても高速化するのですが、Core 2 であまり速くならず、何故だろうとインテル最適化マニュアルを紐解いてみると、あらなんと。Core 2 では XMM レジスタを使用した演算が、それ以前のアーキテクチャよりも高速化されているものの、パック、アンパック、シャッフル、シフトはその対象外だったのですね。BGR イメージの描画処理では、アンパックとシフトを使いまくりですので、なかなか速度が上がらなかったと。
んー。ためしに SSSE3 の _mm_shuffle_epi8 を使ってみました。4 画素あたり 3 回分のシフトとアンパックが、1 回のシャッフルに置き換わりました。
―――すると、なんということでしょう。(サザエさんの声で)
Core 2 で、あれだけ高速化の効果が薄かった SSE2 版に比べて、SSSE3 版ではさらに数割のスピードアップが確認されました。Core i7 においても、高速化が確認され。216fps になりました。すごいなー SSSE3。て、逆か。しょぼいな SSE2
デモについては、もう少しグラフィックス系に手を加えて、また新しいものを近々公開したいと思います。
(追記)
よくよく確認したらシフトは高速化対象でした。