SSE用いたアルファブレンドの高速化2
Posted on Sat 20 March 2010 in ペイントツール
ロード・ストアに使用するSSE命令
ロード
イントリンシック命令 | 対応するSSE命令 | |
---|---|---|
_mm_loadu_ps | MOVUPS | アライメントを合わせる必要がない |
_mm_load_ps | MOVAPS | アライメントを合わせなければならない |
ストア
イントリンシック命令 | 対応するSSE命令 | |
---|---|---|
_mm_storeu_ps | MOVUPS | アライメントを合わせる必要がない |
_mm_store_ps | MOVAPS | アライメントを合わせなければならない |
_mm_stream_si128 | MOVNTPD | アライメントを合わせなければならない、キャッシュを介さずにストアする |
計測するアルファブレンド処理
32bit,64bit向けに2通りに実行ファイルを作成、それぞれについて
- SSEを使わない処理
- _mm_loadu_psでメモリ読み込み、_mm_storeu_psでメモリ書き込み
- _mm_load_psでメモリ読み込み、_mm_store_psでメモリ書き込み
- _mm_load_psでメモリ読み込み、_mm_stream_si128でメモリ書き込み
の4通りでテストする。
64bit向けの設定だと__asmのとこでエラーがでるのでインラインアセンブラではなく組み込み関数を使って書きました。
アライメントをあわせて処理するために、128bit(4pixel)ずつ読み込んで処理を行っています。
計測方法
- 5760x3600BGR画像を2枚読み込み、アルファ値を指定してアルファブレンドを行う。
- 画像の保存、読み込みはopenCV 2 …
Continue reading