2011/10/21
OpenGL ES 2.0 Mobile GPU の比較、重いテクスチャ
テクスチャ負荷が高いケースでのテスト
背景データ
・170000 ポリゴン
・1024x1024 カラーテクスチャ 5枚
・2048x2048 非圧縮ノーマルマップ 2枚
・ライティングあり(directional x2 + point x1)
キャラクタ
・10000ポリゴン前後 x5 (animation あり)
・ColorMap + NormalMap + SpecularMap
・ライティングあり(directional x2 + point x1)
背景の normal map は非圧縮 mip 無しで 1枚 12MByte もあります。
それでも Adreno 220/PVR SGX543MP2 はよくこの速度で動いています。
Color Texture の一部は alpha が入っており、
ETC1 しか使えない Mali-400MP では圧縮できませんでした。
このあたりが速度に影響しているかもしれません。
・圧縮テクスチャ対応表
高負荷で長時間走らせていると端末も結構熱を持ちます。
Tablet は大丈夫ですが、うっかり雑誌の上においた EVO 3D が熱くなり
LED が点滅してました。
関連エントリ
・頂点性能の比較 その2 (OpenGL ES 2.0 Mobile GPU)
・OpenGL ES 2.0 Mobile GPU の頂点性能を比較する
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
GPU fps display pix/sec -------------------------------------------------- Adreno 220 28.88fps 960x540 15.0M Mali-400MP 20.08fps 800x480 7.7M ULP GeForce(8) 4.37fps 1280x752 4.2M (Tegra250) PVR SGX543MP2 20.65fps 1024x768 16.2M PVR SGX535 8.70fps 480x320 1.3M
背景データ
・170000 ポリゴン
・1024x1024 カラーテクスチャ 5枚
・2048x2048 非圧縮ノーマルマップ 2枚
・ライティングあり(directional x2 + point x1)
キャラクタ
・10000ポリゴン前後 x5 (animation あり)
・ColorMap + NormalMap + SpecularMap
・ライティングあり(directional x2 + point x1)
背景の normal map は非圧縮 mip 無しで 1枚 12MByte もあります。
それでも Adreno 220/PVR SGX543MP2 はよくこの速度で動いています。
Color Texture の一部は alpha が入っており、
ETC1 しか使えない Mali-400MP では圧縮できませんでした。
このあたりが速度に影響しているかもしれません。
alpha無し alpha 1bit alpha --------------------------------------------------------- Mali-400MP ETC1 4bpp 非圧縮 非圧縮 Adreno 220 ATC 4bpp ATCA 8bpp ATCI 8bpp ULP GeForce DXT1 4bpp DXT1 4bpp DXT5 8bpp PVR SGX543MP2 PVRTC 4bpp PVRTC 4bpp PVRTC 4bpp
・圧縮テクスチャ対応表
高負荷で長時間走らせていると端末も結構熱を持ちます。
Tablet は大丈夫ですが、うっかり雑誌の上においた EVO 3D が熱くなり
LED が点滅してました。
関連エントリ
・頂点性能の比較 その2 (OpenGL ES 2.0 Mobile GPU)
・OpenGL ES 2.0 Mobile GPU の頂点性能を比較する
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
2011/10/18
頂点性能の比較 その2 (OpenGL ES 2.0 Mobile GPU)
最適な頂点形式を割り出すため strip 変換時のパフォーマンスも調べて
みました。
テスト条件は前回と同じです。
50880ポリゴンの球モデルを 22個、画面あたり 1119628ポリゴンの描画を
行なっています。
各 GPU 毎に最も高速だった項目に '*' マークをつけています。
各項目の詳細は下記のとおりです。
List よりも Strip の方が速いのは
Mali-400MP, ULP GeForce(Tegra2), Adreno 200 の 3種類です。
(AMD Z430 は Adreno 200 とほぼ同一のものです)
逆に Strip 化で速度が落ちたのは Adreno 220, PowerVR です。
この両者は適量の Vertex Cache が搭載されていると考えて間違い無いでしょう。
Strip の方が速い GPU でも、興味深いことに最適なフォーマットがどれも
ばらばらでした。
Mali-400MP = NStripL
ULP GeForce = NStripC
Adreno200/Z430 = QStrip
以下細かく見ていきます。
● Mali-400MP
頂点性能がぱっとしませんでしたが Strip 化で大きくスコアが伸びました。
実測で 20.3M tri/sec まで出せることが確認できました。
List 比 2倍程度なので V-Cache が全く無いわけではなさそうです。
NStripL は cache を無視して出来るだけ長くつながるよう NvStrip を設定
したものです。
同様に長さ優先と思われる QStrip ではなぜか速度が落ちました。
● ULP GeForce(8) (Tegra2)
さすが NVIDIA 製ツールと相性が良いです。
NvStrip の通常設定で一番スコアが伸びました。
Strip の方が高速ですが速度向上率が 16% と小さいため、V-Cache を搭載
しつつ、さらに Strip も速いハードだと考えられます。
たとえぶつ切りでも Cache 効率を優先して並べ変えた NStripC が速く、
無駄な index が無い NStripL/QStrip はかえって速度が落ちることに
なっています。
● Adreno 200/Adreno 205/AMD Z430
Strip 化でおよそ 2.4倍と大幅に伸びています。
このことから基本的に V-Cache が無く、Strip 化することで約 3倍まで
近づくハードウエアであると考えられます。
当然のように Qualcomm 製ツールで変換した場合が最も良い結果となっています。
ただし同じ Qualcomm でも、新型の Adreno 220 では逆に速度が落ちて
しまうので要注意です。
● PowerVR SGX535/SGX543MP2
List の方が高速です。
ただし今回のデータは List でも 66% と Cache hit 率が strip 相当なので
思ったより差が出ていません。
Cache 最適化された NStripC よりも、無駄な index が無い NStripL/QStrip
の方が速度が出ています。縮退 Triangle の効率が悪いのか、Index 転送量の
問題なのかわかりません。
SGX535 は iPod touch3/4 共に同じ数値でした。
画面解像度が影響せず、実行時間をほとんど頂点が占めていることがわかります。
● Adreno 220
List の方が高速です。
V-Cache 搭載 GPU として最も予想通りの結果で、どうすれば速いのか、
何をすれば遅くなるのか感覚的にも受け入れやすいものとなっています。
またこの結果から、Adreno 200/205 と Adreno 220 との間には
アーキテクチャ的な大きな変更があったことがわかります。
Adreno 200 向け最適化 (Qstrip) を行うと cache 効率が下がって却って
速度が落ちます。
●結論
全てに都合の良い頂点形式はありませんでした。
ぎりぎりの頂点性能を求めるなら各 GPU 毎に変換する必要があります。
最低限の頂点性能で幅広いハードで動作することを優先するなら、
遅い GPU の底上げ(Qstrip)でしょうか。
Adreno のように今後は速いペースで GPU の機能が desktop GPU に追いついて
いく事が考えられます。将来を視野に入れたデータ構造にするなら
Cache 優先の List になるでしょう。
ただ現状は頂点よりも圧倒的に pixel の方が速度を圧迫しているため、
このような頂点構造の違いは大した問題ではないかもしれません。
・Mobile GPU 速度比較のまとめ
関連エントリ
・OpenGL ES 2.0 Mobile GPU の頂点性能を比較する
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
みました。
Mali- Adreno Adreno AMD ULP PVR SGX PVR 400MP 220 200 Z430 GeForce 543MP2 SGX535 ------------------------------------------------------------------- List 9.07 29.49* 1.71 2.34 20.96 57.08* 14.51* NStripC 16.42 25.81 3.09 4.30 24.28* 50.96 12.18 NStripL 18.11* 24.38 4.05 5.52 21.02 56.08 14.20 QStrip 17.20 18.41 4.14* 5.79* 21.18 56.06 14.20 単位は fps (大きい方が速い)
テスト条件は前回と同じです。
50880ポリゴンの球モデルを 22個、画面あたり 1119628ポリゴンの描画を
行なっています。
各 GPU 毎に最も高速だった項目に '*' マークをつけています。
各項目の詳細は下記のとおりです。
format indices DrawElements ---------------------------------------------------------------------- List 152640 GL_TRIANGLES 無変換 (v-cache hit率 66% 前後) NStripC 74766 GL_TRIANGLE_STRIP NVIDIA NvStrip。Cache 優先 NStripL 52873 GL_TRIANGLE_STRIP NVIDIA NvStrip。長さ優先に修正 QStrip 51518 GL_TRIANGLE_STRIP Qualcomm Qstrip 使用。
List よりも Strip の方が速いのは
Mali-400MP, ULP GeForce(Tegra2), Adreno 200 の 3種類です。
(AMD Z430 は Adreno 200 とほぼ同一のものです)
逆に Strip 化で速度が落ちたのは Adreno 220, PowerVR です。
この両者は適量の Vertex Cache が搭載されていると考えて間違い無いでしょう。
Strip の方が速い GPU でも、興味深いことに最適なフォーマットがどれも
ばらばらでした。
Mali-400MP = NStripL
ULP GeForce = NStripC
Adreno200/Z430 = QStrip
以下細かく見ていきます。
● Mali-400MP
頂点性能がぱっとしませんでしたが Strip 化で大きくスコアが伸びました。
実測で 20.3M tri/sec まで出せることが確認できました。
List 比 2倍程度なので V-Cache が全く無いわけではなさそうです。
NStripL は cache を無視して出来るだけ長くつながるよう NvStrip を設定
したものです。
同様に長さ優先と思われる QStrip ではなぜか速度が落ちました。
● ULP GeForce(8) (Tegra2)
さすが NVIDIA 製ツールと相性が良いです。
NvStrip の通常設定で一番スコアが伸びました。
Strip の方が高速ですが速度向上率が 16% と小さいため、V-Cache を搭載
しつつ、さらに Strip も速いハードだと考えられます。
たとえぶつ切りでも Cache 効率を優先して並べ変えた NStripC が速く、
無駄な index が無い NStripL/QStrip はかえって速度が落ちることに
なっています。
● Adreno 200/Adreno 205/AMD Z430
Strip 化でおよそ 2.4倍と大幅に伸びています。
このことから基本的に V-Cache が無く、Strip 化することで約 3倍まで
近づくハードウエアであると考えられます。
当然のように Qualcomm 製ツールで変換した場合が最も良い結果となっています。
ただし同じ Qualcomm でも、新型の Adreno 220 では逆に速度が落ちて
しまうので要注意です。
● PowerVR SGX535/SGX543MP2
List の方が高速です。
ただし今回のデータは List でも 66% と Cache hit 率が strip 相当なので
思ったより差が出ていません。
Cache 最適化された NStripC よりも、無駄な index が無い NStripL/QStrip
の方が速度が出ています。縮退 Triangle の効率が悪いのか、Index 転送量の
問題なのかわかりません。
SGX535 は iPod touch3/4 共に同じ数値でした。
画面解像度が影響せず、実行時間をほとんど頂点が占めていることがわかります。
● Adreno 220
List の方が高速です。
V-Cache 搭載 GPU として最も予想通りの結果で、どうすれば速いのか、
何をすれば遅くなるのか感覚的にも受け入れやすいものとなっています。
またこの結果から、Adreno 200/205 と Adreno 220 との間には
アーキテクチャ的な大きな変更があったことがわかります。
Adreno 200 向け最適化 (Qstrip) を行うと cache 効率が下がって却って
速度が落ちます。
●結論
全てに都合の良い頂点形式はありませんでした。
ぎりぎりの頂点性能を求めるなら各 GPU 毎に変換する必要があります。
最低限の頂点性能で幅広いハードで動作することを優先するなら、
遅い GPU の底上げ(Qstrip)でしょうか。
Adreno のように今後は速いペースで GPU の機能が desktop GPU に追いついて
いく事が考えられます。将来を視野に入れたデータ構造にするなら
Cache 優先の List になるでしょう。
ただ現状は頂点よりも圧倒的に pixel の方が速度を圧迫しているため、
このような頂点構造の違いは大した問題ではないかもしれません。
・Mobile GPU 速度比較のまとめ
テスト機材一覧 Mali-400MP Exynos 4210 Samsung Galaxy S2 SC-02C Adreno 220 MSM8660 HTC EVO 3D ISW12HT Adreno 200 QSD8250 HTC Desire X06HT AMD Z430 i.MX51 Creative ZenTouch2 ULP GeForce Tegra 250 Acer ICONIA TAB A500 PowerVR SGX543MP2 A5 Apple iPad2 PowerVR SGX535 A4/S5PC100 Apple iPod touch4/iPod touch3
関連エントリ
・OpenGL ES 2.0 Mobile GPU の頂点性能を比較する
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
2011/10/16
OpenGL ES 2.0 Mobile GPU の頂点性能を比較する
前回までのテストはピクセル性能に左右されていたため、ほぼ頂点だけの
描画を行ってみました。
50880 ポリゴン(25919頂点) の球のモデルを 22個表示しています。
シーン内合計 1119360ポリゴン。
Fragment Shader はライティングなし、テクスチャなし、描画面積を減らすため
中央に小さく表示。
頂点フォーマットは float x 3 の座標値のみ。(stride = 12byte)
Vertex Shader は vec4 * mat4 だけの単純なものです。
球のモデルデータなので共有頂点が多く、Vertex Cache が有効な GPU にとっては
理想的なデータです。
頂点数は 25919 なので、もし仮に V-Cache が完全に hit したと考えると
1ポリゴンあたり 1頂点未満で描画できる計算になります。
実際にシミュレートしてみると 66% hit、つまり strip 変換相当でした。
ただしテストした GPU にどれだけ V-Cache が搭載されているか判明していません。
Strip 変換していないため、もし V-Cache 無しの GPU の場合は本来の能力を
発揮できていないことになります。
この場合はおそらくピーク性能の 1/3 程度の結果になっていると考えられます。
また GPU の Shader Unit の構造に注意してください。
GPU が Unified Shader の場合はおそらく突出した数値が出ていますが現実的
ではありません。
本来 Fragment Shader として機能する分の演算能力の多くが頂点に割り振られて
いると考えられるからです。
一般的な描画のシーンではピクセルの面積分だけ頂点性能が削られます。
● Mali-400MP
描画面積の多いシーンでは最強だった Mali-400MP の意外な弱点が判明しました。
Mali-400MP の構成を見ると、
Vertex Processor x 1 + Fragment Processor x 1~4
という構造になっているようです。MP4 なら Fragment Processor x4 です。
頂点 Unit 自体の個数は変化しません。
頂点性能をそこまで求めない代わりにピクセル性能が高く、比較的長い
Fragment Shader を走らせても動作効率が落ちませんでした。
このことから、ピクセル性能重視型 GPU として設計してあるようです。
おそらく Fragment Shader で様々なテクニックを駆使して絵作りを行うべき
GPU だと言えるでしょう。(ただし mediump のみ)
スマートフォンやタブレットなど、GPU 性能の向上よりも速いペースで解像度が
増加したため、用途として非常にバランスが良かったのだと思われます。
こちらによればピーク値 30M tri/s だそうです。
● Tegra 250
Mali とは逆に予想以上の数値を出したのが Tegra2 です。
Mali 同様 discrete タイプで「後藤弘茂のWeekly海外ニュース」によると
Shader の core は Vertex 4unit、Pixel 4unit とのこと。
おそらく Fragment Shader のシェーディングで工夫するよりもハイポリゴンに
した方が綺麗な絵が出せる GPU だといえます。
次の Kal-El (Tegra3) は Vertex unit そのままで Pixel Unit が 2倍になる
らしいので、弱点を補う意味でも理にかなった拡張です。
● Adreno 220
Unified Shader なのでこの値は控えめに見積もってください。
他の GPU が比較的一点集中型で、得意な項目と苦手な点がはっきりしている
のに対して、どのテストでもそつなく高い数値を出す傾向があります。
ピークが突出していない代わりに速度が落ちにくいバランスとなっているようです。
唯一 Vertex Texture が使えたり、Pixel 演算も highp で高精度だったりと
機能面でも手を抜いておらず、たいへん扱いやすい GPU です。
● PVR SGX543MP2
ピクセル負荷が減ると極端に速度が向上する特性を示していましたが、
頂点数が増えてもその傾向は変わらないようです。
Unified Shader なので通常利用時の性能ではありませんが、潜在能力が
高いのは間違いありません。
ピーキーな特性で、特に Fragment Shader の最適化は僅かな修正でも大きな
違いとなって現れます。
頂点とピクセルのバランス取りなど、使いこなしはまさに利用者の腕次第と言った
感じです。
今回のテスト結果を下記のページに追加しました。
・Mobile GPU 速度比較のまとめ
関連エントリ
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
描画を行ってみました。
GPU Processor Sh Unit OS display fps tri/sec -------------------------------------------------------------------------- Mali-400MP Exynos 4210 discrete A2.3 480x800 9.21 10.3M (1031万) Adreno 220 MSM8660 unified A2.3 540x960 29.50 33.0M (3303万) ULP GeForce Tegra 250 discrete A3.1 800x1232 20.85 23.3M (2334万) PVR SGX543MP2 A5 unified i5.0 768x1024 56.10 62.8M (6281万)
50880 ポリゴン(25919頂点) の球のモデルを 22個表示しています。
シーン内合計 1119360ポリゴン。
Fragment Shader はライティングなし、テクスチャなし、描画面積を減らすため
中央に小さく表示。
頂点フォーマットは float x 3 の座標値のみ。(stride = 12byte)
Vertex Shader は vec4 * mat4 だけの単純なものです。
球のモデルデータなので共有頂点が多く、Vertex Cache が有効な GPU にとっては
理想的なデータです。
頂点数は 25919 なので、もし仮に V-Cache が完全に hit したと考えると
1ポリゴンあたり 1頂点未満で描画できる計算になります。
実際にシミュレートしてみると 66% hit、つまり strip 変換相当でした。
ただしテストした GPU にどれだけ V-Cache が搭載されているか判明していません。
Strip 変換していないため、もし V-Cache 無しの GPU の場合は本来の能力を
発揮できていないことになります。
この場合はおそらくピーク性能の 1/3 程度の結果になっていると考えられます。
また GPU の Shader Unit の構造に注意してください。
GPU が Unified Shader の場合はおそらく突出した数値が出ていますが現実的
ではありません。
本来 Fragment Shader として機能する分の演算能力の多くが頂点に割り振られて
いると考えられるからです。
一般的な描画のシーンではピクセルの面積分だけ頂点性能が削られます。
● Mali-400MP
描画面積の多いシーンでは最強だった Mali-400MP の意外な弱点が判明しました。
Mali-400MP の構成を見ると、
Vertex Processor x 1 + Fragment Processor x 1~4
という構造になっているようです。MP4 なら Fragment Processor x4 です。
頂点 Unit 自体の個数は変化しません。
頂点性能をそこまで求めない代わりにピクセル性能が高く、比較的長い
Fragment Shader を走らせても動作効率が落ちませんでした。
このことから、ピクセル性能重視型 GPU として設計してあるようです。
おそらく Fragment Shader で様々なテクニックを駆使して絵作りを行うべき
GPU だと言えるでしょう。(ただし mediump のみ)
スマートフォンやタブレットなど、GPU 性能の向上よりも速いペースで解像度が
増加したため、用途として非常にバランスが良かったのだと思われます。
こちらによればピーク値 30M tri/s だそうです。
● Tegra 250
Mali とは逆に予想以上の数値を出したのが Tegra2 です。
Mali 同様 discrete タイプで「後藤弘茂のWeekly海外ニュース」によると
Shader の core は Vertex 4unit、Pixel 4unit とのこと。
おそらく Fragment Shader のシェーディングで工夫するよりもハイポリゴンに
した方が綺麗な絵が出せる GPU だといえます。
次の Kal-El (Tegra3) は Vertex unit そのままで Pixel Unit が 2倍になる
らしいので、弱点を補う意味でも理にかなった拡張です。
● Adreno 220
Unified Shader なのでこの値は控えめに見積もってください。
他の GPU が比較的一点集中型で、得意な項目と苦手な点がはっきりしている
のに対して、どのテストでもそつなく高い数値を出す傾向があります。
ピークが突出していない代わりに速度が落ちにくいバランスとなっているようです。
唯一 Vertex Texture が使えたり、Pixel 演算も highp で高精度だったりと
機能面でも手を抜いておらず、たいへん扱いやすい GPU です。
● PVR SGX543MP2
ピクセル負荷が減ると極端に速度が向上する特性を示していましたが、
頂点数が増えてもその傾向は変わらないようです。
Unified Shader なので通常利用時の性能ではありませんが、潜在能力が
高いのは間違いありません。
ピーキーな特性で、特に Fragment Shader の最適化は僅かな修正でも大きな
違いとなって現れます。
頂点とピクセルのバランス取りなど、使いこなしはまさに利用者の腕次第と言った
感じです。
今回のテスト結果を下記のページに追加しました。
・Mobile GPU 速度比較のまとめ
関連エントリ
・A5 PowerVR SGX543MP2 は iOS 5 だと速い
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
2011/10/15
A5 PowerVR SGX543MP2 は iOS 5 だと速い
iPad2 を iOS5 にアップデートしたら 3D の描画性能が大幅に向上しました。
テスト内容は前回までと同じです。
iOS5 では 15fps → 20fps 、 45fps → 57fps とスコアが伸びています。
iOS5 ではドライバレベルで大きく手が加えられているようです。
まず OpenGL が返す Extension List が増えています。
Extension の中身は下記のページに追加しました。
・Mobile CPU/GPU の詳細 OpenGL Extension など
さらにレンダリング可能な解像度と最大テクスチャサイズも 2048 から 4096 へと
拡張されました。
iOS4 までは互換性重視なのか PowerVR SGX535 と全く同じ値を返していました。
iOS5 でやっと PowerVR SGX543MP 本来の能力を引き出せるようになったのかもしれません。
速度に大きな差があることから、シェーダーコンパイラの最適化がより進んだ
可能性があります。
残念ながら PowerVR SGX535 搭載の iPod tpuch3/4 では iOS5 に更新しても
速度は変わりませんでした。
今までのテスト結果を下記のページにまとめました。
・Mobile GPU 速度比較のまとめ
シェーダー負荷が小さいケースではおそらく PowerVR SGX543MP2 の圧勝です。
重いシェーダーでは Mali-400MP, Adreno 220 に届きませんが差は縮まっています。
やはりこの 3 GPU が現段階での最速候補のようです。
関連エントリ
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
テスト内容は前回までと同じです。
iPad2 ( A5 : PowerVR SGX543MP2 ) (1) light 3 + shadow map ------------------------------------ iOS 5 15.81 fps 13.0Mpix/sec iOS 4 11.83 fps 12.4Mpix/sec (2) light 3 ------------------------------------ iOS 5 20.67 fps 16.3Mpix/sec iOS 4 15.27 fps 12.0Mpix/sec (3) light 1 ------------------------------------ iOS 5 57.04 fps 44.9Mpix/sec iOS 4 45.49 fps 35.8Mpix/sec
iOS5 では 15fps → 20fps 、 45fps → 57fps とスコアが伸びています。
iOS5 ではドライバレベルで大きく手が加えられているようです。
まず OpenGL が返す Extension List が増えています。
Extension の中身は下記のページに追加しました。
・Mobile CPU/GPU の詳細 OpenGL Extension など
さらにレンダリング可能な解像度と最大テクスチャサイズも 2048 から 4096 へと
拡張されました。
iOS4 までは互換性重視なのか PowerVR SGX535 と全く同じ値を返していました。
iOS5 でやっと PowerVR SGX543MP 本来の能力を引き出せるようになったのかもしれません。
速度に大きな差があることから、シェーダーコンパイラの最適化がより進んだ
可能性があります。
残念ながら PowerVR SGX535 搭載の iPod tpuch3/4 では iOS5 に更新しても
速度は変わりませんでした。
今までのテスト結果を下記のページにまとめました。
・Mobile GPU 速度比較のまとめ
シェーダー負荷が小さいケースではおそらく PowerVR SGX543MP2 の圧勝です。
重いシェーダーでは Mali-400MP, Adreno 220 に届きませんが差は縮まっています。
やはりこの 3 GPU が現段階での最速候補のようです。
関連エントリ
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
2011/10/14
さらに OpenGL ES 2.0 Mobile GPU の速度比較
single core CPU 世代の GPU 結果も追加しました。
画面解像度が異なるため fps で速度を比べることができません。
比較する場合は pix/sec の数値を見てください。
ただしシーンにはポリゴンの重なりがあるので厳密ではありません。
補足が多数あるので前回の記事もあわせてご参照ください。
GPU や転送能力と比べて解像度が高い傾向があるため、実行時間のほとんどが
ピクセルで費やされていることがわかります。(1)→(4) とピクセルシェーダー
(Fragment Shader) の負荷を軽くするとその傾向は下がります。
やはり GPU のおおまかなグループ分けとしては下記の 3つでだいたい合っている
ように思います。
関連エントリ
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
(1) light 3 + shadow map (ambient + directional x2 + point) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 38.96 480x800 15.0M 565 24 8 Exynos 4210 Mali-400MP A2.3 38.96 480x800 15.0M 8888 24 8 Exynos 4210 Adreno 220 A2.3 27.50 540x960 14.3M 565 16 0 MSM8660 Adreno 220 A2.3 25.00 540x960 13.0M 8888 24 8 MSM8660 SGX 543MP2 i4.3 11.83 768x1024 9.3M 8888 24 8 A5 ULP GeForce A2.2 8.00 600x1024 4.9M 565 16 0 Tegra 250 ULP GeForce A2.2 8.00 600x1024 4.9M 8888 16 8 Tegra 250 ULP GeForce A3.1 5.80 800x1232 5.7M 565 16 0 Tegra 250 ULP GeForce A3.1 5.65 800x1232 5.6M 8888 16 8 Tegra 250 SGX 535 i4.3 4.04 640x960 2.5M 8888 24 8 A4 SGX 535 i4.3 11.08 320x480 1.7M 8888 24 8 S5PC100 Adreno 200 A2.2 3.12 480x800 1.2M 565 16 0 QSD8250 (2) light 3 (ambient + directional x2 + point) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 42.30 480x800 16.2M 8888 24 8 Exynos 4210 Adreno 220 A2.3 36.27 540x960 18.8M 8888 24 8 MSM8660 Adreno 220 A2.3 32.50 540x960 16.8M 8888 24 8 MSM8660 SGX 543MP2 i4.3 15.27 768x1024 12.0M 8888 24 8 A5 ULP GeForce A2.2 9.50 600x1024 5.8M 565 16 0 Tegra 250 ULP GeForce A3.1 5.90 800x1232 5.8M 565 16 0 Tegra 250 ULP GeForce A3.1 5.74 800x1232 5.7M 8888 16 8 Tegra 250 SGX 535 i4.3 4.76 640x960 2.9M 8888 24 8 A4 SGX 535 i4.3 14.75 320x480 2.3M 8888 24 8 S5PC100 Adreno 200 A2.2 3.52 480x800 1.4M 565 16 0 QSD8250 (3) light 1 (ambient + directional) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 59.95 480x800 算出不可 8888 24 8 Exynos 4210 Adreno 220 A2.3 55.36 540x960 28.7M 565 16 0 MSM8660 Adreno 220 A2.3 48.20 540x960 25.0M 8888 24 8 MSM8660 SGX 543MP2 i4.3 45.49 768x1024 35.8M 8888 24 8 A5 ULP GeForce A2.2 17.10 600x1024 10.5M 565 16 0 Tegra 250 ULP GeForce A3.1 13.00 800x1232 12.8M 565 16 0 Tegra 250 ULP GeForce A3.1 12.10 800x1232 11.9M 8888 16 8 Tegra 250 SGX 535 i4.3 12.78 640x960 7.9M 8888 24 8 A4 SGX 535 i4.3 30.00 320x480 4.6M 8888 24 8 S5PC100 Adreno 200 A2.2 6.04 480x800 2.3M 565 16 0 QSD8250 (4) light 0 GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 59.94 480x800 算出不可 8888 24 8 Exynos 4210 Adreno 220 A2.3 60.00 540x960 算出不可 565 16 0 MSM8660 Adreno 220 A2.3 60.00 540x960 算出不可 8888 24 8 MSM8660 SGX 543MP2 i4.3 60.00 768x1024 算出不可 8888 24 8 A5 ULP GeForce A3.1 46.85 800x1232 46.2M 565 16 0 Tegra 250 ULP GeForce A3.1 34.35 800x1232 33.9M 8888 16 8 Tegra 250 SGX 535 i4.3 52.13 640x960 32.0M 8888 24 8 A4 SGX 535 i4.3 60.00 320x480 算出不可 8888 24 8 S5PC100 Adreno 200 A2.2 11.60 480x800 4.5M 565 16 0 QSD8250 OS = A:Android, i:iOS framebuffer = color depth stencil
画面解像度が異なるため fps で速度を比べることができません。
比較する場合は pix/sec の数値を見てください。
ただしシーンにはポリゴンの重なりがあるので厳密ではありません。
補足が多数あるので前回の記事もあわせてご参照ください。
GPU や転送能力と比べて解像度が高い傾向があるため、実行時間のほとんどが
ピクセルで費やされていることがわかります。(1)→(4) とピクセルシェーダー
(Fragment Shader) の負荷を軽くするとその傾向は下がります。
やはり GPU のおおまかなグループ分けとしては下記の 3つでだいたい合っている
ように思います。
低速 ↑ Group 1 | Adreno 200 | Group 2 | Adreno 205 / PowerVR SGX 535,540 / ULP GeForce(Tegra 250) ↓ Group 3 | Adreno 220 / PowerVR SGX 543MP2 / Mali-400MP 高速
関連エントリ
・OpenGL ES 2.0 Mobile GPU の速度比較 (dual core世代) 更新
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
GPU の速度をもう少し詳しく調べてみました。
(※ 2011/10/12更新 表のデータを追加しました)
それぞれ機種ごとに解像度が違うので、フレームレート(fps)での比較が
できないことに注意してください。
頂点よりもピクセル負荷の方が高いため、秒間の描画ピクセル数に変換しました。
pix/sec の数値を比べてください。
あくまで自作プログラム+自前シーンでの比較なので参考程度にお願いします。
●補足事項など
ARMv7 Cortex-A9 dual core (or Scorpion dual core) 相当の CPU
搭載機のみピックアップしています。CPU の動作クロックはそれぞれ異なります。
Android は OS2.2 ターゲットで NDK + OpenGL ES 2.0 を使っています。
armeabi-v7a の NEON 無しです。
背景込ですべてピクセル単位のライティングを行なっています。
シェーダーに動的分岐はありません。
Tegra2 は depth_texture が使えないため shadow map で同一条件の
比較ができません。(1) では texture_half_float を使っており他の GPU より
負荷が高くなります。
Tegra2 は 16bit depth しか選択することができません。
逆に Mali-400MP 等は 24bit depth + 8bit stencil しか選択できません。
543MP2 はプラットフォーム(OS) が異なりますが、完全に同一コード+
同一シェーダーで走らせています。ただし完全に同一状態とは言い切れない
ので、実際の数値はもう少し変動するかもしれません。
テクスチャはできる限り GPU 専用の圧縮フォーマットに変換しています。
DXT(S3TC), PVR, ATC, ETC1 の 4フォーマット対応です。
(3) で Mali-400MP の pix/sec が算出不可能なのは 60fps の上限に張り付いて
しまっているからです。
ポリゴンの重なりが多少あるので画面サイズから求めた pix/sec は厳密な値では
ありません。が、TBDR の PowerVR のようにポリゴンの重なりで Shader が無駄に
走らないことを特徴としている GPU もあるためそのまま比べます。
●テスト結果について
描画面積で速度が決まっており、ボトルネックは完全にピクセル負荷
(Fragment Shader) となっています。
(1), (2) などシェーダーが複雑になるほどテクスチャサイズの影響が無くなる
ため、純粋に Fragment Shader が複雑すぎるようです。
PowerVR, Tegra2 など precision 宣言が有効な GPU ほど速度が出ていない
のでシェーダー最適化が不十分で能力を発揮できていない可能性があります。
PVR SGX 543MP は (1) を見ると低速に見えますが、Fragment Shader の
複雑さが下がるほど急激に速度が上がっています。
(3) では上位 GPU にほぼ匹敵していることがわかります。
(4) では逆転するかもしれません。
最適化が足りないか、または実行命令ステップ数の影響を受けやすい GPU のようです。
Mobile GPU ではこの面積で (1),(2) のような複雑なシェーダーを走らせる
ことが想定されていなかったのかもしれません。
それでも Mali, Adreno 220 は意外なほどよく動いています。
Tegra2 はあまり良い結果が出ていませんが、1年以上前から製品に載っている
プロセッサなので、GPU 自体は一世代前のグループに属するのだと考えられます。
年内に出る Tegra3 と比べるべきかもしれません。
ゲームで互換性を考えるとおそらく (3)~(4) の範囲で作ることになるかと思います。
しかしながら Mali-400MP や Adreno 220 など新しい世代の GPU は
複雑なシェーダーでも非常によく動いています。
Mobile のゲームも、もう一段階上の表現が十分可能になってきているといえます。
これまでの結果から大体の GPU 速度のグループ分けは下記のとおりです。
※以下 2011/10/12 22:00 追記
iOS 時の計測方法に問題があったため表の数値を変更しました。
PowerVR SGX 543MP2 の数値が大きく増えています。
さらに PVR 向けに shader 最適化の余地があったため修正しました。
その結果、予想通りシェーダー負荷が軽くなるほど SGX543MP2 の数値は
高くなっており (3) で Adreno 220 を超えています。
Group 3 世代の性能を持っているといえます。
表 (2),(3),(4) のテスト結果も追加しました。
関連エントリ
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
(1) light 3 + shadow map (ambient + directional x2 + point) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 38.96 480x800 15.0M 565 24 8 Exynos 4210 Mali-400MP A2.3 38.96 480x800 15.0M 8888 24 8 Exynos 4210 Adreno 220 A2.3 27.50 540x960 14.3M 565 16 0 MSM8660 Adreno 220 A2.3 25.00 540x960 13.0M 8888 24 8 MSM8660 SGX 543MP2 i4.3 11.83 768x1024 9.3M 8888 24 8 A5 (2011/10/12修正) ULP GeForce A2.2 8.00 600x1024 4.9M 565 16 0 Tegra 250 ULP GeForce A2.2 8.00 600x1024 4.9M 8888 16 8 Tegra 250 ULP GeForce A3.1 5.80 800x1232 5.7M 565 16 0 Tegra 250 ULP GeForce A3.1 5.65 800x1232 5.6M 8888 16 8 Tegra 250 (2) light 3 (ambient + directional x2 + point) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 42.30 480x800 16.2M 8888 24 8 Exynos 4210 Adreno 220 A2.3 36.27 540x960 18.8M 8888 24 8 MSM8660 Adreno 220 A2.3 32.50 540x960 16.8M 8888 24 8 MSM8660 SGX 543MP2 i4.3 15.27 768x1024 12.0M 8888 24 8 A5 (2011/10/12修正) ULP GeForce A2.2 9.50 600x1024 5.8M 565 16 0 Tegra 250 ULP GeForce A3.1 5.90 800x1232 5.8M 565 16 0 Tegra 250 ULP GeForce A3.1 5.74 800x1232 5.7M 8888 16 8 Tegra 250 (3) light 1 (ambient + directional) GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 59.95 480x800 算出不可 8888 24 8 Exynos 4210 Adreno 220 A2.3 55.36 540x960 28.7M 565 16 0 MSM8660 Adreno 220 A2.3 48.20 540x960 25.0M 8888 24 8 MSM8660 SGX 543MP2 i4.3 45.49 768x1024 35.8M 8888 24 8 A5 (2011/10/12修正) ULP GeForce A2.2 17.10 600x1024 10.5M 565 16 0 Tegra 250 ULP GeForce A3.1 13.00 800x1232 12.8M 565 16 0 Tegra 250 ULP GeForce A3.1 12.10 800x1232 11.9M 8888 16 8 Tegra 250 (4) light 0 GPU OS fps display pix/sec framebuffer --------------------------------------------------------------------- Mali-400MP A2.3 59.94 480x800 算出不可 8888 24 8 Exynos 4210 Adreno 220 A2.3 60.00 540x960 算出不可 565 16 0 MSM8660 Adreno 220 A2.3 60.00 540x960 算出不可 8888 24 8 MSM8660 SGX 543MP2 i4.3 60.00 768x1024 算出不可 8888 24 8 A5 (2011/10/12修正) ULP GeForce A3.1 46.85 800x1232 46.2M 565 16 0 Tegra 250 ULP GeForce A3.1 34.35 800x1232 33.9M 8888 16 8 Tegra 250 OS = A:Android, i:iOS framebuffer = color depth stencil
(※ 2011/10/12更新 表のデータを追加しました)
それぞれ機種ごとに解像度が違うので、フレームレート(fps)での比較が
できないことに注意してください。
頂点よりもピクセル負荷の方が高いため、秒間の描画ピクセル数に変換しました。
pix/sec の数値を比べてください。
あくまで自作プログラム+自前シーンでの比較なので参考程度にお願いします。
●補足事項など
ARMv7 Cortex-A9 dual core (or Scorpion dual core) 相当の CPU
搭載機のみピックアップしています。CPU の動作クロックはそれぞれ異なります。
Android は OS2.2 ターゲットで NDK + OpenGL ES 2.0 を使っています。
armeabi-v7a の NEON 無しです。
背景込ですべてピクセル単位のライティングを行なっています。
シェーダーに動的分岐はありません。
Tegra2 は depth_texture が使えないため shadow map で同一条件の
比較ができません。(1) では texture_half_float を使っており他の GPU より
負荷が高くなります。
Tegra2 は 16bit depth しか選択することができません。
逆に Mali-400MP 等は 24bit depth + 8bit stencil しか選択できません。
543MP2 はプラットフォーム(OS) が異なりますが、完全に同一コード+
同一シェーダーで走らせています。ただし完全に同一状態とは言い切れない
ので、実際の数値はもう少し変動するかもしれません。
テクスチャはできる限り GPU 専用の圧縮フォーマットに変換しています。
DXT(S3TC), PVR, ATC, ETC1 の 4フォーマット対応です。
(3) で Mali-400MP の pix/sec が算出不可能なのは 60fps の上限に張り付いて
しまっているからです。
ポリゴンの重なりが多少あるので画面サイズから求めた pix/sec は厳密な値では
ありません。が、TBDR の PowerVR のようにポリゴンの重なりで Shader が無駄に
走らないことを特徴としている GPU もあるためそのまま比べます。
●テスト結果について
描画面積で速度が決まっており、ボトルネックは完全にピクセル負荷
(Fragment Shader) となっています。
(1), (2) などシェーダーが複雑になるほどテクスチャサイズの影響が無くなる
ため、純粋に Fragment Shader が複雑すぎるようです。
PowerVR, Tegra2 など precision 宣言が有効な GPU ほど速度が出ていない
のでシェーダー最適化が不十分で能力を発揮できていない可能性があります。
PVR SGX 543MP は (1) を見ると低速に見えますが、Fragment Shader の
複雑さが下がるほど急激に速度が上がっています。
(3) では上位 GPU にほぼ匹敵していることがわかります。
(4) では逆転するかもしれません。
最適化が足りないか、または実行命令ステップ数の影響を受けやすい GPU のようです。
Mobile GPU ではこの面積で (1),(2) のような複雑なシェーダーを走らせる
ことが想定されていなかったのかもしれません。
それでも Mali, Adreno 220 は意外なほどよく動いています。
Tegra2 はあまり良い結果が出ていませんが、1年以上前から製品に載っている
プロセッサなので、GPU 自体は一世代前のグループに属するのだと考えられます。
年内に出る Tegra3 と比べるべきかもしれません。
ゲームで互換性を考えるとおそらく (3)~(4) の範囲で作ることになるかと思います。
しかしながら Mali-400MP や Adreno 220 など新しい世代の GPU は
複雑なシェーダーでも非常によく動いています。
Mobile のゲームも、もう一段階上の表現が十分可能になってきているといえます。
これまでの結果から大体の GPU 速度のグループ分けは下記のとおりです。
Group 1 | Adreno 200 Group 2 | Adreno 205 / PowerVR SGX 535,540 / Tegra 250 Group 3 | Adreno 220 / PowerVR SGX 543MP2 / Mali-400MP
※以下 2011/10/12 22:00 追記
iOS 時の計測方法に問題があったため表の数値を変更しました。
PowerVR SGX 543MP2 の数値が大きく増えています。
さらに PVR 向けに shader 最適化の余地があったため修正しました。
その結果、予想通りシェーダー負荷が軽くなるほど SGX543MP2 の数値は
高くなっており (3) で Adreno 220 を超えています。
Group 3 世代の性能を持っているといえます。
表 (2),(3),(4) のテスト結果も追加しました。
関連エントリ
・Android HTC EVO 3D GPU Adreno 220 の速度
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
2011/10/09
Android HTC EVO 3D GPU Adreno 220 の速度
HTC EVO 3D の 3D 描画能力のテスト。
第三世代の Snapdragon で、Adreno 220 を搭載しています。
以前の比較とはシェーダーが多少違います。
背景+複数キャラクタ+ライティング+Shadow map あり。
画面サイズが違うので単純には比較できませんが、秒間のピクセル数に
変換しても Mali-400MP には及びませんでした。
ただし Adreno は mobile GPU の中でも描画機能が非常に充実しており
ピクセルの演算精度も高くなっています。
第二世代の Adreno 205 (Snapdragon MSM8255 1GHz) 比では 2倍以上高速
なので十分良い数値と言えます。
以下は分岐を伴う、より複雑なライティングのシェーダーでのテスト。
下記ページにも追加しています。
・OpenGL ES 2.0 Mobile GPU 比較
・Mobile GPU Extension
関連エントリ
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)
第三世代の Snapdragon で、Adreno 220 を搭載しています。
以前の比較とはシェーダーが多少違います。
Mali-400MP 800×480 : 56fps (20.5Mpix/sec) Exynos 4210 S5PC210 1.2GHz Adreno 220 960×540 : 39fps (19.4Mpix/sec) Snapdragon MSM8660 1.2GHz
背景+複数キャラクタ+ライティング+Shadow map あり。
画面サイズが違うので単純には比較できませんが、秒間のピクセル数に
変換しても Mali-400MP には及びませんでした。
ただし Adreno は mobile GPU の中でも描画機能が非常に充実しており
ピクセルの演算精度も高くなっています。
第二世代の Adreno 205 (Snapdragon MSM8255 1GHz) 比では 2倍以上高速
なので十分良い数値と言えます。
以下は分岐を伴う、より複雑なライティングのシェーダーでのテスト。
Mali-400MP 800×480 : 19.6fps (7.2Mpix/sec) Adreno 220 960×540 : 13.7fps (6.8Mpix/sec)
下記ページにも追加しています。
・OpenGL ES 2.0 Mobile GPU 比較
・Mobile GPU Extension
関連エントリ
・OpenGL ES 2.0 shader の演算精度
・Android Galaxy S2 ARM Mali-400 MP は速い (2)