FineView Software Labs



TOP > CalQ

SSIM と CalQ の紹介  CalQ の評価  コンテンツ3  ダウンロード 

SSIM を使って画像を評価していく前に、CalQ 自身の性能を評価してみます。

CalQ の計算精度

SSIM のホームページでは、アインシュタインの6枚の画像に対して SSIM 値を表示しています。 ここでは、CalQ を使って SSIM 値を求め、それらの値と比べてみます。

画像SSIM ホームページCalQ
CPU版GPU版(本ソフト)
AMDNVIDIA
Original11.000001.000001.00000
Meanshift0.9880.988360.988350.98859
Contrast0.9130.913270.913260.91640
Impulse0.8400.839560.839560.83945
Blur0.6940.693990.693990.69296
Jpg0.6620.662360.662360.66135


GPU版に先立ってCPU版(倍精度)を作ったのですが、この小数第4位を四捨五入すると、 SSIMのホームページの結果とまったく同じ値になります。

次に、GPU版です。ベンダーによって計算結果が異なっているのがわかります。 この結果を見ると、AMD の GPU が、CPU版に近い値を出していることがわかります。


動作確認に使用した GPU

CalQ は、作者にとって初めて公開する GPU ソフトになります。 ということで、データの収集とノウハウの蓄積もかねていろいろテストしていきます。

以下はテストに使用した GPU の一覧です。

ビデオカード
名前Radeon HD5770GeForce 9800GTGeForce GTS450
画像gpu_hd5770.jpg gpu_9800gt.jpg gpu_gts450.jpg
コア数800112192
コアクロック850MHz600MHz783MHz
FurMark 0X451627953962
FurMark 4X233223193036
ゆめりあ969986934561903
備考AMDの2世代前 GPU2008年頃のGPU 上位グ現行 Fermi 下位グレード
製品名msi R5770 Hawk玄人志向
GF9800GT-E512HD/GE
玄人志向 GF-GTS450-E1GH


GPU統合CPU, オンボードグラフィックス
名前Core i5 2500KHD4290HD3200
画像gpu_i5_2500k.jpg gpu_hd4290.jpg gpu_hd3200.jpg
コア数124040
コアクロック1100MHz700MHz500MHz
FurMark 0X549337193
FurMark 4X36232100
ゆめりあ28500(*)26375(*)5787 13522(*)
備考HDG3000 SandyBridgeAMD 890GX オンボAMD 780G オンボ
製品名Intel CORE i5 2500KGIGABYTE
GA-890GPA-UD3H REV2
GIGABYTE
GA-MA78GM-S2H

GPU プログラミングでは、同じコードでも「ベンダーによって動作が異なる!」ということがよくあります。 コンパイラが GPU ドライバに内包されているので、「NVIDIA では、ちゃんと動くのに AMD ではコンパイル すらできない!!」なんてこともあります。
だからといって、AMD, NVIDIA, Intel とそれぞれの GPU でテストするとなると、それなりに出て行くものは出て行きます。

上記GPU は、ゆめりあ順でソートしています。FurMark と ゆめりあは、ベンチマークソフトです。 短時間で測定できるので好んで使っています。DirectX ランタイムも要求しません。 いずれも数値が大きいほど性能が高いことを意味します。

P.S. ベンチ結果には、CPU性能やメモリも影響してきます。上の値はあくまで参考です。

ベンチマークソフトの入手先

FurMark oZone3D.Net (英語)
(上記ベンチは、FurMark 1.8.5 を使用。1.9 系と1.8 系は異なります。)

ゆめりあベンチ ゆめりあ.こむ (ナムコ)
ゆめりあ|ベンチマークソフト - Wiki
ゆめりあパッチ え?日記

ベンチ設定

FurMark: Fullscreen 1024x768 Time-based 60000 ms で、AAの設定を変えて2回計測しています。 (Run Mode を Benchmarking にすればベンチをとれます。)
ゆめりあ: 1024x768 最高、但し(*) 付きはパッチを当てずに計測した値です。


CalQ の処理速度

CalQ を使って SSIM を計測したときにかかった時間をまとめてみました。


CPUGPU (ビデオカード)
Core i5 2500KPhenom II 910eHD5770 9800GTGTS450
256x256220.2478.26.3526.1134.85
512x512922.22234.222.9086.64125.47
720x480481.01099.632.88111.13175.28
1920x10804273.010469.0196.509〜31 [秒]888.83
(単位 ms, 青: GPU で最速緑: CPU で最速赤: 最も遅い


HD5770 や、9800GT は2世代前のGPUですけど、それでも CPU に比べて十分に速いようです。 現行の GTS450 は、下位グレードということもあって両 GPU に速度で負けていることもわかります。

気になることは、大きな画像を扱ったときの 9800GT の挙動です。処理を終えるまでの時間が安定していません。 しかも、極端に遅くなります。

他にも、GTS450 の処理速度のバラつきが気になります。 表では、512x512 を求めるのに 125.47 ms と記しましたが、実はコンスタントに 70〜80 ms で算出することがあります。 条件はまったく同じです。 720x480 でもコンスタントに 95 ms あたりで算出することがあります。 また、1920x1080 では、速いときと遅いときで 450 ms ほど差があり何か不安定さを感じます。

補足) CPU版で、720x480 サイズのほうが、512x512 より速いという奇妙な逆転現象が起きています。 これは、Convolution を FFT で行っているためです。512と720 が 1024 配列で、480 が 512 配列で FFT されるため 720x480 のほうが高速になります。

補足の補足) SSIM を求める工程で、画像に対してガウシアンブラーを行う必要があります。 そのときに、画像とガウシアンカーネルを掛け合わせるのですけど、この処理のことを Convolution と言います。 Convolution は、半径が大きくなるととても計算コストが高くなります。 ただ、周波数領域では、この掛け合わせを掛け算1回で済ますことができるため 高速化できるのです。 そういった理由で、CPU 版は周波数領域で Convolution を行っています。
※ GPU 版は時間領域で Convolution しています。あと周波数領域での Convolution が 速いといっても、往復のコスト(FFT, IFFT)はそれなりにかかります。何でもかんでも FFT すればよいという ものでもありません。

CPUGPU (オンボード)
Athron 5050eAcer1410 の CPUHD4290HD3200
256x256605.41223.055.50132.25
512x5122769.35488.0219.61479.37
720x4801337.82608.0287.16594.36
1920x108015511.325563.31614.302479.49
(単位 ms)

こちらの表は、オンボードグラフィックスや、少し遅めの CPU のデータを載せています。 CPU で計算させたとき、小さな画像なら1秒以内で処理を終わらせることができますが、 画像が大きくなると秒単位の処理時間が必要になります。 例えば、Phenom II で、512x512 の画像を処理すると 2.2 秒かかります。 このことからも、SSIM は計算コストの高い処理だとわかります。

ん。と、ここまで頑張って数値を並べてきたのですけど…、「CPU に対して何倍速い!」といったわかりやすい結論は出しません。 本当はそういった方向へもっていきたかったのですけど 実装アルゴリズムが違うのでミスリードしてしまう可能性があるからです。

それでも、HD5770 は、256x256 サイズの画像を 6.35 ms。fullHD サイズで 196 ms です。 静止画が相手なら十分な速さだと思います。 ちなみに、HD5770 は、1.34 TFlops。先月発表された HD7970 は、3.79 TFlops とのことなので、 もしかすると、「まだ、HD5770 なんて使ってるんだ。」などと言われてしまう日も来るかもしれません。

また、Core i5 2500K の CPU 性能より、AMD のオンボードグラフィックスのほうが速いというのも注目です。

あと、とても言いにくいのですが… Core i5 を含む SandyBridge 製品は、GPU を積んでいるものの、CalQ で使用している命令(API) に対応していないため、SSIM の計算ができません。IvyBridge なら動くかもしれませんが、まだ発表されていない製品なので約束できません。
(→ 将来、Intel から提供されるドライバを入れれば動作するようになるかもしれません。)

補足)処理時間の計測は、7回計って最大値と最小値を除いた残りの5つの平均を求めました。


以上、CalQ の計算精度と処理速度について紹介しました。