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)