« 拡大縮小フィルタいろいろ | メイン | JPEG XR の読み込みに対応 »
2014年04月06日
吉里吉里Z 開発:: 各種拡大縮小フィルタの実行速度
Tweet @jin1016をフォロー以下は、Core i7-477T での実行速度。
AVX2 が使用できるとなると Haswell 世代なので新しい CPU になる。
オレンジの枠は stFastLinear との速度比。
他はミリ秒。
stFastLinear は、拡大、または縮小後のサイズでサンプリングするピクセル数が決まるが、stLinear 以降は拡大後のサイズか縮小前のサイズと大きい方のサイズでサンプリングするピクセル数が決まるため、縮小はかなり不利。
また、拡大は AVX2 の方が SSE2 よりも遅くなっているので、SSE2 を選択した方が良いかもしれない。
これは AVX2 が 8 ピクセル単位なので、オーバーヘッドが大きいことによる。
拡大を見ると、速度的に stFastLinear の2倍程度になっており、十分実用的に使える速度。
また、縮小の方は前述の理由により差が広がっているものの、実行速度的には拡大よりも SIMD が効きやすいなどの理由で速くなっている。
表は、縮小の場合縦横 1/4 、拡大は 縦横 4倍したもので計測している。
サイズは、フルHD (縮小はフルHD サイズから 1/4、拡大は 1/4 フルHD サイズからフルHD サイズへ拡大 )。
クオリティーについては、前回画像を貼った通り。
前回書いたように縮小なら、面積平均が速度と画質で優れていると思われる。
拡大方向は、全体的に速度差が少ないので、一番きれいなものを選択してもいいと思う。
SIMD やマルチスレッドを意識して書いたため、それによって速度が伸びている。
以前の stLinear や stCubic は、リアルタイムで使用するのは厳しい速度だったが、これくらいの速度であれば CPU に応じて選択できる。
ユーザーがパフォーマンスかクオリティーを選択できれば満足できそう。
C、MMX は速度的に厳しいが、SSE2 を使えないことは少ないはず。
ただ、初期の SSE2 は遅かったので、Core 2 世代以降くらいからが実用的な範囲かもしれない。
stFastLinear や stNearest は、MMX までの実装なので、ここも AVX2 まで対応すればさらに速度が伸びそう。
ただ、stNearest はほぼメモリコピーと思われるので、対応しても意味がないかもしれない。
後、ブレンドやクリッピングの制限がなくなったので、使いやすくなった。
stFastLinear と stNearest はブレンド方式に制限があるので、逆転現象が起きてしまっている。
この辺りも考えると stFastLinear と stNearest も書き換えた方が良いかもしれない。
Fast がついている方は、固定小数点版のため誤差が大きい。
とは言っても、見た目ではあまりわからない程度。
Linear については、従来と名前がかぶるので、Semi-をつけた。
C | MMX | SSE/SSE2 | AVX/AVX2 | |||||||||||||
縮小 | 縮小 MT | 拡大 | 拡大 MT | 縮小 | 縮小 MT | 拡大 | 拡大 MT | 縮小 | 縮小 MT | 拡大 | 拡大 MT | 縮小 | 縮小 MT | 拡大 | 拡大 MT | |
stNearest | 0.13 | 0.06 | 1.17 | 0.51 | ||||||||||||
stFastLinear | 0.51 | 0.22 | 7.17 | 2.18 | ||||||||||||
old stLinear | 51.61 | 77.34 | ||||||||||||||
old stCubic | 65.96 | 98.83 | ||||||||||||||
stLinear | 38.39 | 9.84 | 70.23 | 16.98 | 5.03 | 1.46 | 15.32 | 3.92 | 3.10 | 1.14 | 18.26 | 5.23 | ||||
75.27 | 44.73 | 9.79 | 7.79 | 9.86 | 6.64 | 2.14 | 1.80 | 6.08 | 5.18 | 2.55 | 2.40 | |||||
stCubic | 66.02 | 17.27 | 97.89 | 22.41 | 9.14 | 2.72 | 15.93 | 4.15 | 5.26 | 1.97 | 18.56 | 5.28 | ||||
129.45 | 78.50 | 13.65 | 10.28 | 17.92 | 12.36 | 2.22 | 1.90 | 10.31 | 8.95 | 2.59 | 2.42 | |||||
stSemiFastLinear | 28.91 | 4.74 | 46.50 | 8.12 | 3.27 | 0.98 | 13.18 | 3.32 | 2.25 | 0.84 | 15.23 | 4.49 | ||||
56.69 | 21.55 | 6.49 | 3.72 | 6.41 | 4.45 | 1.84 | 1.52 | 4.41 | 3.82 | 2.12 | 2.06 | |||||
stFastCubic | 54.96 | 8.50 | 78.66 | 13.00 | 5.82 | 1.86 | 13.64 | 3.36 | 3.68 | 1.40 | 16.07 | 4.68 | ||||
107.76 | 38.64 | 10.97 | 5.96 | 11.41 | 8.45 | 1.90 | 1.54 | 7.22 | 6.36 | 2.24 | 2.15 | |||||
stLanczos2 | 66.42 | 21.96 | 97.33 | 25.14 | 9.10 | 2.72 | 16.12 | 4.13 | 5.41 | 2.08 | 19.08 | 5.77 | ||||
130.24 | 99.82 | 13.57 | 11.53 | 17.84 | 12.36 | 2.25 | 1.89 | 10.61 | 9.45 | 2.66 | 2.65 | |||||
stFastLanczos2 | 55.23 | 9.09 | 78.00 | 12.57 | 5.86 | 1.81 | 13.61 | 3.34 | 3.71 | 1.45 | 16.12 | 4.78 | ||||
108.29 | 41.32 | 10.88 | 5.77 | 11.49 | 8.23 | 1.90 | 1.53 | 7.27 | 6.59 | 2.25 | 2.19 | |||||
stLanczos3 | 93.83 | 25.27 | 124.22 | 29.33 | 13.44 | 4.24 | 24.40 | 6.21 | 7.61 | 3.28 | 19.58 | 5.71 | ||||
183.98 | 114.86 | 17.32 | 13.45 | 26.35 | 19.27 | 3.40 | 2.85 | 14.92 | 14.91 | 2.73 | 2.62 | |||||
stFastLanczos3 | 81.83 | 13.09 | 112.72 | 17.59 | 8.37 | 2.93 | 16.95 | 4.37 | 5.02 | 2.11 | 16.52 | 4.92 | ||||
160.45 | 59.50 | 15.72 | 8.07 | 16.41 | 13.32 | 2.36 | 2.00 | 9.84 | 9.59 | 2.30 | 2.26 | |||||
stSpline16 | 65.64 | 16.81 | 97.57 | 21.79 | 9.01 | 2.60 | 15.94 | 4.03 | 5.27 | 1.99 | 19.20 | 5.56 | ||||
128.71 | 76.41 | 13.61 | 10.00 | 17.67 | 11.82 | 2.22 | 1.85 | 10.33 | 9.05 | 2.68 | 2.55 | |||||
stFastSpline16 | 54.94 | 8.81 | 78.18 | 13.03 | 5.71 | 1.79 | 13.53 | 3.58 | 3.64 | 1.41 | 16.09 | 4.65 | ||||
107.73 | 40.05 | 10.90 | 5.98 | 11.20 | 8.14 | 1.89 | 1.64 | 7.14 | 6.41 | 2.24 | 2.13 | |||||
stSpline36 | 93.15 | 24.56 | 124.35 | 28.64 | 13.33 | 4.10 | 24.23 | 6.07 | 7.48 | 3.19 | 19.59 | 5.65 | ||||
182.65 | 111.64 | 17.34 | 13.14 | 26.14 | 18.64 | 3.38 | 2.78 | 14.67 | 14.50 | 2.73 | 2.59 | |||||
stFastSpline36 | 81.28 | 12.79 | 112.64 | 17.69 | 8.25 | 2.78 | 16.85 | 4.30 | 4.87 | 2.01 | 16.15 | 4.55 | ||||
159.37 | 58.14 | 15.71 | 8.11 | 16.18 | 12.64 | 2.35 | 1.97 | 9.55 | 9.14 | 2.25 | 2.09 | |||||
stAreaAvg | 27.75 | 6.92 | 3.80 | 1.14 | 2.46 | 0.94 | ||||||||||
54.41 | 31.45 | 7.45 | 5.18 | 4.82 | 4.27 | |||||||||||
stFastAreaAvg | 20.03 | 3.58 | 2.49 | 0.81 | 1.89 | 0.71 | ||||||||||
39.27 | 16.27 | 4.88 | 3.68 | 3.71 | 3.23 | |||||||||||
stGaussian | 65.35 | 17.67 | 97.24 | 24.41 | 9.09 | 2.62 | 16.06 | 4.11 | 5.29 | 2.01 | 19.12 | 5.73 | ||||
128.14 | 80.32 | 13.56 | 11.20 | 17.82 | 11.91 | 2.24 | 1.89 | 10.37 | 9.14 | 2.67 | 2.63 | |||||
stFastGaussian | 54.88 | 8.42 | 78.46 | 12.88 | 5.79 | 1.92 | 13.61 | 3.42 | 3.68 | 1.40 | 16.17 | 4.69 | ||||
107.61 | 38.27 | 10.94 | 5.91 | 11.35 | 8.73 | 1.90 | 1.57 | 7.22 | 6.36 | 2.26 | 2.15 | |||||
stBlackmanSinc | 126.39 | 33.64 | 154.99 | 37.19 | 19.06 | 5.65 | 25.23 | 6.35 | 10.87 | 4.26 | 19.93 | 5.81 | ||||
247.82 | 152.91 | 21.62 | 17.06 | 37.37 | 25.68 | 3.52 | 2.91 | 21.31 | 19.36 | 2.78 | 2.67 | |||||
stFastBlackmanSinc | 109.59 | 17.90 | 145.62 | 23.66 | 11.58 | 3.63 | 17.43 | 4.53 | 7.01 | 2.69 | 16.57 | 5.03 | ||||
214.88 | 81.36 | 20.31 | 10.85 | 22.71 | 16.50 | 2.43 | 2.08 | 13.75 | 12.23 | 2.31 | 2.31 |
投稿者 Takenori : 2014年04月06日 20:35
comments powered by Disqus