2013/04/09
Nexus 10 CPU Cortex-A15 の速度
前回は浮動小数点演算のみでした。
Cortex-A15 で他のテストも走らせてみました。
・CPU benchmark
前回の浮動小数点演算では Cortex-A15 が最も良い結果となりました。
単体のピーク性能は Swift/Krait と同一ですが、
64bit 2 pipe のおかげか演算効率が高くなっている印象でした。
今回のテストには NEON や浮動小数点演算は含まれていません。
この場合同一クロック時の実行性能はだいたい Swift に並ぶようです。
A6X よりも Exynos 5 Dual の方が動作クロックが高いために、
リストの中では Nexus 10 が最も良い成績となっています。
Krait は唯一の 4 core なので絶対的な速度では優っていますが
単体ではあまり伸びていません。
浮動小数点演算では成績が良かったのですが、こちらのテストでは
他の CPU に差を付けられている形となっています。
そのうち Tegra4/Exynos 5 Octa など Cortex-A15 の Quad core が出るので
システム全体のパフォーマンスとしてかなり良い成績となりそうです。
Atom では比較にならないので、Core i はともかく他の CPU と比べたくなるのも
わかる気がします。
関連エントリ
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・benchmark 関連
Cortex-A15 で他のテストも走らせてみました。
・CPU benchmark
前回の浮動小数点演算では Cortex-A15 が最も良い結果となりました。
単体のピーク性能は Swift/Krait と同一ですが、
64bit 2 pipe のおかげか演算効率が高くなっている印象でした。
time(sec) MB/sec MBPS/GHz ------------------------------------------------------------- Exynos 5D Cortex-A15 1.7GHz x2 1.49 72.61 42.71 A6X Swift 1.4GHz? x2 1.75 61.82 44.16? APQ8064 Krait 1.5GHz x4 2.28 47.64 31.82 single thread の core 単体の比較です。
今回のテストには NEON や浮動小数点演算は含まれていません。
この場合同一クロック時の実行性能はだいたい Swift に並ぶようです。
A6X よりも Exynos 5 Dual の方が動作クロックが高いために、
リストの中では Nexus 10 が最も良い成績となっています。
Krait は唯一の 4 core なので絶対的な速度では優っていますが
単体ではあまり伸びていません。
浮動小数点演算では成績が良かったのですが、こちらのテストでは
他の CPU に差を付けられている形となっています。
そのうち Tegra4/Exynos 5 Octa など Cortex-A15 の Quad core が出るので
システム全体のパフォーマンスとしてかなり良い成績となりそうです。
Atom では比較にならないので、Core i はともかく他の CPU と比べたくなるのも
わかる気がします。
関連エントリ
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・benchmark 関連
2013/04/08
Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
Nexus10 を入手したので ARMv7A の新しい CPU core 3種類が揃いました。
Apple Swift, Qualcomm Krait, ARM Cortex-A15 を比べてみます。
動作クロックが一番高いせいもありますが、
Cortex-A15 の動作は Swift よりもさらに高速でした。
テスト項目の詳細は下記参照 (a:~z:)
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
iPad4/EVO 3D/Butterfly は計測しなおしたため以前よりも数値が上がっています。
a:~d: を見ると 1.7GHz の Cortex-A15 は Swift の倍近い数値となっています。
命令単体でも効率が上がっており、Krait と比べても 64bit D (float2) 命令は
クロック差以上の速度となっています。
64bit D (float2) と 128bit Q (float4) に差があることから、おそらく
Cortex-A15 は 64bit 単位の ALU が 2 pipe 存在しているのではないでしょうか。
128bti Q (float4) 時の速度は Swift/Krait と大きな違いがないので
演算能力のピークレートは自体は Swift/Krait と同一でしょう。
D, Q の差がない Scorpion/Swift/Krait は 128bit 単位だと考えられます。
(1)~(3) Cortex-A9/Scorpion の a:~d: では AQ/AD と BQ/BD の結果に
大きな違いが生じています。
これが CPU 世代間の違いとなっており、(4)~(7) の Swift/Krait/Cortex-A15
では命令順に依存せずに一定の効率で実行できている事がわかります。
以前も書いたとおり Swift はスカラーの積和命令だけ遅くなっています。
NEON のベクターでは積和でも特に速度が落ちていないため、
何らかの構造的な理由によるものと思われます。
同じように Krait にも苦手なパターンがあります。
ARM では VFPv4 以降 FMA (Fused Multiply add) 命令が追加されています。
Krait は vfma (FMA) よりも従来の vmla 命令が倍近く遅くなっています。
中間丸め込みを行うために vmul + vadd に展開されている可能性があります。
●Krait 最適化
a:~d: の演算は vmla を使っていますが、この命令は Krait では低速となっています。
vfma に置き換えることで高速化できる可能性があるので試してみました。
vfma は vmla と違い vector * scalar ができないので、
単純に置換するだけでは動きません。
SSE と同じようにデータのコピーが必要となるので vdup を挿入しています。
A: はかなり遅いですが、B: は効果がありました。
このケースでは Krait が Cortex-A15 を超えています。
予想通り Swift , Cortex-A15 にとっては逆効果で、vdup が増えた分だけ遅くなりました。
なお vmla と vfma は丸め込みのタイミングが異なるので厳密には結果は一致しません。
vfma の方が誤差が少ないのですが、Cのコードで普通に書くと fmacs になるので
検証コードで見事に assert に引っかかりました。
関連エントリ
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
Apple Swift, Qualcomm Krait, ARM Cortex-A15 を比べてみます。
動作クロックが一番高いせいもありますが、
Cortex-A15 の動作は Swift よりもさらに高速でした。
(1) (2) (3) (4) (5) (6) (7) iPad3 Nexus7 EVO 3D iPhone5 iPad4 HTL21 Nexus10 A5X Tegra3 MSM8660 A6 A6X APQ8064 Exynos5D ARM A9 ARM A9 Scorpion Swift Swift Krait ARM A15 1.0GHz 1.2GHz 1.2GHz 1.3GHz? 1.4GHz? 1.5GHz 1.7GHz VFPv3 VFPv3 VFPv3 VFPv4 VFPv4 VFPv4 VFPv4 ---------------------------------------------------------------------- a:m44 vmla_AQ 4.784 3.959 2.859 1.293 1.204 1.337 0.619 b:m44 vmla_BQ 2.408 2.002 1.136 1.359 1.266 0.931 0.569 c:m44 vmla_AD 4.781 3.980 3.053 1.669 1.554 1.889 0.557 d:m44 vmla_BD 2.406 2.003 1.434 1.329 1.238 1.532 0.568 A:m44 vfma_AQ ----- ----- ----- 1.632 1.519 1.882 0.746 B:m44 vfma_BQ ----- ----- ----- 1.594 1.484 0.695 0.840 e:fadds A 4.010 3.343 3.383 3.090 2.878 2.774 2.383 f:fmuls A 4.010 3.337 3.383 3.167 2.953 2.747 2.369 g:fmacs A 4.012 3.337 3.379 6.180 5.757 5.574 2.956 h:vfma.f32 A ----- ----- ----- 6.180 5.756 2.747 2.957 i:vadd.f32 DA 4.111 3.426 3.377 3.091 2.877 2.762 1.183 j:vmul.f32 DA 4.110 3.421 3.383 3.168 2.950 2.746 1.478 k:vmla.f32 DA 4.512 3.792 3.380 3.166 2.951 5.604 1.480 l:vadd.f32 QA 8.023 6.688 3.377 3.090 2.878 2.801 2.365 m:vmul.f32 QA 8.022 6.681 3.384 3.166 2.952 2.761 2.364 n:vmla.f32 QA 8.025 6.681 3.380 3.167 2.950 5.606 2.367 o:vfma.f32 DA ----- ----- ----- 3.167 2.494 2.833 1.479 p:fadds B 4.014 3.347 5.917 6.181 5.756 3.467 2.956 q:fmuls B 5.013 4.195 5.917 6.180 5.756 3.556 3.558 r:fmacs B 8.023 6.688 8.451 12.361 11.514 6.298 5.912 s:vfma.f32 B ----- ----- ----- 12.363 11.513 3.430 5.910 t:vadd.f32 DB 4.113 3.421 5.916 3.090 2.881 3.529 2.958 u:vmul.f32 DB 4.118 3.422 5.073 3.169 2.949 3.447 2.364 v:vmla.f32 DB 9.027 7.561 8.451 6.180 5.755 6.293 4.728 w:vadd.f32 QB 8.021 6.705 5.916 3.090 2.879 3.457 2.961 x:vmul.f32 QB 8.029 6.683 5.074 3.167 2.950 3.428 2.363 y:vmla.f32 QB 9.026 7.532 8.457 6.179 5.759 6.372 4.729 z:vfma.f32 DB ----- ----- ----- 6.181 5.755 3.437 4.730 ---------------------------------------------------------------------- ↑数値は実行時間(秒) 数値が小さい方が速い (1)=Apple iPad 3 A5X Cortex-A9 x2 1.0GHz VFPv3 i6.1 (2)=ASUS Nexus 7 Tegra 3 Cortex-A9 x4 1.2GHz VFPv3 A4.2 (3)=HTC EVO 3D ISW12HT MSM8660 Scorpion x2 1.2GHz VFPv3 A4.0 (4)=Apple iPhone 5 A6 Swift x2 1.3GHz? VFPv4 i6.1 (5)=Apple iPad 4 A6X Swift x2 1.4GHz? VFPv4 i6.1 (6)=HTC J butterfly HTL21 APQ8064 Krait x4 1.5GHz VFPv4 A4.1 (7)=Samsung Nexus 10 Exynos5D Cortex-A15 x2 1.7GHz VFPv4 A4.2
テスト項目の詳細は下記参照 (a:~z:)
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
iPad4/EVO 3D/Butterfly は計測しなおしたため以前よりも数値が上がっています。
a:~d: を見ると 1.7GHz の Cortex-A15 は Swift の倍近い数値となっています。
命令単体でも効率が上がっており、Krait と比べても 64bit D (float2) 命令は
クロック差以上の速度となっています。
64bit D (float2) と 128bit Q (float4) に差があることから、おそらく
Cortex-A15 は 64bit 単位の ALU が 2 pipe 存在しているのではないでしょうか。
128bti Q (float4) 時の速度は Swift/Krait と大きな違いがないので
演算能力のピークレートは自体は Swift/Krait と同一でしょう。
D, Q の差がない Scorpion/Swift/Krait は 128bit 単位だと考えられます。
(1)~(3) Cortex-A9/Scorpion の a:~d: では AQ/AD と BQ/BD の結果に
大きな違いが生じています。
これが CPU 世代間の違いとなっており、(4)~(7) の Swift/Krait/Cortex-A15
では命令順に依存せずに一定の効率で実行できている事がわかります。
以前も書いたとおり Swift はスカラーの積和命令だけ遅くなっています。
NEON のベクターでは積和でも特に速度が落ちていないため、
何らかの構造的な理由によるものと思われます。
同じように Krait にも苦手なパターンがあります。
ARM では VFPv4 以降 FMA (Fused Multiply add) 命令が追加されています。
Krait は vfma (FMA) よりも従来の vmla 命令が倍近く遅くなっています。
中間丸め込みを行うために vmul + vadd に展開されている可能性があります。
●Krait 最適化
a:~d: の演算は vmla を使っていますが、この命令は Krait では低速となっています。
vfma に置き換えることで高速化できる可能性があるので試してみました。
// A: mat44 neon_AQ の vfma 化 vmul.f32 q8, q0, d8[0] vlma.f32 q8, q1, d8[1] vlma.f32 q8, q2, d9[0] vlma.f32 q8, q3, d9[1] : ↓ vmul.f32 q8, q0, d8[0] vdup.f32 q9, d8[1] vfma.f32 q8, q1, q9 vdup.f32 q10, d9[0] vfma.f32 q8, q2, q10 vdup.f32 q11, d9[1] vfma.f32 q8, q3, q11 :
// B: mat44 neon_AQ の vfma 化 vmul.f32 q8, q0, d8[0] vmul.f32 q9, q0, d10[0] vmul.f32 q10, q0, d12[0] vmul.f32 q11, q0, d14[0] vmla.f32 q8, q1, d8[1] vmla.f32 q9, q1, d10[1] vmla.f32 q10, q1, d12[1] vmla.f32 q11, q1, d14[1] : ↓ vmul.f32 q8, q0, d8[0] vmul.f32 q9, q0, d10[0] vmul.f32 q10, q0, d12[0] vmul.f32 q11, q0, d14[0] vdup.32 q12, d8[1] vdup.32 q13, d10[1] vdup.32 q14, d12[1] vdup.32 q15, d14[1] vfma.f32 q8, q1, q12 vfma.f32 q9, q1, q13 vfma.f32 q10, q1, q14 vfma.f32 q11, q1, q15 :
vfma は vmla と違い vector * scalar ができないので、
単純に置換するだけでは動きません。
SSE と同じようにデータのコピーが必要となるので vdup を挿入しています。
ARM A9 ARM A9 Scorpion Swift Swift Krait ARM A15 ---------------------------------------------------------------------- a:m44 vmla_AQ 4.784 3.959 2.859 1.293 1.204 1.337 0.619 b:m44 vmla_BQ 2.408 2.002 1.136 1.359 1.266 0.931 0.569 ↓ A:m44 vfma_AQ ----- ----- ----- 1.632 1.519 1.882 0.746 B:m44 vfma_BQ ----- ----- ----- 1.594 1.484 0.695 0.840
A: はかなり遅いですが、B: は効果がありました。
このケースでは Krait が Cortex-A15 を超えています。
予想通り Swift , Cortex-A15 にとっては逆効果で、vdup が増えた分だけ遅くなりました。
なお vmla と vfma は丸め込みのタイミングが異なるので厳密には結果は一致しません。
vfma の方が誤差が少ないのですが、Cのコードで普通に書くと fmacs になるので
検証コードで見事に assert に引っかかりました。
関連エントリ
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
2013/04/07
Nexus 10 GPU Mali-T604
Nexus 10 のデータを追加しました。
Nexus 10 の Exynos 5 Dual は Krait + Adreno 320 の APQ8064 と同じように、
CPU (Cortex-A15)、GPU (ARM Mali-T604) ともに新しい世代の core が用いられています。
・Mobile GPU の OpenGL ES Extension
下記 GPU 機能の比較表も更新しました。
・Mobile GPU の機能比較表
Mali-T604 は OpenGL ES 3.0 世代の GPU ですが、今のところ使えるのは
Adreno 320 同様 OpenGL ES 2.0 API の範囲に限られます。
Adreno の場合 OpenGL ES 2.0 API でも ETC2/EAC Texture など、
部分的に OpenGL ES 3.0 の機能が取り込まれていました。
Mali-T604 では特に OpenGL ES 3.0 を先取りしているような部分はないようです。
新しい core なので動作速度も十分高速でシェーダーパフォーマンスも良好です。
前世代の Mali-400MP では TBR ながら discrete 構成で頂点性能に難がありました。
Mali-T604 は Unified Shader となったため総合的に性能が上がっています。
構造の違いは機能面からもわかります。
例えば Shader Constant (Uniform) 数、Vertex Texture mapping 、
Pixel Format/Vertex Format、Shader の演算精度など、
さまざまな面で Vertex と Pixel (Fragment) の機能差が無くなっています。
Tegra2/3, Mali-400MP の Fragment Shader は Uniform 数に 1024 と極端に
大きな値を返しています。
おそらく古い GeForce と同じように、Pixel (Fragmen) の場合だけ
Shader Program のバイナリを直接書き換える仕組みで、
事実上制限が無いのだと思われます。
T604 は Vertex / Fragment との差がなく他の GPU に近い数値になりました。
これまで Unified Shader の GPU は大きく分けて、highp 固定精度と
highp/mediump/lowp 可変精度の 2種類ありました。
Mali-T604 は PowerVR のように precision 宣言が有効ですが、
highp と mediump の 2種類しかありません。
mediump 固定で lowp が無かった Mali-400MP に似ています。
highp に対応しているにも関わらず GL_OES_fragment_precision_high が
無いので、Mali-400MP と同じように Fragment Shader (PixelShader) では
mediump を使って欲しいのかもしれません。
ただし下記の記事にも書いたように glGetShaderPrecisionFormat() の返す値は
実際の動作と異なっている場合があります。まだ実測していません。
・OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
・Mobile GPU の比較 Precision
●全然関係ないシェーダーのはまり
GPU 機能とは関係なく、Nexus 10 の解像度の高さに自分のシェーダーが対応できて
いませんでした。
もともと浮動小数点の演算を利用して複数のデータを圧縮して格納していたのですが、
2560x1600 のスクリーン座標がオーバーフローしていることが原因でした。
やはり演算精度は実機できちんと測定しておいた方がよさそうです。
関連エントリ
・Qualcomm APQ8064 GPU Adreno 320 の速度
・OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
・GPU 速度に関連するエントリ
Nexus 10 の Exynos 5 Dual は Krait + Adreno 320 の APQ8064 と同じように、
CPU (Cortex-A15)、GPU (ARM Mali-T604) ともに新しい世代の core が用いられています。
・Mobile GPU の OpenGL ES Extension
下記 GPU 機能の比較表も更新しました。
・Mobile GPU の機能比較表
Mali-T604 は OpenGL ES 3.0 世代の GPU ですが、今のところ使えるのは
Adreno 320 同様 OpenGL ES 2.0 API の範囲に限られます。
Adreno の場合 OpenGL ES 2.0 API でも ETC2/EAC Texture など、
部分的に OpenGL ES 3.0 の機能が取り込まれていました。
Mali-T604 では特に OpenGL ES 3.0 を先取りしているような部分はないようです。
新しい core なので動作速度も十分高速でシェーダーパフォーマンスも良好です。
前世代の Mali-400MP では TBR ながら discrete 構成で頂点性能に難がありました。
Mali-T604 は Unified Shader となったため総合的に性能が上がっています。
構造の違いは機能面からもわかります。
例えば Shader Constant (Uniform) 数、Vertex Texture mapping 、
Pixel Format/Vertex Format、Shader の演算精度など、
さまざまな面で Vertex と Pixel (Fragment) の機能差が無くなっています。
Uniform数 Vertex Fragment ---------------------------------------- Tegra2/3 256 1024 discrete Mali-400MP 128 1024 discrete Mali-T604 256 256 unified Adreno 251 221 unified PowerVR SGX 5 128 64 unified
Tegra2/3, Mali-400MP の Fragment Shader は Uniform 数に 1024 と極端に
大きな値を返しています。
おそらく古い GeForce と同じように、Pixel (Fragmen) の場合だけ
Shader Program のバイナリを直接書き換える仕組みで、
事実上制限が無いのだと思われます。
T604 は Vertex / Fragment との差がなく他の GPU に近い数値になりました。
これまで Unified Shader の GPU は大きく分けて、highp 固定精度と
highp/mediump/lowp 可変精度の 2種類ありました。
Unified Shader GPU Precision --------------------------------------------------------- Adreno 200/300 highp のみ (highp 固定) Vivante GC highp のみ (highp 固定) PowerVR SGX 5 highp/mediump/lowp (3種類の可変) Mali-T604 highp/mediump (lowp 無し)
Mali-T604 は PowerVR のように precision 宣言が有効ですが、
highp と mediump の 2種類しかありません。
mediump 固定で lowp が無かった Mali-400MP に似ています。
highp に対応しているにも関わらず GL_OES_fragment_precision_high が
無いので、Mali-400MP と同じように Fragment Shader (PixelShader) では
mediump を使って欲しいのかもしれません。
ただし下記の記事にも書いたように glGetShaderPrecisionFormat() の返す値は
実際の動作と異なっている場合があります。まだ実測していません。
・OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
・Mobile GPU の比較 Precision
●全然関係ないシェーダーのはまり
GPU 機能とは関係なく、Nexus 10 の解像度の高さに自分のシェーダーが対応できて
いませんでした。
もともと浮動小数点の演算を利用して複数のデータを圧縮して格納していたのですが、
2560x1600 のスクリーン座標がオーバーフローしていることが原因でした。
やはり演算精度は実機できちんと測定しておいた方がよさそうです。
関連エントリ
・Qualcomm APQ8064 GPU Adreno 320 の速度
・OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
・GPU 速度に関連するエントリ
2013/04/05
3DMark Android 版の結果から
Android 版 3DMark アプリの DEVICE CHANNEL から各機種の結果を見ることができます。
非常に興味深く、見ていて面白いデータです。
まとめてみました。
一番右端の列は CPU と GPU どちらのスコアが高いかを示しています。
全体的に Adreno22x/320 の数値が高い傾向にあります。
右側の列を見てわかるように、CPU よりも GPU のスコアが高いのは
Qualcomm (Adreno) のプロセッサだけです。
Exynos/OMAP/Tegra 等、Quallcom 以外はすべて CPU の方が高くなっており、
その差も 2倍程度まで広がっています。
なぜこのような結果になっているのか考えてみます。
●CPU
CPU は 2グループあります。
(A) Cortex-A9, Scorpion
(B) Cortex-A15, Krait
(B) は新しい世代の CPU core で、動作クロックの違いもありますが
実行効率そのものが向上しています。
例えば (A) が 2命令 deocde の Out-of-Order 実行だったのに対し、
(B) グループは 3命令に引き上げられています。
同一クロック、同コア数でも Krait, Cortex-A15 の方が高速です。
●Adreno
各社の SoC/GPU は多種多様で得意分野がはっきりしています。
Adreno は ATI の流れをくむモバイル向け GPU で、
最も Desktop 向け GPU に近い機能を持っています。
これは他の GPU にはない大きな特徴です。
例えば頂点テクスチャや Volume Texture (3D Texture) など、
Mobile 向け用途ではあまり必要とされない機能にもしっかり対応しています。
実際に各種 GPU 機能を比較した表は下記のとおりです。
・Mobile GPU の比較
Fragment Shader (PixelShder) の演算精度も fp32 の highp 固定で、
描画クオリティも Desktop GPU と同等です。
パフォーマンスを上げるために見た目を犠牲にする必要がありません。
その代わり初期の Adreno 20x/AMD Z430 では頂点キャッシュが無く、
Desktop GPU 同等の描画機能を有する反面、パフォーマンスが思ったように
伸びない傾向がありました。
この点は Adreno 22x 以降改良されており、描画プリミティブに依存せず
大きくスループットが上がっています。
複雑なシェーダーもかなり走るのですが、アプリケーションによっては
あまり速度が出ていないものが存在します。
あくまで想像にすぎませんが、Adreno は OpenGL ES 1.1 の固定パイプを
シミュレーションするのが苦手なのかもしれません。(未確認です)
Shader を使って描画を行う場合、Adreno はモバイルに特化した最適化を
極端に行う必要がなく、シェーダーを移植しても速度が落ちにくい傾向を持っています。
このあたりがベンチマークに有利に働いたのではないでしょうか。
まとめると
・highp 固定なので、演算精度を落とさなくても速度が変わらない。
・モバイル向けに mediump/lowp 化するなど特別な最適化を行う必要がない。
・PC の描画クオリティから落とす必要がない。
・Uniform 数, Sampler 数も多く Extension も豊富で互換性を取りやすい。
・Unified Shader なので、Vertex 負荷、Pixel 負荷どちらにも対応しやすい。
また Adreno 320 は OpenGL ES 3.0 に対応した新しい設計の GPU core なので
世代的にもかなり高性能です。
使われている API が ES 2.0 なので、まだ眠っている HW 機能があります。
今後さらにスコアが伸びるものと考えられます。
・Mobile GPU bench mark
●Mali-400MP4
GPU の「Core 数」は GPU によって数え方が異なっており単位がばらばらです。
端末のスペックに GPU の core 数が書かれている場合がありますが、
性能の指標になるのはあくまで同一 GPU 同士を比べる場合だけです。
PowerVR SGX の MP1~4 は CPU とほぼ同じ概念で、
GPU そのものが複数存在し並列に動作します。
Tegra の core 数は GPU 内の演算ユニットの数を表しています。
G80以降 の Desktop GPU に合わせたもので、Unified Shader の
Stream Processor 相当で何個分なのかを表しています。
Discrete ですが Vertex, Fragment 両方カウントされます。
Mali-400 は下記のページの図 (Mali-400 MP Image) にあるように
Fragment Processor の UNIT 数を選択可能で、MP1~MP4 と呼ばれています。
この数には Vertex Processor が含まれていません。
・ARM Mali-400 MP
Tegra2/3 でも 8→12 と core 数は増えていますが頂点 Unit 数は同一です。
もし仮に Mali-400MP 同様 Fragment Processor だけ数えるなら
Tegra2 の ULP GeForce(8) は Vertx 4 + Fragment 4 で MP1、
Tegra3 の ULP GeForce(12) は Vertex 4 + Fragment 8 で MP2 となるでしょう。
つまり Discrete Shader の GPU ではスペック表記上の core 数が増えても、
頂点性能が向上するとは限りません。
Galaxy S2 で Mali-400MP4 登場した時は非常に Pixel パフォーマンスが高く、
他の GPU と比べても良い性能でした。
ですがその後複雑な 3D シーンでは頂点性能がボトルネックになることが
わかっています。
上記のように MP4 でも頂点性能は増えておらず、
10~20万など比較的低いレベルで頭打ちになってしまうようです。
3DMark Ice Storm のポリゴン数はかなりハイポリゴンだと考えられるため、
Mali-400MP4 のパフォーマンスが振るわないのはそのためだと考えられます。
Pixel Shader は mediump なので、厳密には Desktop GPU より演算精度が落ちています。
ただし Tegra や PowerVR SGX のように、最適化で精度を削るほどシビアではありません。
頂点がボトルネックになるだけでピクセル側は mediump 固定なので、
あまり手を加える必要は無いようです。
Mali-T604 以降は Unified Shader なのでまた特性が異なっているはずです。
●Tegra2/3
Mali-400MP と同じ Discrete Shader ですが、特性は正反対です。
頂点に余裕がある代わりに Pixel が足りなくなります。
比較的ハイポリでシンプルなマテリアルの場合に良いパフォーマンスとなるようです。
Mali-400MP 同様 Pixel 精度は mediump までですが、複雑なシェーダーコードでは
lowp を併用して質よりも速度を優先する必要が生じます。
depth の解像度も他の GPU より落ちます。
他の GPU よりも対応 Extension が少なくなっており、ハードウエアの機能も大胆に削られてます。
例えば depth texture が使えないので、ShadowMap はカラーマップに
書き込む必要があります。
depth を圧縮しなければならないので、シェーダーにも追加の演算コードが必要です。
OpenGL ES 2.0 の仕様上 depth texture 対応は必須ではないのですが、
対応していない GPU が Tegra2/3 だけとなっています。
3DMark では比較的ハイポリでも Mali-400MP ほどスコアが落ち込むことはなくなっており、
GPU の能力として妥当な結果だと思います。
NVIDIA らしくない性能の GPU もおそらくこれが最後でしょう。
Tegra4 では機能面でも速度面でも大きく手が加えられており、
かなりスコアが伸びるものと考えられます。
●PowerVR SGX
以前の記事にも書いたように、PowerVR SGX 5xx は 2種類あります。
Android 端末では古い Series 5 (SGX540) が多いため、
GPU の性能的にもベンチマークのスコアがあまりよくないようです。
他にも考えられる原因はあります。
PowerVR SGX はどんな描画でもそつなくこなす傾向があります。
頂点が多いシーンでもピクセルが多いシーンでも柔軟に追従します。
使い方の自由度も高く、画質優先に振っても良いし、速度重視にもできるし、
用途によって使い分けられます。
その反面、決まった解法がなく状況に応じた判断を求められます。
例えば Uniform 数はパフォーマンスを考えるなら 128個以内、
移植性や使いやすさなら 256個使うなど。(過去記事の comment参照)
また Pixel に highp fp32 を使うことができるので、
Desktop GPU と同一の精度で描画することができます。
パフォーマンスがあまり上がらないので、速度を考えるなら
見た目を犠牲にしてでも mediump, lowp へと置き換えることになります。
他の GPU と違い TBDR なので、ALU の利用効率が全体のパフォーマンスに
与える影響が大きくなっています。
通常の GPU はラスタライザから PixelShader (Fragment Shader) が呼ばれるので、
パイプライン待ちのサイクルが存在します。
ラスタライザや depth test など、他のステージが詰まっているときは
Shader を削っても速度が大きく変化しません。
PowerVR SGX は Deffered Rendring なので、Pixel Shader が呼ばれるときは
ラスタライザ等他のステージが完了しています。
Shader の命令を削れば削るほど直接パフォーマンスに響いてくるので
最適化はシビアになりがちです。
ここが最も Adreno と違うポイントで、パフォーマンスを優先するならかなり
手を加える必要があります。高速化出来る余地が残っているともいえます。
なお見た目が変わるとベンチとしての正しい比較とは言えないかもしれないので、
3DMark は比較的高い演算精度でレンダリングしているのではないかと考えられます。
もしそうなら、Tegra/Mali とは違い PowerVR のスコアはまだ上がる余地が
残っていることになります。
iOS 版が出たら、どの程度 PowerVR SGX 向けに最適化されているのか
わかるのではないでしょうか。
・おそらく GPU 毎の Shader 最適化がそれほど強くないので、速度が落ちにくい Adreno が有利
・OpenGL ES 3.0 対応最新 GPU + 新 CPU と、いち早く世代交代した Qualcomm (Krait quad + Adreno 320) がやっぱり速い
関連エントリ
・3DMark Android Edition Ice Storm v1.1 の結果
・GPU 速度に関連するエントリ
非常に興味深く、見ていて面白いデータです。
まとめてみました。
SoC CPU core GPU Score CPU vs GPU ----------------------------------------------------------------- APQ8064 Krait x4 Adreno 320 8000-11000 CPU <= GPU* Exynos5D Cortex-A15 x2 Mali-T604 7800 *CPU > GPU MSM8960 Krait x2 Adreno 225 5000-6500 CPU <= GPU* MSM8x60 Scorpion x2 Adreno 220 3700-5000 CPU <= GPU* Tegra3 Cortex-A9 x4 ULP GeForce(12) 3000-4000 *CPU >> GPU K3V2 Cortex-A9 x4 Vivante GC4000 3400-3700 *CPU >> GPU OMAP4470 Cortex-A9 x2 PowerVR SGX544 3600 *CPU >> GPU Exynos4Q Cortex-A9 x4 Mali-400MP4 2500-3400 *CPU >> GPU Z2460 Atom x1 PowerVR SGX540 2400 *CPU >> GPU Exynos4D Cortex-A9 x2 Mali-400MP4 1600-2100 *CPU >> GPU OMAP44x0 Cortex-A9 x2 PowerVR SGX540 1300-3400 *CPU >> GPU MSM8x55 Scorpion x1 Adreno 205 1750 CPU < GPU* RK3066 Cortex-A9 x2 Mali-400MP4 1200-2800 *CPU >> GPU Tegra2 Cortex-A9 x2 ULP GeForce(8) 1400-2100 *CPU >> GPU ・Score の値が大きい方が速い ・数値は常に変動しているので現時点での目安としてみてください。
一番右端の列は CPU と GPU どちらのスコアが高いかを示しています。
全体的に Adreno22x/320 の数値が高い傾向にあります。
右側の列を見てわかるように、CPU よりも GPU のスコアが高いのは
Qualcomm (Adreno) のプロセッサだけです。
Exynos/OMAP/Tegra 等、Quallcom 以外はすべて CPU の方が高くなっており、
その差も 2倍程度まで広がっています。
なぜこのような結果になっているのか考えてみます。
●CPU
CPU は 2グループあります。
(A) Cortex-A9, Scorpion
(B) Cortex-A15, Krait
(B) は新しい世代の CPU core で、動作クロックの違いもありますが
実行効率そのものが向上しています。
例えば (A) が 2命令 deocde の Out-of-Order 実行だったのに対し、
(B) グループは 3命令に引き上げられています。
同一クロック、同コア数でも Krait, Cortex-A15 の方が高速です。
●Adreno
各社の SoC/GPU は多種多様で得意分野がはっきりしています。
Adreno は ATI の流れをくむモバイル向け GPU で、
最も Desktop 向け GPU に近い機能を持っています。
これは他の GPU にはない大きな特徴です。
例えば頂点テクスチャや Volume Texture (3D Texture) など、
Mobile 向け用途ではあまり必要とされない機能にもしっかり対応しています。
実際に各種 GPU 機能を比較した表は下記のとおりです。
・Mobile GPU の比較
Fragment Shader (PixelShder) の演算精度も fp32 の highp 固定で、
描画クオリティも Desktop GPU と同等です。
パフォーマンスを上げるために見た目を犠牲にする必要がありません。
その代わり初期の Adreno 20x/AMD Z430 では頂点キャッシュが無く、
Desktop GPU 同等の描画機能を有する反面、パフォーマンスが思ったように
伸びない傾向がありました。
この点は Adreno 22x 以降改良されており、描画プリミティブに依存せず
大きくスループットが上がっています。
複雑なシェーダーもかなり走るのですが、アプリケーションによっては
あまり速度が出ていないものが存在します。
あくまで想像にすぎませんが、Adreno は OpenGL ES 1.1 の固定パイプを
シミュレーションするのが苦手なのかもしれません。(未確認です)
Shader を使って描画を行う場合、Adreno はモバイルに特化した最適化を
極端に行う必要がなく、シェーダーを移植しても速度が落ちにくい傾向を持っています。
このあたりがベンチマークに有利に働いたのではないでしょうか。
まとめると
・highp 固定なので、演算精度を落とさなくても速度が変わらない。
・モバイル向けに mediump/lowp 化するなど特別な最適化を行う必要がない。
・PC の描画クオリティから落とす必要がない。
・Uniform 数, Sampler 数も多く Extension も豊富で互換性を取りやすい。
・Unified Shader なので、Vertex 負荷、Pixel 負荷どちらにも対応しやすい。
また Adreno 320 は OpenGL ES 3.0 に対応した新しい設計の GPU core なので
世代的にもかなり高性能です。
使われている API が ES 2.0 なので、まだ眠っている HW 機能があります。
今後さらにスコアが伸びるものと考えられます。
・Mobile GPU bench mark
●Mali-400MP4
GPU の「Core 数」は GPU によって数え方が異なっており単位がばらばらです。
端末のスペックに GPU の core 数が書かれている場合がありますが、
性能の指標になるのはあくまで同一 GPU 同士を比べる場合だけです。
PowerVR SGX の MP1~4 は CPU とほぼ同じ概念で、
GPU そのものが複数存在し並列に動作します。
Tegra の core 数は GPU 内の演算ユニットの数を表しています。
G80以降 の Desktop GPU に合わせたもので、Unified Shader の
Stream Processor 相当で何個分なのかを表しています。
Discrete ですが Vertex, Fragment 両方カウントされます。
Mali-400 は下記のページの図 (Mali-400 MP Image) にあるように
Fragment Processor の UNIT 数を選択可能で、MP1~MP4 と呼ばれています。
この数には Vertex Processor が含まれていません。
・ARM Mali-400 MP
Tegra2/3 でも 8→12 と core 数は増えていますが頂点 Unit 数は同一です。
もし仮に Mali-400MP 同様 Fragment Processor だけ数えるなら
Tegra2 の ULP GeForce(8) は Vertx 4 + Fragment 4 で MP1、
Tegra3 の ULP GeForce(12) は Vertex 4 + Fragment 8 で MP2 となるでしょう。
つまり Discrete Shader の GPU ではスペック表記上の core 数が増えても、
頂点性能が向上するとは限りません。
Galaxy S2 で Mali-400MP4 登場した時は非常に Pixel パフォーマンスが高く、
他の GPU と比べても良い性能でした。
ですがその後複雑な 3D シーンでは頂点性能がボトルネックになることが
わかっています。
上記のように MP4 でも頂点性能は増えておらず、
10~20万など比較的低いレベルで頭打ちになってしまうようです。
3DMark Ice Storm のポリゴン数はかなりハイポリゴンだと考えられるため、
Mali-400MP4 のパフォーマンスが振るわないのはそのためだと考えられます。
Pixel Shader は mediump なので、厳密には Desktop GPU より演算精度が落ちています。
ただし Tegra や PowerVR SGX のように、最適化で精度を削るほどシビアではありません。
頂点がボトルネックになるだけでピクセル側は mediump 固定なので、
あまり手を加える必要は無いようです。
Mali-T604 以降は Unified Shader なのでまた特性が異なっているはずです。
●Tegra2/3
Mali-400MP と同じ Discrete Shader ですが、特性は正反対です。
頂点に余裕がある代わりに Pixel が足りなくなります。
比較的ハイポリでシンプルなマテリアルの場合に良いパフォーマンスとなるようです。
Mali-400MP 同様 Pixel 精度は mediump までですが、複雑なシェーダーコードでは
lowp を併用して質よりも速度を優先する必要が生じます。
depth の解像度も他の GPU より落ちます。
他の GPU よりも対応 Extension が少なくなっており、ハードウエアの機能も大胆に削られてます。
例えば depth texture が使えないので、ShadowMap はカラーマップに
書き込む必要があります。
depth を圧縮しなければならないので、シェーダーにも追加の演算コードが必要です。
OpenGL ES 2.0 の仕様上 depth texture 対応は必須ではないのですが、
対応していない GPU が Tegra2/3 だけとなっています。
3DMark では比較的ハイポリでも Mali-400MP ほどスコアが落ち込むことはなくなっており、
GPU の能力として妥当な結果だと思います。
NVIDIA らしくない性能の GPU もおそらくこれが最後でしょう。
Tegra4 では機能面でも速度面でも大きく手が加えられており、
かなりスコアが伸びるものと考えられます。
●PowerVR SGX
以前の記事にも書いたように、PowerVR SGX 5xx は 2種類あります。
Android 端末では古い Series 5 (SGX540) が多いため、
GPU の性能的にもベンチマークのスコアがあまりよくないようです。
他にも考えられる原因はあります。
PowerVR SGX はどんな描画でもそつなくこなす傾向があります。
頂点が多いシーンでもピクセルが多いシーンでも柔軟に追従します。
使い方の自由度も高く、画質優先に振っても良いし、速度重視にもできるし、
用途によって使い分けられます。
その反面、決まった解法がなく状況に応じた判断を求められます。
例えば Uniform 数はパフォーマンスを考えるなら 128個以内、
移植性や使いやすさなら 256個使うなど。(過去記事の comment参照)
また Pixel に highp fp32 を使うことができるので、
Desktop GPU と同一の精度で描画することができます。
パフォーマンスがあまり上がらないので、速度を考えるなら
見た目を犠牲にしてでも mediump, lowp へと置き換えることになります。
他の GPU と違い TBDR なので、ALU の利用効率が全体のパフォーマンスに
与える影響が大きくなっています。
通常の GPU はラスタライザから PixelShader (Fragment Shader) が呼ばれるので、
パイプライン待ちのサイクルが存在します。
ラスタライザや depth test など、他のステージが詰まっているときは
Shader を削っても速度が大きく変化しません。
PowerVR SGX は Deffered Rendring なので、Pixel Shader が呼ばれるときは
ラスタライザ等他のステージが完了しています。
Shader の命令を削れば削るほど直接パフォーマンスに響いてくるので
最適化はシビアになりがちです。
ここが最も Adreno と違うポイントで、パフォーマンスを優先するならかなり
手を加える必要があります。高速化出来る余地が残っているともいえます。
なお見た目が変わるとベンチとしての正しい比較とは言えないかもしれないので、
3DMark は比較的高い演算精度でレンダリングしているのではないかと考えられます。
もしそうなら、Tegra/Mali とは違い PowerVR のスコアはまだ上がる余地が
残っていることになります。
iOS 版が出たら、どの程度 PowerVR SGX 向けに最適化されているのか
わかるのではないでしょうか。
・おそらく GPU 毎の Shader 最適化がそれほど強くないので、速度が落ちにくい Adreno が有利
・OpenGL ES 3.0 対応最新 GPU + 新 CPU と、いち早く世代交代した Qualcomm (Krait quad + Adreno 320) がやっぱり速い
関連エントリ
・3DMark Android Edition Ice Storm v1.1 の結果
・GPU 速度に関連するエントリ
2013/04/04
3DMark Android Edition Ice Storm v1.1 の結果
Android 版 3DMark を手持ちのデバイスで試してみました。
スペック的に最新の Snapdragon APQ8064 (HTC J butterfly HTL21) がトップでした。
次に速いのは Tegra3 (Nexus7) ですが、よく見ると総合スコアは高いものの
Graphics score は MSM8660 の Adreno 220 に負けていることがわかります。
MSM8660 の CPU は Dual core 、Tegra3 は Quad core なので
Graphics で負けている分を Physics の CPU 速度で挽回した形になります。
Tegra らしい結果といえるかもしれません。
ここで気になるのは、Physics score で Scorpion 1.2GHz dual core の MSM8660 が
Cortex-A9 1.0GHz dual core の Tegra2 にも負けていることです。
Tegra2 は NEON を搭載していないので、浮動小数点演算のピークパフォーマンスが
1/2 ~ 1/4 と低いはずなのですが、他の CPU と大きな差がついていません。
Tegra2 のスコアを core 数で 2倍、クロック数で 1.2 倍すると
2878 * 2 * 1.2 = 6907
Tegra3 のスコア 6638 に近い数値となります。
演算性能だけ考えると NEON の分だけ差が開いてもよさそうなので、
NEON があまり活用されていないか、またはバス速度や描画など演算速度以外に
ボトルネックが存在している可能性があります。
それでも Scorpion のスコアは少々低すぎる気がします。
APQ8064 の Krait は十分速いですが、世代的にはもう少し数値が伸びても
良いのではないかと思いました。
下記のページでは Nexus 10 のスコアが掲載されています。
興味深いので一部引用させて頂きます。
・4gamer: Futuremark,「3DMark」のAndroid版を発表。スマートフォン・タブレット8機種でテストしてみた
Graphics 性能自体はあまり高くないですが、Physics のスコアが非常に伸びています。
Cortex-A15 1.7GHz dual core でこの数値なので、同クロックで比べても
Cortex-A9 の倍近くとなり、現行 Krait でも届きません。
Tegra4 や Exynos 5 Octa など、Cortex-A15 の Quad core が出たら
CPU 最速で間違いないでしょう。
もちろん Qualcomm も Krait 400 ではスコアが伸びていると思われます。
以下 Extream の結果
HTC EVO 3D ISW12HT (Snapdragon MSM8660) では Ice Storm Extream が動きませんでした。
テストしたデバイスの詳細は下記の通り
関連ページ
・Mobile GPU bench mark
・CPU benchmark
関連エントリ
・Silicon Studio MOBILE GPUMARK のスコア比較
Ice Storm (1280x720) SoC GPU Score Graph Physics GT1 GT2 PhysT Demo OS --------------------------------------------------------------------------- 1: APQ8064 Adreno 320 9922 10061 9463 43.4 44.1 30.0 47.4 A4.1.1 2: MSM8660 Adreno 220 3167 4218 1692 19.2 17.6 5.4 19.0 A4.0.3 3: Tegra3 ULP GeForce(12) 3559 3143 6638 12.3 15.4 21.1 17.1 A4.2.2 4: Tegra2 ULP GeForce(8) 1448 1268 2878 5.5 5.5 9.1 6.4 A3.1 数値が大きい方が高速
スペック的に最新の Snapdragon APQ8064 (HTC J butterfly HTL21) がトップでした。
次に速いのは Tegra3 (Nexus7) ですが、よく見ると総合スコアは高いものの
Graphics score は MSM8660 の Adreno 220 に負けていることがわかります。
MSM8660 の CPU は Dual core 、Tegra3 は Quad core なので
Graphics で負けている分を Physics の CPU 速度で挽回した形になります。
Tegra らしい結果といえるかもしれません。
ここで気になるのは、Physics score で Scorpion 1.2GHz dual core の MSM8660 が
Cortex-A9 1.0GHz dual core の Tegra2 にも負けていることです。
Tegra2 は NEON を搭載していないので、浮動小数点演算のピークパフォーマンスが
1/2 ~ 1/4 と低いはずなのですが、他の CPU と大きな差がついていません。
Tegra2 のスコアを core 数で 2倍、クロック数で 1.2 倍すると
2878 * 2 * 1.2 = 6907
Tegra3 のスコア 6638 に近い数値となります。
演算性能だけ考えると NEON の分だけ差が開いてもよさそうなので、
NEON があまり活用されていないか、またはバス速度や描画など演算速度以外に
ボトルネックが存在している可能性があります。
それでも Scorpion のスコアは少々低すぎる気がします。
APQ8064 の Krait は十分速いですが、世代的にはもう少し数値が伸びても
良いのではないかと思いました。
下記のページでは Nexus 10 のスコアが掲載されています。
興味深いので一部引用させて頂きます。
・4gamer: Futuremark,「3DMark」のAndroid版を発表。スマートフォン・タブレット8機種でテストしてみた
SoC GPU Score Graph Physics GT1 GT2 PhysT Demo OS --------------------------------------------------------------------------- Nexus10 Exynos5D Mali-T604 5072 4567 8287 18.3 27.4 8.7 20.6 A4.2.2
Graphics 性能自体はあまり高くないですが、Physics のスコアが非常に伸びています。
Cortex-A15 1.7GHz dual core でこの数値なので、同クロックで比べても
Cortex-A9 の倍近くとなり、現行 Krait でも届きません。
Tegra4 や Exynos 5 Octa など、Cortex-A15 の Quad core が出たら
CPU 最速で間違いないでしょう。
もちろん Qualcomm も Krait 400 ではスコアが伸びていると思われます。
以下 Extream の結果
Ice Storm Extream (1920x1080) SoC GPU Score Graph Physics GT1 GT2 PhysT Demo OS --------------------------------------------------------------------------- 1: APQ8064 Adreno 320 1.5 6133 5479 10530 26.8 21.4 33.4 23.9 A4.1.1 2: MSM8660 Adreno 220 -- -- -- -- -- -- -- A4.0.3 3: Tegra3 ULP GeForce(12) 1884 1574 6054 7.3 6.4 19.2 7.1 A4.2.2 4: Tegra2 ULP GeForce(8) 722 597 2721 3.1 2.2 8.6 2.6 A3.1 数値が大きい方が高速
HTC EVO 3D ISW12HT (Snapdragon MSM8660) では Ice Storm Extream が動きませんでした。
テストしたデバイスの詳細は下記の通り
Name SoC CPU Clock core GPU ------------------------------------------------------------------------- 1= HTC J butterfly HTL21 APQ8064 Krait 1.5GHz x4 Adreno 320 2= HTC EVO 3D ISW12HT MSM8660 Scorpion 1.2GHz x2 Adreno 220 3= Nexus 7 Tegra3 Cortex-A9 1.2GHz x4 ULP GeForce(12) 4= OptimusPad L-06C Tegra2 Cortex-A9 1.0GHz x2 ULP GeForce(8)
関連ページ
・Mobile GPU bench mark
・CPU benchmark
関連エントリ
・Silicon Studio MOBILE GPUMARK のスコア比較
2013/04/03
モバイルデバイスは Game Console を超えたかどうか
Mobile Device はここ数年かなりの速度で向上しており勢いが衰えていません。
GPU, CPU ともに今までテストしてきたとおり、PC や専用機に匹敵する能力を
有するようになって来ました。
●個性が偏るモバイルプロセッサ
PC と同じように端末の性能には大きな開きがあります。
現時点で入手可能な最速の CPU はSnapdragon APQ8064 (Krait Quad core) Snapdragon 600 APQ8064T (Krait 300 Quad core) でしょう。
明日 2013/04/04 には 1.7GHz の Optimus G Pro L-04E が発売予定となっています。
・日本で発売されたスマートフォン、Tablet 等の全リスト
今すぐ手に入る端末の GPU では間違いなく iPad4 の A6X が最速です。
・Mobile GPU bench mark
PowerVR SGX500~ の型番を持つ GPU は数多く存在しますが、
大きく分けて 2種類あります。
型番が似ているのでややこしいですが、この両者は PVRTC2, ShadowSampler,
演算精度, MultiCore など機能的な違いもあります。
その中でも最上位 SGX554MP4 を搭載しているのは iPad4 の A6X だけです。
このようにハイエンドの端末といってもそれぞれ何を重視するかによって評価が変わります。
Apple は GPU を最優先しており、その反面 CPU で Quad core の端末はまだ存在していません。
方向性で真逆なのが NVIDIA Tegra です。
率先して Dual core, Quad core の Tegra2/3 を展開してきたものの
トレードオフとして GPU 機能が弱く、描画性能も芳しくありません。
よって、性能差だけでなく性格付けでも特性がバラバラなのがこれまでの
モバイルデバイスの特徴でした。
・トレードオフがあるため一部分だけ秀でている
・メーカー毎に強化している分野が異なる
ただし次の世代ではこれらのアンバランスさがかなり解消されると考えられます。
●世代交代
他社に先駆けて GPU/CPU ともに世代交代を果たした Qualcomm では、
特別突出した点はないものの平均的に全体の性能が高くなっています。
また今後登場予定の Tegra4 は CPU core が刷新されるだけでなく、
ようやく NVIDIA らしい GPU へと強化が行われるようです。
・4gamer: [GDC 2013]タッチパネルは対応しなくていい? Androidの掟破りが連発された「Project SHIELD」向けゲーム開発指南
Tegra2/3 の GPU である ULP GeForce は Shader Unit が discrete で
あることから GeForce6800/7800 世代と言われていましたが、
機能的には大幅に削られたものでした。
例えば GeForce の特徴的な機能だった NVIDIA ShadowMap (PCF) が
Tegra2/3 には搭載されていません。
それどころか今まで試した GPU の中では、Tegra2/3 だけが 24bit depth
や depth_texture に未対応でした。
他社の GPU 、Adreno, PowerVR, Mali, Vivante はみなこれらの Extension
に対応しているにもかかわらずです。
上記サイトのスライド写真を見ると Tegra4 でようやく機能差が解消されており、
かつ Hardware PCF が搭載されるなど、期待した GeForce 6800/7800 クラスの
GPU となるようです。
ざっくりと 4 pixel pipe なので能力的にはおそらく無印 GeForce 6800 くらい
ではないでしょうか。
pixel rate は PS3/Xbox360 世代の半分ですが、メモリ帯域からも納得できる数値です。
もちろん予想に過ぎないので、実際に手に入れてみるまでは本当の性能はわかりません。
CPU/GPU 共に世代交代によって、一点集中型から平均的な性能向上に向かうと
考えられます。極端な個性付けはおそらく減っていくのではないでしょうか。
●コンソールとの比較
Xbox1/GC 時代のコンソールは確実に超えています。
まず CPU の速度が桁違いで、GPU 性能もシェーダーなどはるかに高機能です。
ただしフィルレートに特化した PS2 の特殊なハードウエアは正しく比べることができません。
またモバイルデバイスに要求される解像度はコンソールよりも高いので、
その点も考慮する必要があります。
誰が見ても明らかな点としては RAM 容量があります。
スマートフォンもタブレットも 1GB~2GB の RAM 容量が当たり前となっており、
この点では現行コンソールよりも余裕があります。
●実デバイスでの CPU の速度
実在のデバイスでの性能比較
(実測ではなくスペックからの算出値なので注意)
CPU core が異なっていると比較が難しいためあくまで目安として見てください。
DMIPS/clock は同一 clock で比較した core 単体の能力で、
これを clock*core 倍したものが DMIPS*core となっています。
Xbox360 の DMIPS/clock はWikipedia Instructions per second を元にしています。
ただし同一性能のはずの PS3 PPE が 3.2 なので、Xbox360 の実際のスコアは
もっと高い可能性があります。(括弧内の数値は 3.2 を元にした場合)
PS3 の Cell は特殊で簡単に比較することができません。
・CPU core list
今後登場するであろう Exynos 5 Octa (Cortex-A15 x4) や Tegra4 (Cortex-A15 x4)
のスコアを予想すると下記の通りです。
あまり厳密な比較ではないかもしれませんが、CPU 能力で現行コンソールに
匹敵するレベルに達しつつあることは事実です。
ただし、単精度の浮動小数点演算能力では敵いません。
特に Cell は圧倒的で、フィルレートの怪物だった PS2 と同じように、
一部分(浮動小数点演算能力)において突出した能力を持っています。
予想では多分 PS4 でも CPU 単体の浮動小数点演算能力においては Cell に
届かないのではないかと思います。
その代わり GPU にストリーム処理を任せられるので、
GPU を補っていた Cell とは逆の立場になります。
●GPU の速度
・Mobile Device は非常に解像度が高い
・GPU の構造が異なっている
・Tegra は演算精度が違う
・機能面は同等
Smartphone でも Full HD、Tablet だと 2048x1536 や 2560x1600 など
かなりの高解像度になりつつあります。
メモリ帯域も Shader サイクルも多くがピクセルに費やされます。
そのためたとえ GPU 性能が高くなっても相対的にはパワー不足に陥ります。
大半の GPU が TileBased となっており、Desktop GPU と構造が異なっています。
特に PowerVR は何もしなくても HW で Deferred Rendering を行うので、
ソフトウエアであまり凝ったことをすると逆効果となる可能性があります。
例えば Early Z Culling を効果的に使うには手前から描画しますが、
ピクセル単位でフラグメントが除去される TBDR では不要です。
またポストエフェクトのようにフレームバッファを再利用すると追加コストが
発生する可能性があります。
この辺りを意識して作られていない場合、ただ移植しただけでは
Mobile GPU ではあまり性能が出ないかもしれません。
その点 Tegra は Immediate Mode なので Desktop GPU と同じ考え方が通用します。
実際にテストしたわけではないので憶測ですが、上にも書いたとおり
およそ Tegra4 で現行 console の半分くらいではないかと思われます。
ただし Tegra シリーズの PixelShader は演算精度が mediump です。
精度が必要なシェーダーは動かない可能性がありますし、
HW Shadow Sampler の対応は必然だったのかもしれません。
また mediump を基準とするなら PowerVR もパフォーマンスが上がるので、
fp32 の GPU との単純な FLOPS 比較は無理があるように思います。
なお Qualcomm の Adreno は PixelShader の演算精度も GPU 機能も
コンソールと比べて遜色ありません。
・シェーダーや Extension 等、GPU 機能は現行コンソールと完全に同等
・描画速度では根拠となるデータが乏しい (が、おそらく負けてる)
●まとめ
結論としては、内部構造を熟知しているわけでも実測したわけでもないので根拠が
無いですが、GPU 性能やゲームで重要な単精度の浮動小数点演算性能でも
Xbox360/PS3 の方が上でしょう。
さらに高解像度であることやバス帯域の限界もあり、実アプリケーションでは
GPU 性能以上に隔たりが生じているのが現状ではないかと思います。
ただし性能の上昇は急激で、時間の問題であることは確かです。
特に RAM 容量では勝り、CPU の実行性能も差が無くなりつつあります。
関連ページ
・SoC list
・Mobile GPU/CPU 関連の情報まとめ
関連エントリ
・PlayStation 4
GPU, CPU ともに今までテストしてきたとおり、PC や専用機に匹敵する能力を
有するようになって来ました。
●個性が偏るモバイルプロセッサ
PC と同じように端末の性能には大きな開きがあります。
現時点で入手可能な最速の CPU は
明日 2013/04/04 には 1.7GHz の Optimus G Pro L-04E が発売予定となっています。
・日本で発売されたスマートフォン、Tablet 等の全リスト
今すぐ手に入る端末の GPU では間違いなく iPad4 の A6X が最速です。
・Mobile GPU bench mark
PowerVR SGX500~ の型番を持つ GPU は数多く存在しますが、
大きく分けて 2種類あります。
PowerVR Series 5 SGX530, SGX535, SGX540 PowerVR Series 5XT SGX543MP, SGX544MP, SGX554MP
型番が似ているのでややこしいですが、この両者は PVRTC2, ShadowSampler,
演算精度, MultiCore など機能的な違いもあります。
その中でも最上位 SGX554MP4 を搭載しているのは iPad4 の A6X だけです。
このようにハイエンドの端末といってもそれぞれ何を重視するかによって評価が変わります。
Apple は GPU を最優先しており、その反面 CPU で Quad core の端末はまだ存在していません。
方向性で真逆なのが NVIDIA Tegra です。
率先して Dual core, Quad core の Tegra2/3 を展開してきたものの
トレードオフとして GPU 機能が弱く、描画性能も芳しくありません。
よって、性能差だけでなく性格付けでも特性がバラバラなのがこれまでの
モバイルデバイスの特徴でした。
・トレードオフがあるため一部分だけ秀でている
・メーカー毎に強化している分野が異なる
ただし次の世代ではこれらのアンバランスさがかなり解消されると考えられます。
●世代交代
他社に先駆けて GPU/CPU ともに世代交代を果たした Qualcomm では、
特別突出した点はないものの平均的に全体の性能が高くなっています。
また今後登場予定の Tegra4 は CPU core が刷新されるだけでなく、
ようやく NVIDIA らしい GPU へと強化が行われるようです。
・4gamer: [GDC 2013]タッチパネルは対応しなくていい? Androidの掟破りが連発された「Project SHIELD」向けゲーム開発指南
Tegra2/3 の GPU である ULP GeForce は Shader Unit が discrete で
あることから GeForce6800/7800 世代と言われていましたが、
機能的には大幅に削られたものでした。
例えば GeForce の特徴的な機能だった NVIDIA ShadowMap (PCF) が
Tegra2/3 には搭載されていません。
それどころか今まで試した GPU の中では、Tegra2/3 だけが 24bit depth
や depth_texture に未対応でした。
他社の GPU 、Adreno, PowerVR, Mali, Vivante はみなこれらの Extension
に対応しているにもかかわらずです。
上記サイトのスライド写真を見ると Tegra4 でようやく機能差が解消されており、
かつ Hardware PCF が搭載されるなど、期待した GeForce 6800/7800 クラスの
GPU となるようです。
ざっくりと 4 pixel pipe なので能力的にはおそらく無印 GeForce 6800 くらい
ではないでしょうか。
pixel rate は PS3/Xbox360 世代の半分ですが、メモリ帯域からも納得できる数値です。
Xbox360 22.4GB/s (+32.0GB/s) PS3 22.4GB/s (+25.6GB/s) Tegra4 14.9GB/s
もちろん予想に過ぎないので、実際に手に入れてみるまでは本当の性能はわかりません。
CPU/GPU 共に世代交代によって、一点集中型から平均的な性能向上に向かうと
考えられます。極端な個性付けはおそらく減っていくのではないでしょうか。
●コンソールとの比較
Xbox1/GC 時代のコンソールは確実に超えています。
まず CPU の速度が桁違いで、GPU 性能もシェーダーなどはるかに高機能です。
ただしフィルレートに特化した PS2 の特殊なハードウエアは正しく比べることができません。
またモバイルデバイスに要求される解像度はコンソールよりも高いので、
その点も考慮する必要があります。
mem B/W CPU RAM screen --------------------------------------------------------------- GC 2.6GB/s (+?) 0.5GHz x1 24MB SD 480 PS2 3.2GB/s (+48.0GB/s) 0.3GHz x1 32MB SD 480 Xbox1 6.4GB/s 0.8GHz x1 64MB SD 480 Xbox360 22.4GB/s (+32.0GB/s) 3.2GHz x3 512MB HD 720 PS3 22.4GB/s (+25.6GB/s) 3.2GHz x7 512MB HD 720 PS4 176.0GB/s ?.?GHz x8 8GB HD 1080 Tegra3 6.0GB/s 1.7GHz x4 1~2GB APQ8064 8.5GB/s 1.7GHz x4 HD 1080 A5X 12.8GB/s 1.0GHz x2 1GB HD 1536 Tegra4 14.9GB/s 1.9GHz x4 A6X 17.0GB/s 1.?GHz x2 1GB HD 1536
誰が見ても明らかな点としては RAM 容量があります。
スマートフォンもタブレットも 1GB~2GB の RAM 容量が当たり前となっており、
この点では現行コンソールよりも余裕があります。
●実デバイスでの CPU の速度
実在のデバイスでの性能比較
(実測ではなくスペックからの算出値なので注意)
CPU Clock DMIPS/clock DMIPS*core ------------------------------------------------------------------------- Nexus 10 Exynos 5 Cortex-A15 x2 1.7GHz 3.5 11.90 ARROWS X F-02E Tegra3 Cortex-A9 x4 1.7GHz 2.5 17.00 Optimus G Pro L-04E APQ8064T Krait 300 x4 1.7GHz 3.3 22.44 Xbox360 Xenon PPC core x3 3.2GHz 2.0~(3.2) 19.20~(30.72) ・DMIPS*core が総合性能(目安)で数値が大きい方が速い
CPU core が異なっていると比較が難しいためあくまで目安として見てください。
DMIPS/clock は同一 clock で比較した core 単体の能力で、
これを clock*core 倍したものが DMIPS*core となっています。
Xbox360 の DMIPS/clock はWikipedia Instructions per second を元にしています。
ただし同一性能のはずの PS3 PPE が 3.2 なので、Xbox360 の実際のスコアは
もっと高い可能性があります。(括弧内の数値は 3.2 を元にした場合)
PS3 の Cell は特殊で簡単に比較することができません。
・CPU core list
今後登場するであろう Exynos 5 Octa (Cortex-A15 x4) や Tegra4 (Cortex-A15 x4)
のスコアを予想すると下記の通りです。
CPU Clock DMIPS/clock DMIPS*core ------------------------------------------------------------------------- Exynos 5 Octa Cortex-A15 x4 1.6GHz 3.5 22.40 Tegra4 Cortex-A15 x4 1.9GHz 3.5 26.60
あまり厳密な比較ではないかもしれませんが、CPU 能力で現行コンソールに
匹敵するレベルに達しつつあることは事実です。
ただし、単精度の浮動小数点演算能力では敵いません。
CPU fp-op/core core clock GFLOPS ---------------------------------------------------------------- Xbox360 Xenon PPC 12 3 3.2GHz 115.2 PS3 Cell BE 12+8 1+7 3.2GHz 217.6 Tegra3 Cortex-A9 4 4 1.7GHz 27.2 APQ8064 Krait 8 4 1.7GHz 54.4 Tegra4 Cortex-A15 8 4 1.9GHz 60.8 ・GFLOPS が大きいほうが速い。 ・理論値なのでこの通りの性能が出るわけではありません。
特に Cell は圧倒的で、フィルレートの怪物だった PS2 と同じように、
一部分(浮動小数点演算能力)において突出した能力を持っています。
予想では多分 PS4 でも CPU 単体の浮動小数点演算能力においては Cell に
届かないのではないかと思います。
その代わり GPU にストリーム処理を任せられるので、
GPU を補っていた Cell とは逆の立場になります。
●GPU の速度
・Mobile Device は非常に解像度が高い
・GPU の構造が異なっている
・Tegra は演算精度が違う
・機能面は同等
Smartphone でも Full HD、Tablet だと 2048x1536 や 2560x1600 など
かなりの高解像度になりつつあります。
メモリ帯域も Shader サイクルも多くがピクセルに費やされます。
そのためたとえ GPU 性能が高くなっても相対的にはパワー不足に陥ります。
大半の GPU が TileBased となっており、Desktop GPU と構造が異なっています。
特に PowerVR は何もしなくても HW で Deferred Rendering を行うので、
ソフトウエアであまり凝ったことをすると逆効果となる可能性があります。
例えば Early Z Culling を効果的に使うには手前から描画しますが、
ピクセル単位でフラグメントが除去される TBDR では不要です。
またポストエフェクトのようにフレームバッファを再利用すると追加コストが
発生する可能性があります。
この辺りを意識して作られていない場合、ただ移植しただけでは
Mobile GPU ではあまり性能が出ないかもしれません。
その点 Tegra は Immediate Mode なので Desktop GPU と同じ考え方が通用します。
実際にテストしたわけではないので憶測ですが、上にも書いたとおり
およそ Tegra4 で現行 console の半分くらいではないかと思われます。
ただし Tegra シリーズの PixelShader は演算精度が mediump です。
精度が必要なシェーダーは動かない可能性がありますし、
HW Shadow Sampler の対応は必然だったのかもしれません。
また mediump を基準とするなら PowerVR もパフォーマンスが上がるので、
fp32 の GPU との単純な FLOPS 比較は無理があるように思います。
なお Qualcomm の Adreno は PixelShader の演算精度も GPU 機能も
コンソールと比べて遜色ありません。
・シェーダーや Extension 等、GPU 機能は現行コンソールと完全に同等
・描画速度では根拠となるデータが乏しい (が、おそらく負けてる)
●まとめ
結論としては、内部構造を熟知しているわけでも実測したわけでもないので根拠が
無いですが、GPU 性能やゲームで重要な単精度の浮動小数点演算性能でも
Xbox360/PS3 の方が上でしょう。
さらに高解像度であることやバス帯域の限界もあり、実アプリケーションでは
GPU 性能以上に隔たりが生じているのが現状ではないかと思います。
ただし性能の上昇は急激で、時間の問題であることは確かです。
特に RAM 容量では勝り、CPU の実行性能も差が無くなりつつあります。
関連ページ
・SoC list
・Mobile GPU/CPU 関連の情報まとめ
関連エントリ
・PlayStation 4