2012/10/17
iPhone 5 / iPod touch 5 の GPU 速度
追加しました。
・Mobile GPU bench mark
OS も開発ツールも画面サイズもバラバラで厳密ではありませんが
いろいろと傾向は見えます。
iPhone 5 は iPad3 に匹敵する速度が出ており解像度の分だけ高速です。
iPod touch 5 は iPhone 5 と比べると半分くらいに落ちますが、
前世代 iPod touch 4 からは 5倍程度の性能が出ていることがわかります。
なおテスト内容は一応ゲームを想定した描画となっています。
ただし完全に FragmentShader (PielShader) 側で演算をこなしており、
非常にピクセル負荷が高くなっています。
一見フレームレートなどパフォーマンス的に低いように見えるかも
しれませんが、実際のゲームではもっと最適化をかけられるため
十分なパフォーマンスを出すことができます。
多くの処理は頂点や CPU 側に移動できますし、
総合的に見ても今のハイエンドスマートフォンの性能は
ゲーム専用機を大きく超えているといえます。
・Mobile GPU bench mark
OS も開発ツールも画面サイズもバラバラで厳密ではありませんが
いろいろと傾向は見えます。
iPhone 5 は iPad3 に匹敵する速度が出ており解像度の分だけ高速です。
iPod touch 5 は iPhone 5 と比べると半分くらいに落ちますが、
前世代 iPod touch 4 からは 5倍程度の性能が出ていることがわかります。
なおテスト内容は一応ゲームを想定した描画となっています。
ただし完全に FragmentShader (PielShader) 側で演算をこなしており、
非常にピクセル負荷が高くなっています。
一見フレームレートなどパフォーマンス的に低いように見えるかも
しれませんが、実際のゲームではもっと最適化をかけられるため
十分なパフォーマンスを出すことができます。
多くの処理は頂点や CPU 側に移動できますし、
総合的に見ても今のハイエンドスマートフォンの性能は
ゲーム専用機を大きく超えているといえます。
2012/03/17
iPad 3 PowerVR SGX543MP4 の速度
更新しました。
・Mobile GPU bench mark
間違いなく PowerVR SGX543MP4 は最強です。
これまでのハイエンドグループのスコアの 2倍程度出ています。
でもそれをもってしても 2048x1536 の解像度は一筋縄では
いかないようです。
速度優先ならレンダリング解像度を下げる必要がありそうです。
またこれだけハイレゾになるとピクセルに負担をかけるのは現実的で
ないので、多くの処理を頂点で行い 3D モデルを適度に
ハイポリ化した方が良いと思われます。
2D も 3D もベクタ化を考えた方が良さそうです。
関連エントリ
・頂点性能の比較 その2 (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世代) 更新
・Mobile GPU bench mark
間違いなく PowerVR SGX543MP4 は最強です。
これまでのハイエンドグループのスコアの 2倍程度出ています。
でもそれをもってしても 2048x1536 の解像度は一筋縄では
いかないようです。
速度優先ならレンダリング解像度を下げる必要がありそうです。
またこれだけハイレゾになるとピクセルに負担をかけるのは現実的で
ないので、多くの処理を頂点で行い 3D モデルを適度に
ハイポリ化した方が良いと思われます。
2D も 3D もベクタ化を考えた方が良さそうです。
関連エントリ
・頂点性能の比較 その2 (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世代) 更新
2012/11/04
iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
CPU の結果も追加しました。
今回から CPU もグループごとに速い順に並び替えています。
・CPU benchmark
GPU に iPad mini も追加しました。
・Mobile GPU bench mark
CPU/GPU ともに刷新された A6X が最速です。
GPU はより上位のプロセッサに置き換わってますがまだ同世代。
CPU と同じようにそろそろ次のアーキテクチャが出てきても
良いのではないでしょうか。
CPU では iPad mini の方が iPod touch 5 より速いですが
GHz あたりの演算速度ではほぼ同一の値です。
同じ A5 であることがわかります。
関連エントリ
・iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
・iPhone 5 / iPod touch 5 の GPU 速度
・iPad 3 PowerVR SGX543MP4 の速度
今回から CPU もグループごとに速い順に並び替えています。
・CPU benchmark
GPU に iPad mini も追加しました。
・Mobile GPU bench mark
CPU/GPU ともに刷新された A6X が最速です。
GPU はより上位のプロセッサに置き換わってますがまだ同世代。
CPU と同じようにそろそろ次のアーキテクチャが出てきても
良いのではないでしょうか。
CPU では iPad mini の方が iPod touch 5 より速いですが
GHz あたりの演算速度ではほぼ同一の値です。
同じ A5 であることがわかります。
関連エントリ
・iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
・iPhone 5 / iPod touch 5 の GPU 速度
・iPad 3 PowerVR SGX543MP4 の速度
2012/11/02
iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
iPad 4 のベンチマークスコアを追加しました。
Apple A6X の GPU はこれまでの PowerVR SGX543 とは別のもので、
PowerVR SGX554 でした。
同じ 4 core でも性能的に公称 2倍。
実際のベンチマークでも 2~3 倍の速度が出ています。
・Mobile GPU bench mark
Retina で Pixel 数が 4倍もあるにもかかわらず、
実際の動作速度で iPad 2 を超えているケースも少なくありません。
描画だけでなく CPU core 自体も大きく高速化されており、
システム全体として非常にパワフルになった印象です。
特に PowerVR SGX554 はシェーダーの演算能力自体が上がっているようで、
これまで苦手としてきたシェーダー負荷が高いケースでもきちんと速度が
出るようになっています。
間違いなく現時点では最速に分類され、
Retina や Mobile GPU であることを言い訳にできなくなっています。
ただし今のところ Extension に違いはなく、PVRTC2 や OpenGL ES 3.0
に向けた新しいフューチャーに対応しているかどうかは不明です。
今年になって CPU core も GPU core も世代交代が進んでいます。
A6, Krait, Cortex-A15 といった CPU core だけでなく、
Adreno 320, Mali-T604 等 OpenGL ES 3.0 世代の GPU も揃って来ました。
あとは OS や SDK の対応を待つばかりです。
OS の対応が始まれば世代交代はさらに早まるものと考えられます。
関連エントリ
・iPhone 5 / iPod touch 5 の GPU 速度
・iPad 3 PowerVR SGX543MP4 の速度
Apple A6X の GPU はこれまでの PowerVR SGX543 とは別のもので、
PowerVR SGX554 でした。
同じ 4 core でも性能的に公称 2倍。
実際のベンチマークでも 2~3 倍の速度が出ています。
・Mobile GPU bench mark
Retina で Pixel 数が 4倍もあるにもかかわらず、
実際の動作速度で iPad 2 を超えているケースも少なくありません。
描画だけでなく CPU core 自体も大きく高速化されており、
システム全体として非常にパワフルになった印象です。
特に PowerVR SGX554 はシェーダーの演算能力自体が上がっているようで、
これまで苦手としてきたシェーダー負荷が高いケースでもきちんと速度が
出るようになっています。
間違いなく現時点では最速に分類され、
Retina や Mobile GPU であることを言い訳にできなくなっています。
ただし今のところ Extension に違いはなく、PVRTC2 や OpenGL ES 3.0
に向けた新しいフューチャーに対応しているかどうかは不明です。
今年になって CPU core も GPU core も世代交代が進んでいます。
A6, Krait, Cortex-A15 といった CPU core だけでなく、
Adreno 320, Mali-T604 等 OpenGL ES 3.0 世代の GPU も揃って来ました。
あとは OS や SDK の対応を待つばかりです。
OS の対応が始まれば世代交代はさらに早まるものと考えられます。
関連エントリ
・iPhone 5 / iPod touch 5 の GPU 速度
・iPad 3 PowerVR SGX543MP4 の速度
2011/01/06
各種 Android 端末のベンチマークテスト
いろんなプロセッサの端末が揃ったのでベンチマークソフトを走らせてみました。
使用したソフトは下記のとおり。
(1) Benchmark 1.03
(2) CPU Benchmark 1.7.1
(3) GPUBench 1.0.0
(4) Quadrant standard 1.1.5
(5) Linpack 1.1.8
Desire ZenTouch2 ZiiO7 LuvPad ODROID-S --------------------------------------------------------------------- Android OS 2.2 2.1 2.1 2.2 2.2 Processor QSD8250 i.MX51 ZMS-08 Tegra250 S5PC110 CPU Hz 1GHz 800MHz 1GHz 1GHz x2 1GHz --------------------------------------------------------------------- (1) Bench Graphcis 28.16 225.21 395.79 293.48 517.90 (1) Bench CPU Float 2049.57 432.77 581.37 2816.16 1675.83 (1) Bench Memory 339.03 183.67 721.17 516.18 680.16 (2) CPU Benchmark 759ms 1207ms 1038ms 436ms 719ms (3) GPU Absolute 14633 22071 --- --- --- (3) GPU Relative 11587 26300 --- --- --- (4) Quadrant 1259 979 1995 1827 1040 (5) Linpack 32.82 5.66 5.97 36.71 --- ---------------------------------------------------------------------- * (2) のみ値が小さいほうが速い
テスト環境は厳密に合わせたわけではないので結果は参考程度にお願いします。
例えば通信の接続状況とか起動中のサービスなど。
OS の違いを考慮する必要があります。
Android OS 2.2 では JIT が搭載されたため、Java アプリの場合は実行内容に
よっては 2.1 と 2.2 で極端な差が出ます。(1) の CPU や (5) など。
ZEN Touch2 と ZiiO7 で全体的に速度が低いのはそのためです。
GPU Test は OpenGL ES 2.0 ですが、動かないケースが多くあまり比較
できませんでした。
Quadrant は Disk/DB 速度が含まれているのでプロセッサのみの結果では
ないようです。例えば Desire の結果とプリセットされている結果を比べると
OS 2.2 になって 2倍程スコアが上がっていることがわかります。
その分を考慮すると OS 2.1 の ZEN Touch 2 や ZiiO7 はかなり突出した
値が出ているように見えます。原因は不明です。
LuvPad の Tegra は GPU 側をきちんと評価できていませんが、とりあえず
CPU core が高速なことがわかります。おそらく多くのテストは Single Thread
だと思われるので、A9 Dual ならもっと速いのではないでしょうか。
厳密ではなく大雑把な傾向ですがおそらく同クロックの場合
整数: A9 > A8 > Snapdragon1
浮動小数 VFP: A9 > Snapdragon1 > A8
(NEON: A8 ≧ Snapdragon1)
といった印象です。
GPU は残念ながらデータ不足です。
ただ同一と思われた GPU でも違う結果が出ています。
画面サイズやバス速度の差もあるのかもしれません。
結果の詳細はこちら
・CPU/GPU Benchmark
ちなみにベンチマーク結果と実際の使用感、体感速度は全くの別物です。
現状だとほぼ Desire X06HT とそれ以外の 2つに分けられます。
ZEN Touch2/ZiiO7 はパネルにさえ慣れれば反応は良好な方です。
テスト端末
・Desire HTC Desire X06HT Qualcomm Snapdragon QSD8250, Scorpion 1GHz, Adreno 200 Android 2.2 800x480 RAM 576MB ・ZenTouch2 Creative ZEN Touch 2 (8GB) TN-T28G Freescale i.MX51, Cortex-A8 800MHz, AMD Z430 Android 2.1 480x320 RAM 256MB(?) ・ZiiO7 Creative ZiiO 7 (8GB) ZO-7S ZiiLabs ZMS-08 HD, Cortex-A8 1GHz, ZMS-08 Android 2.1 800x480 RAM 512MB ・LuvPad MouseComputer LuvPad AD100 NVIDIA Tegra 250, Cortex-A9 x2 1GHz, Tegra 250 Android 2.2 1024x600 RAM 512MB ・ODROID-S (借り物) HardKernel ODROID-S Sumsung S5PC110, Cortex-A8 1GHz, PowerVR SGX 540 Android 2.2 480x320 RAM 512MB
2013/01/09
Qualcomm APQ8064 GPU Adreno 320 の速度
今までテストに使用してきたプログラムが安定して動作しないため
Adreno 320 では速度の計測ができていませんでした。
LG Optimus G LGL21 を借りることができたのでもう一度テストしてみました。
・Mobile GPU ベンチ OpenGL ES 2.0
・CPU benchmark
・OpenGL ES Extension (Mobile GPU)
GPU bench の (1) 以外は 60fps に達するため数値が出ていません。
GPU 性能が上がったため、もはやこのテストは計測に向いていないことになります。
また Adreno 320 は OpenGL ES 3.0 世代の GPU ですが、
現在の OS から使う限り API は OpenGL ES 2.0 になります。
GPU 性能をまだ引き出せていない可能性があります。
テストプログラムのエラーの原因は特定のケースでシェーダーのコンパイルが
エラーになるもので、回避方法はわかったもののまだ詳しい条件が
特定できていません。
VFP test では HTC J HTL21 よりも良い結果が出ています。
Krait の FP 性能は Swift に並ぶ新 core であることがよくわかります。
前回のテスト時はクロックが上限まで上がっていなかった可能性があります。
HTC J butterfly が修理から戻ってきたらもう一度計測してみたいと思っています。
関連エントリ
・Adreno 320 Snapdragon S4 Pro APQ8064
Adreno 320 では速度の計測ができていませんでした。
LG Optimus G LGL21 を借りることができたのでもう一度テストしてみました。
・Mobile GPU ベンチ OpenGL ES 2.0
・CPU benchmark
・OpenGL ES Extension (Mobile GPU)
GPU bench の (1) 以外は 60fps に達するため数値が出ていません。
GPU 性能が上がったため、もはやこのテストは計測に向いていないことになります。
また Adreno 320 は OpenGL ES 3.0 世代の GPU ですが、
現在の OS から使う限り API は OpenGL ES 2.0 になります。
GPU 性能をまだ引き出せていない可能性があります。
テストプログラムのエラーの原因は特定のケースでシェーダーのコンパイルが
エラーになるもので、回避方法はわかったもののまだ詳しい条件が
特定できていません。
VFP test では HTC J HTL21 よりも良い結果が出ています。
(1) (2) (3) (4) (5) (6) iPad3 Touch5 EVO 3D iPad4 Butterfly OptimusG A5X A5 8660 A6X 8064 8064 C-A9 C-A9 Scorpion Swift Krait Krait ---------------------------------------------------------------- a:mat44 neon_AQ 4.784 5.979 2.879 1.204 1.919 1.354 b:mat44 neon_BQ 2.408 3.008 1.146 1.266 1.273 0.930 c:mat44 neon_AD 4.781 5.974 3.079 1.554 2.453 1.862 d:mat44 neon_BD 2.406 3.007 1.440 1.344 2.041 1.521 e:fadds A 4.010 5.013 3.460 2.882 3.791 2.831 f:fmuls A 4.010 5.012 4.361 2.953 3.671 2.793 g:fmacs A 4.012 5.011 4.034 5.763 7.334 5.599 h:vfma.f32 A ----- ----- ----- 5.765 3.725 2.743 i:vadd.f32 D A 4.111 5.136 3.493 2.877 3.706 2.724 j:vmul.f32 D A 4.110 5.136 3.502 2.950 3.667 2.767 k:vmla.f32 D A 4.512 5.650 3.638 2.951 7.557 5.462 l:vadd.f32 Q A 8.023 10.036 3.408 2.878 3.677 2.717 m:vmul.f32 Q A 8.022 10.028 3.427 2.952 3.647 2.741 n:vmla.f32 Q A 8.025 10.028 3.400 2.955 7.362 5.446 o:vfma.f32 D A ----- ----- ----- 2.494 3.676 2.709 p:fadds B 4.014 5.013 5.972 5.757 4.664 3.388 q:fmuls B 5.013 6.265 5.960 5.760 4.583 3.384 r:fmacs B 8.023 10.024 8.573 11.521 8.266 6.246 s:vfma.f32 B ----- ----- ----- 11.519 4.611 3.622 t:vadd.f32 D B 4.113 5.137 5.945 2.881 4.746 3.406 u:vmul.f32 D B 4.118 5.145 5.098 2.951 4.680 3.454 v:vmla.f32 D B 9.027 11.278 8.498 5.757 8.361 6.140 w:vadd.f32 Q B 8.021 10.023 5.950 2.879 4.702 3.481 x:vmul.f32 Q B 8.029 10.023 5.095 2.951 4.595 3.412 y:vmla.f32 Q B 9.026 11.277 8.497 5.762 8.464 6.249 z:vfma.f32 D B ----- ----- ----- 5.759 4.660 3.413 --------------------------------------------------------------- ↑数値は実行時間(秒) 数値が小さい方が速い (1)=Apple iPad 3 A5X ARM Cortex-A9 x2 1.0GHz (2)=Apple iPod touch 5 A5 ARM Cortex-A9 x2 0.8GHz (3)=HTC EVO 3D ISW12HT MSM8660 Scorpion x2 1.2GHz (4)=Apple iPad 4 A6X A6 (swift) x2 ?GHz (5)=HTC J butterfly HTL21 APQ8064 Krait x4 1.5GHz (6)=LG Optimus G LGL21 APQ8064 Krait x4 1.5GHz
Krait の FP 性能は Swift に並ぶ新 core であることがよくわかります。
前回のテスト時はクロックが上限まで上がっていなかった可能性があります。
HTC J butterfly が修理から戻ってきたらもう一度計測してみたいと思っています。
関連エントリ
・Adreno 320 Snapdragon S4 Pro APQ8064
2014/04/03
Amazon Fire TV の性能
Amazon Fire TV は Qualcomm Snapdragon 600 APQ8064 搭載。
Kindle Fire HDX の Snapdragon 800 には及ばないものの、
Nexus 7 2013 の Adreno 320 より 1.5 倍高速です。
・Amazon Fire TV
より詳細な比較表は下記にまとめました。
・Game Console スペック
Google によると Nexus 7 (2012) Tegra3 と Nexus 7 (2013) は CPU で 1.8倍、GPU で 4倍差があるとのこと。(Impress 新型 Nexus 7)
また旧 S4 Pro の Adreno 320 と Snapdragon 800 Adreno 330 は演算能力で2倍の差となっています。(Qualcomm Snapdragon blog)
Snapdragon 600 の Adreno 320 はちょうどこの中間の性能。
さらに Snapdragon 600 Adreno 320 は Adreno 305 の 3倍以上の性能。(Snapdragon 600)
Amazon の新しい世代のデバイスは Snapdragon Adreno 3x0 で統一されています。
FireTV, Kindle HDX 向けアプリは Adreno 3x0 向けに最適化していくことになるでしょう。
ただし Fire OS は Android 4.2 (API Level 17) なので OpenGL ES 3.0 未対応。
・Qualcomm New Amazon Fire TV powered by Snapdragon 600 processor
関連ページ
・Game Console スペック一覧
・Mobile GPU bench mark
・CPU FLOPS
Kindle Fire HDX の Snapdragon 800 には及ばないものの、
Nexus 7 2013 の Adreno 320 より 1.5 倍高速です。
・Amazon Fire TV
Console SoC CPU clock core GPU GPU性能比予想 ----------------------------------------------------------------------- OUYA Tegra3 T33 Cortex-A9 1.7GHz 4 ULP GeForce(12) 1 Fire TV S600 APQ8064T Krait 300 1.7GHz 4 Adreno 320 6倍 Vita TV Cortex-A9 ?GHz 4 PVR SGX543MP4+ ? Nexus7 2012 Tegra3 T30L Cortex-A9 1.2GHz 4 ULP GeForce(12) 1 Nexus7 2013 S4 APQ8064 Krait 1.5GHz 4 Adreno 320 4倍 Kindle HDX7 S800 MSM8974 Krait 400 2.2GHz 4 Adreno 330 8倍
より詳細な比較表は下記にまとめました。
・Game Console スペック
Google によると Nexus 7 (2012) Tegra3 と Nexus 7 (2013) は CPU で 1.8倍、GPU で 4倍差があるとのこと。(Impress 新型 Nexus 7)
また旧 S4 Pro の Adreno 320 と Snapdragon 800 Adreno 330 は演算能力で2倍の差となっています。(Qualcomm Snapdragon blog)
Snapdragon 600 の Adreno 320 はちょうどこの中間の性能。
さらに Snapdragon 600 Adreno 320 は Adreno 305 の 3倍以上の性能。(Snapdragon 600)
GPU 比率 ALU ALU比 ---------------------------------------------- Snapdragon 400 Adreno 305 2 6 1.5 Snapdragon S4 Pro Adreno 320 4 16 4 Snapdragon 600 Adreno 320 6 24 6 Snapdragon 800 Adreno 330 8 32 8
Amazon の新しい世代のデバイスは Snapdragon Adreno 3x0 で統一されています。
FireTV, Kindle HDX 向けアプリは Adreno 3x0 向けに最適化していくことになるでしょう。
ただし Fire OS は Android 4.2 (API Level 17) なので OpenGL ES 3.0 未対応。
・Qualcomm New Amazon Fire TV powered by Snapdragon 600 processor
関連ページ
・Game Console スペック一覧
・Mobile GPU bench mark
・CPU FLOPS
2014/01/15
OpenGL ES 2.0 Adreno 330, Tegra 4 の GPU 速度
ベンチマークの結果を更新しました。
・Mobile GPU bench mark
Android 4.1 以降かつ対応しているデバイスでは SwapInterval を 0 に
変更したので 60fps 以上出ています。(関連)
Adreno 330 は予想以上に速く、Adreno 320 比でもおよそ 2倍の速度が出ています。
ついに一番負荷が高い設定でも Full HD (1920x1200) で 60fps を超えるように
なってしまいました。
2010 年の GPU では 800x480 でもわずか 3fps でした。
対する Tegra 4 はあまり速度が伸びていません。
負荷を下げても速度が上がらないので、SwapInterval 設定が効いていないか
何かしら問題が発生している可能性があります。
その代わり Tegra 3 で省かれていたさまざまな extension をサポートしており
描画結果が他の GPU とほぼ一致するようになりました。
特に GL_EXT_shadow_samplers は単なる Hardware ShadowMap ではなく
PCF にきちんと Bi-linear Filter もかかります。
GL_EXT_shadow_samplers は OpenGL ES 3.0 以降のデバイスはどれも対応
していますが、必ずしも Filter がかかるとは限らないようです。
下記はいくつかテストした結果です。
この辺りはもう少し詳しく調べたいと思っています。
なお Tegra4 の Extension 詳細は下記のページに追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
関連エントリ
・Android OpenGL ES と V-Sync (eglSwapInterval)
・Nexus 10 GPU Mali-T604
・Qualcomm APQ8064 GPU Adreno 320 の速度
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・GPU 速度に関連するエントリ
・Mobile GPU bench mark
Android 4.1 以降かつ対応しているデバイスでは SwapInterval を 0 に
変更したので 60fps 以上出ています。(関連)
GPU SoC CPU clock OS Screen fps pix/sec --------------------------------------------------------------------- Adreno 330 MSM8974 2.2GHz A4.2 1920x1200 71.98fps 165.8M Adreno 320(64) APQ8064 1.5GHz A4.4 1920x1104 40.97fps 86.8M Mali-T604 Exynos5D 1.7GHz A4.4 2560x1504 20.73fps 79.8M ULP GeForce(72) Tegra4 1.8GHz A4.3 1126x800 44.58fps 43.4M ULP GeForce(12) Tegra3 1.2GHz A4.4 1280x752 15.70fps 15.0M (*1) *1: Shadow Map 無し, 16bit depth
Adreno 330 は予想以上に速く、Adreno 320 比でもおよそ 2倍の速度が出ています。
ついに一番負荷が高い設定でも Full HD (1920x1200) で 60fps を超えるように
なってしまいました。
2010 年の GPU では 800x480 でもわずか 3fps でした。
対する Tegra 4 はあまり速度が伸びていません。
負荷を下げても速度が上がらないので、SwapInterval 設定が効いていないか
何かしら問題が発生している可能性があります。
その代わり Tegra 3 で省かれていたさまざまな extension をサポートしており
描画結果が他の GPU とほぼ一致するようになりました。
特に GL_EXT_shadow_samplers は単なる Hardware ShadowMap ではなく
PCF にきちんと Bi-linear Filter もかかります。
GL_EXT_shadow_samplers は OpenGL ES 3.0 以降のデバイスはどれも対応
していますが、必ずしも Filter がかかるとは限らないようです。
下記はいくつかテストした結果です。
depth-tex sh-samplers PCF Filter ---------------------------------------------------------------- 8064 Adreno 320 OpenGL ES 3.0 ◎ ◎ ◎ -- 8064 Adreno 320 OpenGL ES 2.0 ◎ -- -- -- Mali-T604 OpenGL ES 3.0 ◎ ◎ ◎ ◎ Tegra 4 OpenGL ES 2.0 ◎ ◎ ◎ ◎ Tegra 3 OpenGL ES 2.0 -- -- -- -- iOS PVR 543MP3 OpenGL ES 2.0 ◎ ◎ ◎ ◎ Vivante GC4000 OpenGL ES 2.0 ◎ -- -- -- Mali-400MP4 OpenGL ES 2.0 ◎ -- -- -- PowerVR SGX540 OpenGL ES 2.0 ◎ -- -- --
この辺りはもう少し詳しく調べたいと思っています。
なお Tegra4 の Extension 詳細は下記のページに追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
関連エントリ
・Android OpenGL ES と V-Sync (eglSwapInterval)
・Nexus 10 GPU Mali-T604
・Qualcomm APQ8064 GPU Adreno 320 の速度
・さらに OpenGL ES 2.0 Mobile GPU の速度比較
・GPU 速度に関連するエントリ
2011/01/07
各種 Android 端末のベンチマークテスト (2)
ARM11 搭載機種ということで TouchDiamond S21HT もテストに加えてみました。
・昨日の結果
HTC Touch Diamond S21HT の MSM7201A は DirectX7/OpenGL ES 1.1 の GPU を
搭載しているので、低速ながらグラフィック系のテストも通りました。
ただし CPU core は VFP 無しの ARM11 なので Float 演算を行うテストの
スコアは大きく落ちています。
また ARMv6 (ARM11) と ARMv7 世代の性能差は大きく、同クロックで比べても
ARMv7 系はかなり高速に動作します。
NDK のバイナリの違いもありますので、ゲームなど高パフォーマンス用途を
考えると ARM v7 系とそれ以外の違いはますます広がることになります。
ODROID-S の Linpack も追加しました。
同じ A8 の ZenTouch2/ZiiO7 と比べて OS 2.2 になった分大幅に高速化されて
いますが Snapdragon や A9 には届きません。
(2) CPU Bench ではむしろ Snapdragon より速いので、やはり A8 の VFP が
原因だと考えられます。
整数: A9 > A8 > Snapdragon1
浮動小数 VFP: A9 > Snapdragon1 >> A8
浮動小数NEON: A8 ≧ Snapdragon1
詳しい数値
・CPU/GPU Benchmark
関連エントリ
・各種 Android 端末のベンチマークテスト
・Android NDK r5 と armeabi, 浮動小数命令の種類
・昨日の結果
Desire ZenTouch2 ZiiO7 LuvPad ODROID-S S21HT
--------------------------------------------------------------------------
Android OS 2.2 2.1 2.1 2.2 2.2 2.2
Processor QSD8250 i.MX51 ZMS-08 Tegra250 S5PC110 MSM7201A
CPU Hz 1GHz 800MHz 1GHz 1GHz x2 1GHz 528MHz
CPU Arch ARMv7A ARMv7A ARMv7A ARMv7A ARMv7A ARMv6TEJ
CPU Scorpion CortexA8 CortexA8 CortexA9 CortexA8 ARM1136EJ
FPU VFP3,NEON VFP3,NEON VFP3,NEON VFP3 VFP3,NEON ---
GPU Adreno200 AMD Z430 ZMS-08 Tegra250 PVRSGX540 Adreno130
OpenGL ES 2.0 2.0 2.0 2.0 2.0 1.1
RAM 576MB 256MB? 512MB 512MB 512MB 192MB
Display 800x480 480x320 800x480 1024x600 480x320 640x480
--------------------------------------------------------------------------
(1) Graphcis 28.16 225.21 395.79 293.48 517.90 9.38
(1) CPU Float 2049.57 432.77 581.37 2816.16 1675.83 128.41
(1) Memory 339.03 183.67 721.17 516.18 680.16 116.95
(2) CPU Bench 759ms 1207ms 1038ms 436ms 719ms 4698ms
(3) GPU Abs 14633 22071 --- --- --- ---
(3) GPU Rel 11587 26300 --- --- --- ---
(4) Quadrant 1259 979 1995 1827 1040 434
(5) Linpack 32.82 5.66 5.97 36.71 14.03 1.98
--------------------------------------------------------------------------
* 値が大きいほうが速い, (2) のみ値が小さいほうが速い
HTC Touch Diamond S21HT の MSM7201A は DirectX7/OpenGL ES 1.1 の GPU を
搭載しているので、低速ながらグラフィック系のテストも通りました。
ただし CPU core は VFP 無しの ARM11 なので Float 演算を行うテストの
スコアは大きく落ちています。
また ARMv6 (ARM11) と ARMv7 世代の性能差は大きく、同クロックで比べても
ARMv7 系はかなり高速に動作します。
NDK のバイナリの違いもありますので、ゲームなど高パフォーマンス用途を
考えると ARM v7 系とそれ以外の違いはますます広がることになります。
ODROID-S の Linpack も追加しました。
同じ A8 の ZenTouch2/ZiiO7 と比べて OS 2.2 になった分大幅に高速化されて
いますが Snapdragon や A9 には届きません。
(2) CPU Bench ではむしろ Snapdragon より速いので、やはり A8 の VFP が
原因だと考えられます。
整数: A9 > A8 > Snapdragon1
浮動小数 VFP: A9 > Snapdragon1 >> A8
浮動小数NEON: A8 ≧ Snapdragon1
詳しい数値
・CPU/GPU Benchmark
関連エントリ
・各種 Android 端末のベンチマークテスト
・Android NDK r5 と armeabi, 浮動小数命令の種類
2012/04/23
Android SXZ-PD10 Cortex-A5 の速度
Cortex-A5 搭載 Android 端末 SXZ-PD10
(SHENZHEN LINK-CREATE TECHNOLOGY PD10 普及版)
を試してみました。
CPU や GPU のデータは下記ページにまとめています
・CPU/GPU
以下抜粋です。
Cortex-A5 は vfpv4 ですが cpuinfo の Features では vfpv3。
・ARM vfp の種類
上記のように SXZ-PD10 は Cortex-A5 1.2GHz + Mali-400 で
Android 4.0 が搭載されています。
実際にプログラムを走らせた結果は次のページにまとめています。
・CPU benchmark
以下は部分的に抜き出したものです。
single thread のテストなので Multi core CPU や HT 対応 CPU でも
1 thread 分の速度なので注意してください。
Cortex-A5 は同時に実行できる命令数が半分なので、上位の CPU より
遅くなっています。
ところがこの Cortex-A5 には vfpv4 + neon が搭載されており、
浮動小数点演算ではかなり高速であることがわかりました。
・CPU bench FPU
Cortex-A8 のように vfp で遅くなることもなく、vfp/neon 共に高速に
実行できています。
GPU の結果は下記ページに追加しています。
・Mobile GPU bench mark
関連エントリ
・2012/02/15 Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・2012/01/14 Android 4.0 RenderScript Compute の速度 その2
・2011/11/07 Android 3.x RenderScript (7) RenderScript Compute の速度
(SHENZHEN LINK-CREATE TECHNOLOGY PD10 普及版)
を試してみました。
CPU や GPU のデータは下記ページにまとめています
・CPU/GPU
以下抜粋です。
Processor : ARMv7 Processor rev 1 (v7l) BogoMIPS : 415.33 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc05 CPU revision : 1 GL_VERSION: OpenGL ES 2.0 GL_RENDERER: Mali-400 MP GL_VENDOR: ARM GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00
Cortex-A5 は vfpv4 ですが cpuinfo の Features では vfpv3。
・ARM vfp の種類
上記のように SXZ-PD10 は Cortex-A5 1.2GHz + Mali-400 で
Android 4.0 が搭載されています。
実際にプログラムを走らせた結果は次のページにまとめています。
・CPU benchmark
以下は部分的に抜き出したものです。
SoC / CPU MB/sec T/GHz device ------------------------------------------------------------------ MSM7225 ARM11 600MHz 6.99 11.65 IDEOS JZ4770 XBurst1 1.0GHz 16.40 16.40 Novo7 Paladin TCC8923 Cortex-A5 1.2GHz 18.42 15.35 SXZ-PD10 MSM8255 Scorpion 1.0GHz 24.82 24.82 Xperia ray SC-03C Tegra2 Cortex-A9 1.0GHz 25.11 25.11 OptimusPad L-06C Atom Z540 1.86GHz 30.44 16.37 VAIO Type P VGN-P90S Exynos4210 Cortex-A9 1.2GHz 33.42 27.85 Galaxy S2 SC-02C Tegra3 Cortex-A9 1.3GHz 36.15 25.82 EeePad TF201 APQ8060 Scorpion 1.5GHz 42.64 28.43 Galaxy Tab SC-01D MB/sec の数値が大きい方が速い。 整数演算のみ。single thread (single core) のみ。 ・MB/sec = 1秒あたりの変換byte数 ・T/GHz = MB/sec を CPU 1GHz あたりの速度に変換したもの
single thread のテストなので Multi core CPU や HT 対応 CPU でも
1 thread 分の速度なので注意してください。
Cortex-A5 は同時に実行できる命令数が半分なので、上位の CPU より
遅くなっています。
ところがこの Cortex-A5 には vfpv4 + neon が搭載されており、
浮動小数点演算ではかなり高速であることがわかりました。
・CPU bench FPU
Linpack 1.2.8 Single Multi MFLOPS MFLOPS Soc/CPU ------------------------------------------------------------------- 18.091 Cortex-A8 1.0GHz S5PC110 Galaxy S SC-02B 18.684 MIPS XBurst1 1.0GHz JZ4770 Novo7 Paladin 25.732 Cortex-A5 1.2GHz TCC8923 SXZ-PD10 35.628 Scorpion 1.0GHz QSD8250 Desire X06HT 31.142 57.331 Cortex-A9 x2 1.0GHz Tegra2 OptimusPad L-06C 46.164 74.664 Scorpion x2 1.2GHz MSM8660 EVO 3D ISW12HT 56.076 89.860 Scorpion x2 1.5GHz APQ8060 Galaxy Tab SC-01D 57.342 92.981 Cortex-A9 x2 1.2GHz Exynos4210 Galaxy S2 SC-02C 47.071 140.908 Cortex-A9 x4 1.3GHz Tegra3 EeePad TF201 MFLOPS の数値が大きいほうが速い
Render NDK VFP NEON CPU Script Java Java2 C++ asm asm -------------------------------------------------------------------- JZ4770 XBurst1 1.0GHz 289 479 11736 158 - - TCC8923 Cortex-A5 1.2GHz 67 295 6798 57 35 23 S5PC110 Cortex-A8 1.0GHz - 698 1012 166 139 20 Tegra 2 Cortex-A9 1.0GHz 50 243 1219 75 46 - Tegra 3 Cortex-A9 1.3GHz 38 172 3634 42 35 34 APQ8060 Scorpion 1.5GHz - 279 1758 43 26 26 単位は実行時間(ms)、数値が小さいほうが速い。
Cortex-A8 のように vfp で遅くなることもなく、vfp/neon 共に高速に
実行できています。
GPU の結果は下記ページに追加しています。
・Mobile GPU bench mark
関連エントリ
・2012/02/15 Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・2012/01/14 Android 4.0 RenderScript Compute の速度 その2
・2011/11/07 Android 3.x RenderScript (7) RenderScript Compute の速度
2012/01/21
ASUS Eee Pad TF201 Tegra3 の GPU 速度
Transformer Prime, EeePad TF201 手に入れました。
NVIDIA の新しい Mobile プロセッサ Tegra 3 を搭載しています。
CPU は Cortex-A9 の quad core で GPU は ULP GeForce 12 core 版
となります。
CPU は 4 core 認識しています。Tegra2 と違い NEON あります。
GPU の方は Tegra2 と比べて特に機能的な違いがありませんでした。
depth は 16bit のままで depth_texture もありません。
・Mobile GPU の機能比較
Extension は下記のページに追加しました。
・OpenGL ES Extension
● GPU 速度
いつもの pixel 負荷の高い描画テストを走らせてみました。
Tegra2 と比べて 3倍弱といった数値になっています。
shader core は Pixel が 2倍らしいので、Mali400 と同じ表現を
使えば MP2 相当です。2倍以上の性能差は動作クロックの違いだと
考えられます。
他の GPU との比較は下記のページにまとめました。
・Mobile GPU bench mark
pix/sec の欄を見ると、速度的にはほぼ 3世代目グループである
Mali-400MP4/Adreno220/SGX543MP2 に並んでいることがわかります。
NVIDIA といえば GPU のイメージが強いですが Tegra はむしろ逆です。
優先しているのは CPU の方で、半世代先行した設計で Quad 化を
実現しています。
それに対して GPU は決して突出した性能ではなく、やっとライバルに
並んだところです。
関連エントリ
・OpenGL ES 2.0 Mobile GPU の比較、重いテクスチャ
・頂点性能の比較 その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世代) 更新
NVIDIA の新しい Mobile プロセッサ Tegra 3 を搭載しています。
CPU は Cortex-A9 の quad core で GPU は ULP GeForce 12 core 版
となります。
CPU は 4 core 認識しています。Tegra2 と違い NEON あります。
Processor : ARMv7 Processor rev 9 (v7l) processor : 0 BogoMIPS : 1992.29 processor : 1 BogoMIPS : 1992.29 processor : 2 BogoMIPS : 1992.29 processor : 3 BogoMIPS : 1992.29 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc09 CPU revision : 9
GPU の方は Tegra2 と比べて特に機能的な違いがありませんでした。
depth は 16bit のままで depth_texture もありません。
・Mobile GPU の機能比較
GL_VERSION: OpenGL ES 2.0 12.01014 GL_RENDERER: NVIDIA Tegra 3 GL_VENDOR: NVIDIA Corporation GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL 1.00
Extension は下記のページに追加しました。
・OpenGL ES Extension
● GPU 速度
いつもの pixel 負荷の高い描画テストを走らせてみました。
Tegra2 と比べて 3倍弱といった数値になっています。
(2) light 3 (ambient + directional x2 + point ) ----------------------------------------------------- Tegra 3 / ULP GeForce(12) 15.70fps EeePad TF201 Tegra 2 / ULP GeForce(8) 5.74fps ICONIA TAB A500 (3) light 1 (ambient + directional ) ----------------------------------------------------- Tegra 3 / ULP GeForce(12) 30.10fps EeePad TF201 Tegra 2 / ULP GeForce(8) 12.10fps ICONIA TAB A500
shader core は Pixel が 2倍らしいので、Mali400 と同じ表現を
使えば MP2 相当です。2倍以上の性能差は動作クロックの違いだと
考えられます。
他の GPU との比較は下記のページにまとめました。
・Mobile GPU bench mark
pix/sec の欄を見ると、速度的にはほぼ 3世代目グループである
Mali-400MP4/Adreno220/SGX543MP2 に並んでいることがわかります。
NVIDIA といえば GPU のイメージが強いですが Tegra はむしろ逆です。
優先しているのは CPU の方で、半世代先行した設計で Quad 化を
実現しています。
それに対して GPU は決して突出した性能ではなく、やっとライバルに
並んだところです。
Group3 | Adreno 220, PVR SGX543MP2, Mali-400MP4, ULP GeForce(12,Tegra3) Group2 | Adreno 205, PVR SGX530/535/540, ULP GeForce(8,Tegra250) Group1 | Adreno 200, AMD Z430
関連エントリ
・OpenGL ES 2.0 Mobile GPU の比較、重いテクスチャ
・頂点性能の比較 その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世代) 更新
ARM でも x86 でもない、MIPS の CPU を搭載した
Android 端末 ainol Novo 7 Paladin を使ってみました。
Ingenic JZ4770
CPU core: XBurst (MIPS32)
GPU core: Vivante GC860
CPU/GPU (OpenGL ES Extension 等) は下記に追加
・CPU/GPU: Novo7 Paladin Android 4.0 JZ4770 MIPS XBurst GC860
以下抜粋
下記の GPU 機能比較表にも追加しました
・Mobile GPU の比較
GPU は Unified Shader で FragmentShader も highp 対応。
テクスチャ圧縮フォーマットは DXT1/3/5 (S3TC)、
24bit depth に対応しており depth_texture もあります。
Vertex の Stream 入力が若干少なめ。
レンダリングは 2048 までですが使えるテクスチャサイズが
8192 と突出しています。
NDK を使って実際にシェーダーを走らせてみました。
下記のベンチマーク結果の表に追加しています。
・Mobile GPU bench mark
公式スペックもフィルレートがあまり高くなかったので、
GC800 の世代的には PVR SGX530/535 あたりと同等なのかもしれません。
より高速な GPU として GC1000/GC2000/GC4000 も存在しています。
・Vivante Graphics Processor IP
Freescale i.MX5 系の GPU は AMD Z430 ですが、すでに Qualcomm
に売却されており Adreno と名称が変わっています。
i.MX6 では Vivante の新しい GPU core が採用されるようです。
●MIPS 版 NDK
Google の Android NDK には MIPS が含まれていませんが、
下記の MIPS サイトからダウンロードすることができます。
・MIPS Developers: Download MIPS Android NDK
既存の NDK (ARM/x86) をすべて含んでいるため、同バージョンの
NDK と置き換えるだけで mips 対応になります。
例えばすでに C:/android/android-ndk-r7 というフォルダがあるなら
1. c:/android/android-ndk-r7 を削除
1. android-ndk-r7m-windows-20120103.zip を展開
2. android-ndk-r7m を android-ndk-r7 にリネームして C:/android に入れる
これだけです。ARM, x86, MIPS すべてに対応します。
MIPS 対応 NDK では新しく3つのアーキテクチャが追加されます。
倍になりました。既存のものと合わせてまとめると下記の通り。
XBurst は ase もあり mips-r2 のように見えますが Paladin は mips でした。
(2012/02/14 追記: NDK では mips ですが ROM は mips-r2 で build されているそうです)
NDK の Application.mk 等に下記のように記述すれば全対応になります。
バイナリ容量はかなり増えそうです。
RenderScript はまだ試していません。
(2012/02/14 追記: NDK r7 からは 「APP_ABI := all」と記述するだけで全対応になります。)
(2012/04/17 追記: NDK r7bm から mips-r2, mips-r2-sf が無くなりました)
Android 端末 ainol Novo 7 Paladin を使ってみました。
Ingenic JZ4770
CPU core: XBurst (MIPS32)
GPU core: Vivante GC860
CPU/GPU (OpenGL ES Extension 等) は下記に追加
・CPU/GPU: Novo7 Paladin Android 4.0 JZ4770 MIPS XBurst GC860
以下抜粋
processor : MIPS-compatible processor JZ4770 cpu model : Ingenic Xburst ASEs implemented : mxu Features : fpu mxu dsp lowpower GL_VERSION: OpenGL ES 2.0 GL_RENDERER: GC860 core GL_VENDOR: Vivante Corporation GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00
下記の GPU 機能比較表にも追加しました
・Mobile GPU の比較
GPU は Unified Shader で FragmentShader も highp 対応。
テクスチャ圧縮フォーマットは DXT1/3/5 (S3TC)、
24bit depth に対応しており depth_texture もあります。
Vertex の Stream 入力が若干少なめ。
レンダリングは 2048 までですが使えるテクスチャサイズが
8192 と突出しています。
NDK を使って実際にシェーダーを走らせてみました。
下記のベンチマーク結果の表に追加しています。
・Mobile GPU bench mark
公式スペックもフィルレートがあまり高くなかったので、
GC800 の世代的には PVR SGX530/535 あたりと同等なのかもしれません。
より高速な GPU として GC1000/GC2000/GC4000 も存在しています。
・Vivante Graphics Processor IP
Freescale i.MX5 系の GPU は AMD Z430 ですが、すでに Qualcomm
に売却されており Adreno と名称が変わっています。
i.MX6 では Vivante の新しい GPU core が採用されるようです。
●MIPS 版 NDK
Google の Android NDK には MIPS が含まれていませんが、
下記の MIPS サイトからダウンロードすることができます。
・MIPS Developers: Download MIPS Android NDK
既存の NDK (ARM/x86) をすべて含んでいるため、同バージョンの
NDK と置き換えるだけで mips 対応になります。
例えばすでに C:/android/android-ndk-r7 というフォルダがあるなら
1. c:/android/android-ndk-r7 を削除
1. android-ndk-r7m-windows-20120103.zip を展開
2. android-ndk-r7m を android-ndk-r7 にリネームして C:/android に入れる
これだけです。ARM, x86, MIPS すべてに対応します。
MIPS 対応 NDK では新しく3つのアーキテクチャが追加されます。
倍になりました。既存のものと合わせてまとめると下記の通り。
Android NDK IA GCC fpu simd --------------------------------------------------------------------------- armeabi ARMv5TE -march=armv5te -- -- armeabi-v7a ARMv7A -march=armv7-a -mfpu=vfp VFP (NEON) x86 IA-32 -march=i686 -mfpmath=sse -msse3 SSE SSE3 mips MIPS32 R1 -mips32 -mhard-float FPU -- mips-r2 MIPS32 R2 -mips32r2 -mhard-float FPU (DSP ASE) mips-r2-sf MIPS32 R2 -mips32r2 -msoft-float -- --
XBurst は
(2012/02/14 追記: NDK では mips ですが ROM は mips-r2 で build されているそうです)
NDK の Application.mk 等に下記のように記述すれば全対応になります。
APP_ABI := armeabi armeabi-v7a x86 mips mips-r2 mips-r2-sf
バイナリ容量はかなり増えそうです。
RenderScript はまだ試していません。
(2012/02/14 追記: NDK r7 からは 「APP_ABI := all」と記述するだけで全対応になります。)
(2012/04/17 追記: NDK r7bm から mips-r2, mips-r2-sf が無くなりました)
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/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 関連
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)
2013/09/28
iPhone 5s A7 CPU の速度比較 arm64 (ARMv8 AArch64)
下記 CPU ベンチ の結果を更新しました。
この結果だけを見れば iPhone 5 (A6) より約 1.8倍速く、
iPhone 5s は Core2 duo の 1.74GHz 相当となっています。
・CPU ベンチ
以下抜粋 (詳細は上記ページを参照してください)
前回のテストと異なり浮動小数点演算を含んでいません。
それでもやはり 32bit (AArch32) よりも 64bit (AArch64) の方が速くなっており、
公称値である "A6 の 2倍" に近い結果が得られました。
クロック差があるにも関わらず Core2 時代の PC と比較できる域に達しており、
少々信じられませんが clock あたりの実行効率は Core i クラスとなっています。
ただしリンク先にも書いていますが、結果にはコンパイラの性能差や実行環境の
違いも含まれている点に注意してください。
x86/x64 は VC より clang の方が高いスコアになっているので、
実際にはもう少し差が広がるものと考えられます。
またこのスコアはベンチマーク用のものです。
ARMv8 には x86/x64 と同じように AES 専用命令が搭載されていますので、
実用レベルではもっと桁違いに高速に実行できます。
ARMv8 の AES 命令を使った場合のベンチマークスコアはまだ計測できておりません。
余裕があればもう少し幅広くテストしてみたいと思います。
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・benchmark 関連
・CPU benchmark
この結果だけを見れば iPhone 5 (A6) より約 1.8倍速く、
iPhone 5s は Core2 duo の 1.74GHz 相当となっています。
・CPU ベンチ
以下抜粋 (詳細は上記ページを参照してください)
CPU arch GHz time MB/sec 1GHzあたり -------------------------------------------------------------- Apple A7 CPU ARMv8 (arm64) 1.3 1.04s 104.27MB/s 80.21MB Apple A7 CPU ARMv8 (armv7s) 1.3 1.16s 93.04MB/s 71.57MB Cortex-A15 ARMv7A 1.7 1.49s 72.61MB/s 42.71MB A6 swift ARMv7A(armv7s) 1.3 1.87s 57.96MB/s 44.58MB Krait ARMv7A 1.5 2.28s 47.64MB/s 31.82MB A5 Cortex-A9 ARMv7A(armv7) 0.8 5.78s 18.76MB/s 23.44MB Core i7 3930K x64 (Win+VC) 3.2 0.48s 228.05MB/s 71.26MB Core i7 3930K x86 (Win+VC) 3.2 0.50s 216.50MB/s 67.66MB Core2 duo x64 x64 (Win+VC) 2.4 0.75s 143.56MB/s 59.81MB Core2 duo x86 x86 (Win+VC) 2.4 0.85s 127.99MB/s 53.33MB Atom N270 x86 (Win+VC) 1.6 4.21s 25.74MB/s 16.09MB ・「MB/sec」が大きいほうが高速 ・「1GHzあたり」は同一 CPU クロックでの比較
前回のテストと異なり浮動小数点演算を含んでいません。
それでもやはり 32bit (AArch32) よりも 64bit (AArch64) の方が速くなっており、
公称値である "A6 の 2倍" に近い結果が得られました。
クロック差があるにも関わらず Core2 時代の PC と比較できる域に達しており、
少々信じられませんが clock あたりの実行効率は Core i クラスとなっています。
ただしリンク先にも書いていますが、結果にはコンパイラの性能差や実行環境の
違いも含まれている点に注意してください。
x86/x64 は VC より clang の方が高いスコアになっているので、
実際にはもう少し差が広がるものと考えられます。
またこのスコアはベンチマーク用のものです。
ARMv8 には x86/x64 と同じように AES 専用命令が搭載されていますので、
実用レベルではもっと桁違いに高速に実行できます。
ARMv8 の AES 命令を使った場合のベンチマークスコアはまだ計測できておりません。
余裕があればもう少し幅広くテストしてみたいと思います。
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・benchmark 関連
・CPU benchmark
HONEY BEE 101K は Renesas SH-Mobile APE5R を搭載した
Android スマートフォンです。
CPU Core は ARM Cortex-A9 1.2GHz の dual、
GPU core は PowerVR SGX543MP2 と意外なほどパワフルです。
・KYOCERA HONEY BEE 101K
GPU である PowerVR SGX543MP2 は iPhone 4S/iPad2 に使われており、
4core 版 SGX543MP4 は iPad 3 や PS Vita で有名です。
ところが Android ではほとんど見かけることがありませんでした。
触る機会があったので試してみました。
・CPU info/GPU Caps/Extension 等
Android なので PVRTC だけでなく ETC1 もサポートされています。
テクスチャサイズが 4096 になっただけで、Extension 等それ以外の
機能は PowerVR SGX540 とほとんど同じです。
GL_EXT_shadow_samplers も無く iOS 5 になる前の iPad2 に
似ているかもしれません。
・GPU ベンチマーク
速度はそこそこですが走らせるにあたりいくつか問題がありました。
(1) GL_OUT_OF_MEMORY が出やすい
glDrawElements() で GL_OUT_OF_MEMORY が発生することがあります。
「CPU info/GPU Caps/Extension 等」のページに meminfo の値も追加してみました。
比べてみると GPU に割り当てられていると思われる領域が
101K の場合少ないようです。
ただしこれが本当に GPU memory に影響しているのか、
また GL_OUT_OF_MEMORY の原因なのかどうかはわかりません。
例えば Tegra3 である TF201 も少なくなっています。
その代わり他のデバイスには存在しない DirectMap4k/DirectMap2M という
エントリが存在しており、おそらく他のデバイスとは異なる方法で
GPU メモリを管理していると考えられます。
(2) 3D 描画しているのに CPU clock が低下する
画面を操作している間だけ描画フレームレートが上昇することに
気が付きました。
CPU clock をモニタリングしてみると、ベンチマークの 3D 描画中も
300MHz 程度まで clock が下がっているようです。
画面を連打していると 1.2GHz 近くまで上がるため、ユーザー操作が
ない場合は描画負荷が高くても cpu を寝かせる仕様なのかもしれません。
ハイエンド機ではないので当然かもしれませんが、RAM も少な目で
GPU をあまり活かしきれていないのが少々残念でした。
Android スマートフォンです。
CPU Core は ARM Cortex-A9 1.2GHz の dual、
GPU core は PowerVR SGX543MP2 と意外なほどパワフルです。
・KYOCERA HONEY BEE 101K
GPU である PowerVR SGX543MP2 は iPhone 4S/iPad2 に使われており、
4core 版 SGX543MP4 は iPad 3 や PS Vita で有名です。
ところが Android ではほとんど見かけることがありませんでした。
触る機会があったので試してみました。
・CPU info/GPU Caps/Extension 等
Android なので PVRTC だけでなく ETC1 もサポートされています。
テクスチャサイズが 4096 になっただけで、Extension 等それ以外の
機能は PowerVR SGX540 とほとんど同じです。
GL_EXT_shadow_samplers も無く iOS 5 になる前の iPad2 に
似ているかもしれません。
・GPU ベンチマーク
速度はそこそこですが走らせるにあたりいくつか問題がありました。
(1) GL_OUT_OF_MEMORY が出やすい
glDrawElements() で GL_OUT_OF_MEMORY が発生することがあります。
「CPU info/GPU Caps/Extension 等」のページに meminfo の値も追加してみました。
比べてみると GPU に割り当てられていると思われる領域が
101K の場合少ないようです。
ただしこれが本当に GPU memory に影響しているのか、
また GL_OUT_OF_MEMORY の原因なのかどうかはわかりません。
OS RAM MemTotal (RAM-MemTotal) -------------------------------------------------------------- ZEN Touch2 2.1 256MB 185.2MB 70.8MB ZiiO 7 2.1 512MB 408.3MB 103.7MB LuvPad AD100 2.2 512MB 438.3MB 73.7MB Desire X06HT 2.2 576MB 415.2MB 160.1MB Galaxy S SC-02B 2.2 512MB 302.1MB 209.9MB Xperial arc SO-01C 2.3 512MB 335.4MB 176.6MB Xperial ray SO-03C 2.3 512MB 335.4MB 176.6MB HONEY BEE 101K 2.3 512MB 478.1MB 33.9MB Novo7 Paladin 4.0 512MB 334.9MB 177.0MB SXZ-PD10 4.0 512MB 368.3MB 143.7MB EVO 3D ISW12HT 2.3 1024MB 808.1MB 215.9MB Galaxy S2 SC-02C 2.3 1024MB 836.9MB 187.1MB Galaxy Nexus SC-04D 4.0 1024MB 631.2MB 392.8MB Optimus Pad L-06C 3.1 1024MB 662.3MB 361.7MB Galaxy Tab 10.1 SC-01D 3.2 1024MB 756.7MB 267.3MB EeePad TF201 4.0 1024MB 983.2MB 40.8MB (*1) *1: DirectMap4k/DirectMap2M
例えば Tegra3 である TF201 も少なくなっています。
その代わり他のデバイスには存在しない DirectMap4k/DirectMap2M という
エントリが存在しており、おそらく他のデバイスとは異なる方法で
GPU メモリを管理していると考えられます。
(2) 3D 描画しているのに CPU clock が低下する
画面を操作している間だけ描画フレームレートが上昇することに
気が付きました。
CPU clock をモニタリングしてみると、ベンチマークの 3D 描画中も
300MHz 程度まで clock が下がっているようです。
画面を連打していると 1.2GHz 近くまで上がるため、ユーザー操作が
ない場合は描画負荷が高くても cpu を寝かせる仕様なのかもしれません。
ハイエンド機ではないので当然かもしれませんが、RAM も少な目で
GPU をあまり活かしきれていないのが少々残念でした。
ARMv8 の AES 命令を使ってみたので下記 CPU ベンチを更新しました。
・CPU ベンチ
以下抜粋
A7 ARMv8 + AES を使うことで、命令未使用時のおよそ 8倍、
ARMv7 (32bit) 時の 9倍高速に実行できています。
ただし AES-NI 共にコンパイラの intrinsic (builtin) を並べてるだけなので、
実際にはもっと最適化できる可能性があります。
Intel の AES-NI は非常にシンプルで、1 round 毎に 1命令、
最終 round のみ別命令が割り当てられていました。
ARMv8 の場合は AddRoundKey, SubBytes, ShiftRows と
MixColumns が分かれています。
並べる命令数は増えますが、この組み合わせで最終 round も表現できるので
専用命令が要りません。
また AES-NI とは xor(eor) の位置がちょうど 1つずれる形になります。
関連エントリ
・iPhone 5s A7 CPU の速度比較 arm64 (ARMv8 AArch64)
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・benchmark 関連
・CPU ベンチ
以下抜粋
CPU arch GHz time MB/sec 1GHzあたり --------------------------------------------------------------- Apple A7 CPU ARMv8 + AES 1.3 0.13s 837.54MB/s 644.26MB Apple A7 CPU ARMv8 (arm64) 1.3 1.04s 104.27MB/s 80.21MB Apple A7 CPU ARMv7 1.3 1.16s 93.04MB/s 71.57MB Cortex-A15 ARMv7 1.7 1.49s 72.61MB/s 42.71MB A6 swift ARMv7 1.3 1.87s 57.96MB/s 44.58MB Krait ARMv7 1.5 2.28s 47.64MB/s 31.82MB A5 Cortex-A9 ARMv7 0.8 5.78s 18.76MB/s 23.44MB Core i7 3930K x64 + AES-NI 3.2 0.05s 2299.54MB/s 718.61MB Core i7 3930K x86 + AES-NI 3.2 0.06s 1682.35MB/s 525.74MB Core i7 2600S x64 + AES-NI 2.8 0.05s 2113.03MB/s 754.66MB Core i7 2600S x86 + AES-NI 2.8 0.06s 1683.66MB/s 601.31MB Core i7 620M x64 + AES-NI 2.7 0.08s 1410.61MB/s 528.32MB Core i7 620M x86 + AES-NI 2.7 0.10s 1064.06MB/s 398.53MB Core i7 3930K x64 3.2 0.48s 228.05MB/s 71.26MB Core i7 3930K x86 3.2 0.50s 216.50MB/s 67.66MB Core2 duo x64 x64 2.4 0.75s 143.56MB/s 59.81MB Core2 duo x86 x86 2.4 0.85s 127.99MB/s 53.33MB Atom N270 x86 1.6 4.21s 25.74MB/s 16.09MB ・「MB/sec」が大きいほうが高速 ・「1GHzあたり」は同一 CPU クロックでの比較
A7 ARMv8 + AES を使うことで、命令未使用時のおよそ 8倍、
ARMv7 (32bit) 時の 9倍高速に実行できています。
ただし AES-NI 共にコンパイラの intrinsic (builtin) を並べてるだけなので、
実際にはもっと最適化できる可能性があります。
Intel の AES-NI は非常にシンプルで、1 round 毎に 1命令、
最終 round のみ別命令が割り当てられていました。
ARMv8 の場合は AddRoundKey, SubBytes, ShiftRows と
MixColumns が分かれています。
並べる命令数は増えますが、この組み合わせで最終 round も表現できるので
専用命令が要りません。
また AES-NI とは xor(eor) の位置がちょうど 1つずれる形になります。
関連エントリ
・iPhone 5s A7 CPU の速度比較 arm64 (ARMv8 AArch64)
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・benchmark 関連
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
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 速度に関連するエントリ
2014/02/14
MediaTek MT8125/8389 Cortex-A7 の浮動小数点演算速度
ARM Cortex-A7 は big.LITTLE で用いられる場合、省電力側の CPU core に相当します。
消費電力が少ない代わりに、高性能側の CPU core より性能は劣ります。
VFP Benchmark の結果を送ってもらいました。
結果を見ると、Cortex-A7 の NEON は 32bit 単位で実行していることがわかります。
演算速度は NEON 無しの CPU と変わらないのですが、Cortex-A15 のペアとして
機能できるよう NEON 命令セットに対応しているものと考えられます。
・FPU の演算能力 (上記以外の結果はこちら)
big.LITTLE で用いる場合は、この手の演算は Cortex-A15 の担当なので
おそらく表に出ることは無いでしょう。
単独で用いられている場合は、同じ Quad core CPU と書かれていても
かなり性能差が開いていることを考慮した方が良いかもしれません。
浮動小数点演算速度だけ見てもピーク演算速度で Cortex-A9 の半分、
Krait/Cortex-A15 の 1/4 (同一クロック時) となっています。
以下詳細
倍精度の場合はさらに差が広がっており、加算は 1 cycle で実行できますが乗算は 4 倍低速です。
さらに fmacd (積和) は乗算と同等の速度で演算しているものの、
vfma (FMA) は並列化されておらず 5倍 (1 add + 4 mul cycle) かかっているようです。
関連エントリ
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・benchmark 関連
消費電力が少ない代わりに、高性能側の CPU core より性能は劣ります。
VFP Benchmark の結果を送ってもらいました。
結果を見ると、Cortex-A7 の NEON は 32bit 単位で実行していることがわかります。
演算速度は NEON 無しの CPU と変わらないのですが、Cortex-A15 のペアとして
機能できるよう NEON 命令セットに対応しているものと考えられます。
SIMD (Vector) SIMD4 single fp (32bit x4) CPU mul add mad fma ------------------------------------------------------ ARM Cortex-A7 1 1 2 2 ARM Cortex-A8 2 2 4 – ARM Cortex-A9 2 2 4 – ARM Cortex-A15 4 4 8 8 Qualcomm Scorpion 4 4 8 – Qualcomm Krait 400 4 4 8 8 Apple A6 Swift 4 4 8 8 Apple A7 Cyclone 32 8 12 16 16 Apple A7 Cyclone 64 8 12 – 16 * 数値は 1 cycle あたりの演算数、大きい方が速い
・FPU の演算能力 (上記以外の結果はこちら)
big.LITTLE で用いる場合は、この手の演算は Cortex-A15 の担当なので
おそらく表に出ることは無いでしょう。
単独で用いられている場合は、同じ Quad core CPU と書かれていても
かなり性能差が開いていることを考慮した方が良いかもしれません。
浮動小数点演算速度だけ見てもピーク演算速度で Cortex-A9 の半分、
Krait/Cortex-A15 の 1/4 (同一クロック時) となっています。
以下詳細
Lenovo YOGA TABLET 8 (3G) MediaTek MT8389 1.2GHz Cortex-A7 Quad core SingleT SP max: 2.374 GFLOPS SingleT DP max: 1.165 GFLOPS MultiT SP max: 9.474 GFLOPS MultiT DP max: 4.653 GFLOPS * VFP/NEON (single fp) VFP fmuls (32bit x1) n8 : 3.634 1100.7 1100.7 VFP fadds (32bit x1) n8 : 3.450 1159.3 1159.3 VFP fmacs (32bit x1) n8 : 3.451 2318.1 2318.1 VFP vfma.f32 (32bit x1) n8 : 3.448 2319.9 2319.9 NEON vmul.f32 (32bit x2) n8 : 6.795 1177.3 1177.3 NEON vadd.f32 (32bit x2) n8 : 6.828 1171.7 1171.7 NEON vmla.f32 (32bit x2) n8 : 6.810 2349.6 2349.6 NEON vfma.f32 (32bit x2) n8 : 6.797 2354.1 2354.1 NEON vmul.f32 (32bit x4) n8 : 13.529 1182.7 1182.7 NEON vadd.f32 (32bit x4) n8 : 13.511 1184.2 1184.2 NEON vmla.f32 (32bit x4) n8 : 13.498 2370.7 2370.7 NEON vfma.f32 (32bit x4) n8 : 13.549 2361.8 2361.8
倍精度の場合はさらに差が広がっており、加算は 1 cycle で実行できますが乗算は 4 倍低速です。
さらに fmacd (積和) は乗算と同等の速度で演算しているものの、
vfma (FMA) は並列化されておらず 5倍 (1 add + 4 mul cycle) かかっているようです。
* VFP/NEON (double fp) VFP fmuld (64bit x1) n8 : 13.628 293.5 293.5 VFP faddd (64bit x1) n8 : 3.439 1163.0 1163.0 VFP fmacd (64bit x1) n8 : 13.508 592.2 592.2 VFP vfma.f64 (64bit x1) n8 : 16.895 473.5 473.5 VFP fmuld (64bit x1) ns4 : 13.434 297.8 297.8 VFP faddd (64bit x1) ns4 : 3.435 1164.6 1164.6 VFP fmacd (64bit x1) ns4 : 13.430 595.7 595.7 VFP vfma.f64 (64bit x1) ns4 : 16.823 475.5 475.5 VFP fmuld (64bit x1) n1 : 13.439 297.6 297.6 VFP faddd (64bit x1) n1 : 3.447 1160.6 1160.6 VFP fmacd (64bit x1) n1 : 26.856 297.9 297.9 VFP vfma.f64 (64bit x1) n1 : 26.860 297.8 297.8
関連エントリ
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・benchmark 関連
2014/10/29
iPad Air 2 (Apple A8X) の浮動小数点演算能力
iPad Air 2 (A8X) の浮動小数点演算能力を調べてみました。
より詳細なログは下記ページに乗せています。
・VFP Benchmark Log
↑本当に CPU が 3 core でした。
モバイルデバイスではあまり見かけませんが Xbox360 や Wii U など
ゲーム機に多い印象です。
もともと Cyclone は Apple A7 でも浮動小数点演算能力が突出していた CPU
でしたが、A8X でもほぼ同様の傾向が出ています。
浮動小数点演算命令はスカラーベクター共に 2 命令同時に実行可能で、
NEON の 128bit 積和も並列に走ります。
動作クロックは低いものの、3 core になったことで他の ARM Core の
4 core に匹敵する数値となってます。(下記表の (*1) )
さらに命令毎のログを詳しく見ていくと、A7 で何故か遅かった
倍精度演算のスカラー積和が改善されていることがわかります。
↑ Apple A7 では、FPU fmadd の積和 (A-7) だけ 3.915 と実行時間が
余計にかかっていました。
同じ積和でも NEON fmla はそこまでの落ち込みはなく、
(B-7) 見てわかるようにむしろスカラーよりも高速に実行できています。
↑ Apple A8X ではスカラーの倍精度積和 (A-8) も NEON (B-8) と変わらない
速度で実行できており、Apple A7 の弱点が克服されていることになります。
この辺りの演算能力の違いをまとめたのが下記ページの表です。
・CPU の浮動小数点演算能力の詳細
関連エントリ
・Android x86 Binary Translator を試してみる
・Atom Bay Trail の浮動小数点演算能力
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
より詳細なログは下記ページに乗せています。
・VFP Benchmark Log
// iPad 2 Air (Apple A8X) ARCH: ARMv8A VFP: AArch64 NEON SingleT SP max: 23.568 GFLOPS SingleT DP max: 11.751 GFLOPS MultiT SP max: 68.591 GFLOPS MultiT DP max: 33.968 GFLOPS CPU core: 3 FMA: Yes NEON: Yes
↑本当に CPU が 3 core でした。
モバイルデバイスではあまり見かけませんが Xbox360 や Wii U など
ゲーム機に多い印象です。
もともと Cyclone は Apple A7 でも浮動小数点演算能力が突出していた CPU
でしたが、A8X でもほぼ同様の傾向が出ています。
浮動小数点演算命令はスカラーベクター共に 2 命令同時に実行可能で、
NEON の 128bit 積和も並列に走ります。
動作クロックは低いものの、3 core になったことで他の ARM Core の
4 core に匹敵する数値となってます。(下記表の (*1) )
Apple A8X Snapdragon 800 Tegra K1 Atom Z3745 Cyclone Krait 400 Cortex-A15 Silvermont 1.5GHz x3 2.2GHz x4 2.2GHz x4 1.83GHz x4 ------------------------------------------------------------------ SingleT SP 23.568 17.128 17.136 8.946 SingleT DP 11.751 4.289 3.431 2.797 MultiT SP(*1) 68.591 67.539 70.174 35.473 MultiT DP 33.968 16.874 14.036 11.060 * 数値は GFLOPS 、値が大きい方が速い * 倍精度 (DP) で大きく差が付いているのは ARMv7A (32bit) に NEON が無いため * ピーク値なので実際のアプリケーション動作速度とは異なります
さらに命令毎のログを詳しく見ていくと、A7 で何故か遅かった
倍精度演算のスカラー積和が改善されていることがわかります。
// iPhone 5s (Apple A7) 倍精度演算 実行時間 演算数 演算数 --------------------------------------------------------------- FPU fmul (64bit x1) n8 : 1.642 2436.1 2436.1 FPU fadd (64bit x1) n8 : 1.045 3827.0 3827.0 FPU fmadd (64bit x1) n8 : 3.915 2043.6 2043.6 --- (A-7) NEON fmul.2d (64bit x2) n8 : 1.567 5105.1 5105.1 NEON fadd.2d (64bit x2) n8 : 1.034 7736.5 7736.5 NEON fmla.2d (64bit x2) n8 : 1.958 8172.1 8172.1 --- (B-7)
↑ Apple A7 では、FPU fmadd の積和 (A-7) だけ 3.915 と実行時間が
余計にかかっていました。
同じ積和でも NEON fmla はそこまでの落ち込みはなく、
(B-7) 見てわかるようにむしろスカラーよりも高速に実行できています。
// iPad Air 2 (Apple A8X) 倍精度演算 実行時間 演算数 演算数 --------------------------------------------------------------- VFP fmul (64bit x1) n8 : 1.442 2773.8 2773.8 VFP fadd (64bit x1) n8 : 0.926 4321.2 4321.2 VFP fmadd (64bit x1) n8 : 1.772 4513.6 4513.6 --- (A-8) NEON fmul.2d (64bit x2) n8 : 1.408 5681.0 5681.0 NEON fadd.2d (64bit x2) n8 : 0.922 8680.2 8680.2 NEON fmla.2d (64bit x2) n8 : 1.744 9175.5 9175.5 --- (B-8)
↑ Apple A8X ではスカラーの倍精度積和 (A-8) も NEON (B-8) と変わらない
速度で実行できており、Apple A7 の弱点が克服されていることになります。
この辺りの演算能力の違いをまとめたのが下記ページの表です。
・CPU の浮動小数点演算能力の詳細
関連エントリ
・Android x86 Binary Translator を試してみる
・Atom Bay Trail の浮動小数点演算能力
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
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/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 の速度
2014/01/19
ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
今まで ARM CPU の浮動小数点演算速度について調べてきましたが、
その計測プログラムをアプリにしてみました。
・VFP Benchmark (Android)
今までの測定結果のまとめは下記の通り。
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
VFP Benchmark アプリの表示結果は上記の表と互換性があります。
さらに FLOPS 表示、倍精度浮動小数点演算の計測、マルチスレッド実行に
対応しました。
下記は幾つかの端末の結果(一部)です。
比較的理論値に近い数値が出ています。
各 CPU の理論値は下記にまとめました。
・CPU FLOPS
この出力結果はあくまでピーク値による比較なので、
実際のアプリケーションの実行速度とは異なります。
例えばスカラ VFP 演算で n8 と n1 の結果を比べると、
Cortex-A9 では命令の並び順によって 5倍も速度が落ちるケースがあります。
同じ条件でも Krait / Cortex-A15 はほとんど速度が落ちていないので、
パイプラインの実行効率が向上していることがわかります。
よって実際のアプリケーションでは、Cortex-A9 と Krait/Cortex-A15 では
ピーク値よりもさらに差が開くことが予想されます。
multi-thread は同じテストを CPU core の数だけ走らせています。
Tegra 3 のように single thread 時に動作クロックが上がるものがあるので、
single-thread の値を core 数倍しても正しい値にならないためです。
アプリの出力結果を見ると、Cortex-A15 は VFP のスカラ演算よりも
NEON の 64bit (float x2) の方が 2倍速く実行できることがわかります。
以前予想したようにおそらく NEON の演算 unit は 64bit の 2 pipe ですが、
VFP は 1命令しか実行できない可能性があります。
Cortex-A8 で行ったように、VFP 命令を NEON 演算に置換する
Cortex-A15 最適化ができるかもしれません。
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
その計測プログラムをアプリにしてみました。
・VFP Benchmark (Android)
今までの測定結果のまとめは下記の通り。
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
VFP Benchmark アプリの表示結果は上記の表と互換性があります。
さらに FLOPS 表示、倍精度浮動小数点演算の計測、マルチスレッド実行に
対応しました。
下記は幾つかの端末の結果(一部)です。
MSN8974 Krait 400 2.2GHz x4 quad --------------------------------------- SingleT SP max : 16.619 GFLOPS MultiT SP max : 67.185 GFLOPS (理論値: 70.4 GFLOPS) = 2(mad) x 4(simd) x 4(core) x 2.2(clock) Tegra4 Cortex-A15 1.8GHz x4 quad --------------------------------------- SingleT SP max: 13.371 GFLOPS MultiT SP max: 51.345 GFLOPS (理論値: 57.6 GFLOPS) = 2(mad) x 2(simd) x 2(unit) x 4(core) x 1.8(clock) APQ8064 Krait 1.5GHz x4 quad --------------------------------------- SingleT SP max: 11.947 GFLOPS MultiT SP max: 47.808 GFLOPS (理論値: 48.0 GFLOPS) = 2(mad) x 4(simd) x 4(core) x 1.5(clock) Exynos5D Cortex-A15 1.7GHz x2 dual --------------------------------------- SingleT SP max: 13.483 GFLOPS MultiT SP max: 26.724 GFLOPS (理論値: 27.2 GFLOPS) = 2(mad) x 2(simd) x 2(unit) x 2(core) x 1.7(clock) Tegra3 Cortex-A9 1.2GHz x4 quad (TB1.3GHz) --------------------------------------- SingleT SP max: 4.783 GFLOPS (理論値: 5.2 GFLOPS MultiT SP max: 18.905 GFLOPS (理論値: 19.2 GFLOPS) = 2(mad) x 2(simd) x 4(core) x 1.2(clock) K3V2 Cortex-A9 1.2GHz x4 quad --------------------------------------- SingleT SP max: 4.694 GFLOPS MultiT SP max: 18.662 GFLOPS (理論値: 19.2 GFLOPS) = 2(mad) x 2(simd) x 4(core) x 1.2(clock) MSN8260 Scorpion 1.2GHz x2 dual --------------------------------------- SingleT SP max: 8.898 GFLOPS MultiT SP max: 16.560 GFLOPS (理論値: 19.2 GFLOPS) = 2(mad) x 4(simd) x 2(core) x 1.2(clock) QSD8250 Scorpion 1.0GHz x1 --------------------------------------- SingleT SP max: 7.098 GFLOPS (理論値: 8.0 GFLOPS) = 2(mad) x 4(simd) x 1.0(clock) Tegra 2 Cortex-A9 1.0GHz x2 dual --------------------------------------- SingleT SP max: 1.973 GFLOPS MultiT SP max: 3.913 GFLOPS (理論値: 4.0 GFLOPS) = 2(mad) x 2(core) x 1.0(clock)
比較的理論値に近い数値が出ています。
各 CPU の理論値は下記にまとめました。
・CPU FLOPS
この出力結果はあくまでピーク値による比較なので、
実際のアプリケーションの実行速度とは異なります。
例えばスカラ VFP 演算で n8 と n1 の結果を比べると、
Cortex-A9 では命令の並び順によって 5倍も速度が落ちるケースがあります。
同じ条件でも Krait / Cortex-A15 はほとんど速度が落ちていないので、
パイプラインの実行効率が向上していることがわかります。
よって実際のアプリケーションでは、Cortex-A9 と Krait/Cortex-A15 では
ピーク値よりもさらに差が開くことが予想されます。
multi-thread は同じテストを CPU core の数だけ走らせています。
Tegra 3 のように single thread 時に動作クロックが上がるものがあるので、
single-thread の値を core 数倍しても正しい値にならないためです。
アプリの出力結果を見ると、Cortex-A15 は VFP のスカラ演算よりも
NEON の 64bit (float x2) の方が 2倍速く実行できることがわかります。
// Exynos 5 Dual Cortex-A15 1.7GHz dual (Nexus 10) * VFP/NEON (single fp) sec MFLOPS 最大 ---------------------------------------------------- VFP fmuls (32bit x1) n8 : 2.675 1495.4 1555.9 VFP fadds (32bit x1) n8 : 2.392 1672.1 1672.1 VFP fmacs (32bit x1) n8 : 3.171 2523.2 2523.2 VFP vfma.f32 (32bit x1) n8 : 2.985 2679.9 2679.9 NEON vmul.f32 (32bit x2) n8 : 1.187 6740.5 6740.5 ** NEON vadd.f32 (32bit x2) n8 : 1.187 6740.7 6740.7 ** NEON vmla.f32 (32bit x2) n8 : 1.187 13480.8 13480.8 ** NEON vfma.f32 (32bit x2) n8 : 1.187 13480.3 13480.3 ** NEON vmul.f32 (32bit x4) n8 : 2.373 6741.8 6741.8 NEON vadd.f32 (32bit x4) n8 : 2.374 6740.7 6740.7 NEON vmla.f32 (32bit x4) n8 : 2.373 13482.7 13482.7 NEON vfma.f32 (32bit x4) n8 : 2.373 13482.3 13482.3
以前予想したようにおそらく NEON の演算 unit は 64bit の 2 pipe ですが、
VFP は 1命令しか実行できない可能性があります。
Cortex-A8 で行ったように、VFP 命令を NEON 演算に置換する
Cortex-A15 最適化ができるかもしれません。
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・iPad 4/iPad mini A6X/A5 の CPU/GPU 速度
・iPhone 5 / A6 の CPU 速度 その 3
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
2014/11/09
Nexus 9 NVIDIA Tegra K1 64 Denver の浮動小数点演算速度
VFP Benchmark の Android 版も 64bit 対応になりました。
対応していれば arm64 (arm64-v8a), x86_64 (x64), mips64 で計測を行います。
なお iOS 版はすでに 64bit (arm64) に対応しています。
・VFP Benchmark v1.3
・VFP Benchmark (Google Play)
下記は Nexus 9 (Tegra K1 64) での結果の比較です。
AArch64 は倍精度 NEON 命令が使えるため DP の速度が 2倍になっています。
より詳しい結果は下記ページに載せています。
・VFP Benchmark Log
fmul.2s, fmul.4s の速度差が無いため、Cortex-A15 と異なり NEON 命令の実行は
128bit 単位と思われます。
おそらく Nexus 9 の Denver は 2.2GHz 前後で動作しており、
1 cycle あたりスカラー乗算 で 1、加算が 2。
SIMD ではこの割合が 4 mul, 6 add, 4 mad となっています。
表にまとめると下記の通り。(数値が大きい方が cycle あたりの演算能力が高い)
↑この表は命令あたりの演算個数で、積和を 2とみなしています。
より詳しい表は下記ページに載せています。
・CPU の浮動小数点演算能力の詳細
Denver は CPU core と比べても比較的おとなしい結果となっています。
浮動小数点演算において特に突出した特徴は持っていないので、
core の数が少ない分だけ Multi-Thread 時のピーク値が低くなっています。
下の表は 32bit 版 Tegra K1 を搭載した SHILD Tablet との比較です。
これだけ見ると Cortex-A15 版の方が優れているように見えますが、
あくまで浮動小数点演算命令だけの結果です。
実際には ARM の 64bit 命令セットが使えるメリットは大きく、
アプリケーションの動作速度ではこれらと大きく異なった結果になると思われます。
↓の表は WebGL (Emscripten) 物理エンジン ベンチマークの結果比較で、
Nexus 9 はかなり高速に実行できています。
詳しくは下記ページで。現在は Firefox でも正しく描画されるようになっています。
・iOS8 で WebGL & 物理エンジンのベンチマーク結果
● Android NDK のアセンブラ命令
clang と gcc4.9 の違いかもしれませんが、左側の省略記法が使えなかったので
右のようにレジスタ名への展開が必要でした。
関連エントリ
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・Atom Bay Trail の浮動小数点演算能力
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
対応していれば arm64 (arm64-v8a), x86_64 (x64), mips64 で計測を行います。
なお iOS 版はすでに 64bit (arm64) に対応しています。
・VFP Benchmark v1.3
・VFP Benchmark (Google Play)
下記は Nexus 9 (Tegra K1 64) での結果の比較です。
NVIDIA Denver ST-SP ST-DP MT-SP MT-DP ---------------------------------------------------------------- AArch32 32bit armv7a 17.799 4.423 34.582 8.719 GFLOPS AArch64 64bit arm64 17.906 8.762 34.888 17.601 GFLOPS * ST=Single thread, MT=Multi thread * SP=Single precision fp, DP=Double precision fp * 単位は GFLOPS, 数値が大きい方が高速
AArch64 は倍精度 NEON 命令が使えるため DP の速度が 2倍になっています。
より詳しい結果は下記ページに載せています。
・VFP Benchmark Log
// Tegra K1 Denver arm64 時間(sec) MFLOPS --------------------------------------------------- FPU fmul (32bit x1) n8 : 2.049 1952.1 FPU fadd (32bit x1) n8 : 1.000 3998.3 FPU fmadd (32bit x1) n8 : 1.849 4326.0 NEON fmul.2s (32bit x2) n8 : 1.842 4343.8 NEON fadd.2s (32bit x2) n8 : 1.259 6356.0 NEON fmla.2s (32bit x2) n8 : 1.900 8420.3 NEON fmul.4s (32bit x4) n8 : 1.837 8711.7 NEON fadd.4s (32bit x4) n8 : 1.179 13570.5 NEON fmla.4s (32bit x4) n8 : 1.831 17475.0 FPU fmul (64bit x1) n8 : 1.930 2072.7 FPU fadd (64bit x1) n8 : 0.929 4306.0 FPU fmadd (64bit x1) n8 : 1.798 4450.2 NEON fmul.2d (64bit x2) n8 : 1.809 4422.6 NEON fadd.2d (64bit x2) n8 : 1.195 6695.8 NEON fmla.2d (64bit x2) n8 : 1.826 8762.0
fmul.2s, fmul.4s の速度差が無いため、Cortex-A15 と異なり NEON 命令の実行は
128bit 単位と思われます。
おそらく Nexus 9 の Denver は 2.2GHz 前後で動作しており、
1 cycle あたりスカラー乗算 で 1、加算が 2。
SIMD ではこの割合が 4 mul, 6 add, 4 mad となっています。
表にまとめると下記の通り。(数値が大きい方が cycle あたりの演算能力が高い)
Scalar SP Scalar DP mul add mad mul add mad ---------------------------------------------- Cortex-A9 32 1 1 2 0.5 1 1 Cortex-A15 32 1 1 2 1 1 1.4 Krait 400 32 1 1 2 1 1 2 (Qualcomm) Swift 32 1 1 1 1 1 1 (Apple A6) Denver 64 1 2 2 1 2 2 (NVIDIA Tegra) ← Cyclone 64 2 3 4 2 3 4 (Apple A7/A8) Silvermont 64 1 1 - 0.5 1 - (Intel BayTrail Atom) Jaguar 64 1 1 2 0.5 1 - (AMD Kabini)
SIMD2(32x2) SP SIMD4(32x4) SP SIMD2(64x2) DP mul add mad mul add mad mul add mad ------------------------------------------------------------------ Cortex-A9 32 2 2 4 2 2 4 - - - Cortex-A15 32 4 4 8 4 4 8 - - - Krait 400 32 2 2 4 4 4 8 - - - Swift 32 2 2 4 4 4 8 - - - Denver 64 2 3 4 4 6 8 2 3 4 ← Cyclone 64 4 6 8 8 12 16 4 6 8 Silvermont 64 - - - 2 4 6 0.5 1 1.5 Jaguar 64 - - - 4 4 8 2 2 4
↑この表は命令あたりの演算個数で、積和を 2とみなしています。
より詳しい表は下記ページに載せています。
・CPU の浮動小数点演算能力の詳細
Denver は CPU core と比べても比較的おとなしい結果となっています。
浮動小数点演算において特に突出した特徴は持っていないので、
core の数が少ない分だけ Multi-Thread 時のピーク値が低くなっています。
下の表は 32bit 版 Tegra K1 を搭載した SHILD Tablet との比較です。
Tegra K1 (数値はGFLOPS) ST-SP ST-DP MT-SP MT-DP --------------------------------------------------------------- Denver AArch32 32bit armv7a 17.799 4.423 34.582 8.719 Nexus 9 Denver AArch64 64bit arm64 17.906 8.762 34.888 17.601 Nexus 9 Cortex-A15 ARMv7A 32bit armv7a 17.136 3.431 70.174 14.036 SHIELD Tab
これだけ見ると Cortex-A15 版の方が優れているように見えますが、
あくまで浮動小数点演算命令だけの結果です。
実際には ARM の 64bit 命令セットが使えるメリットは大きく、
アプリケーションの動作速度ではこれらと大きく異なった結果になると思われます。
↓の表は WebGL (Emscripten) 物理エンジン ベンチマークの結果比較で、
Nexus 9 はかなり高速に実行できています。
Nexus 9 Tegra K1 Denver 64 Android 5.0 Firefox 33 13体 iPad Air 2 Apple A8X Cyclone 64 iOS 8.1 Safari 13体 MeMO Pad ME176 Z3740 Silvermont 32 Android 4.4 Firefox 33 9体 Tegra Note 7 Tegra 4 Cortex-A15 32 Android 4.4 Firefox 33 8体 Nexus 5 MSM8974 Krait 400 32 Android 4.4 Firefox 33 8体 Nexus 7 APQ8064 Krait 32 Android 5.0 Firefox 33 5体
詳しくは下記ページで。現在は Firefox でも正しく描画されるようになっています。
・iOS8 で WebGL & 物理エンジンのベンチマーク結果
● Android NDK のアセンブラ命令
clang と gcc4.9 の違いかもしれませんが、左側の省略記法が使えなかったので
右のようにレジスタ名への展開が必要でした。
orr.16b v1, v0, v0 → orr v1.16b, v0.16b, v0.16b fmla.4s v0, v8, v4 → fmla v0.4s, v8.4s, v4.4s
関連エントリ
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・Atom Bay Trail の浮動小数点演算能力
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
x86 の SSE/AVX 命令に対応しました。
ARM CPU と同じように SSE/AVX の命令速度を計測することができます。
・VFP Benchmark v1.1
・VFP Benchmark Android (Google play)
・VFP Benchmark iOS (AppStore)
上記は Android ですが iOS 版では ARMv8A (arm64) に対応しています。(2014/02/05 iOS 版追加)
下記は手持ちのデバイスでの結果。
ピーク値の測定なので実アプリケーションの速度とは異なります。
詳しくはこちらを参照してください。
下記のページのほぼ理論値通りの傾向が出ています。
・CPU FLOPS 理論値
倍精度のテストはまだ改良の余地があります。
スカラーで mul+add のペアリングを測定していないので、
一部の CPU でもう少しスコアが伸びると考えられます。
Core i5 Ivy Bridge は想定より高い数値が出ていますが、TurboBoost の効果で
より高いクロックで走っているようです。single-thread 時は 3.0GHz、
mult-thread 時は 2.85GHz 相当の結果となっています。
実際の測定結果は命令単位の数値を出すので、より細かく CPU の動作を
調べることができます。
SSE2/AVX1 には積和命令がありませんが、Intel CPU は加算と乗算命令が
並列に実行できるようです。
↓ 実際に addps/mulps の Interleave は半分の時間で実行しています。
↓ Atom (Bonnell) は場合少々特殊です。
SSE 命令の乗算は加算よりも 2倍時間がかかっています。
動作クロックを考えると SSE の add が 128bit で mul が 64bit 幅で
演算していると考えられます。
ARM NEON の場合は、同じ SIMD でも 64bit 命令があります。
例えば「 vadd.f32 d0,d1,d2 」は単精度 32bit x2 の 64bit 加算を行うので、
Cortex-A8/A9 のように 64bit 幅でも 1cycle で実行します。
128bit 命令「 vadd.f32 q0,q1,q1 」の場合は 2cycle かかります。
SSE は常に 4要素 = 128bit 単位なので Pentium 3 等 64bit 幅の
SIMD Unit では最小でも 2cycle かかることになります。
同様に Atom の乗算も最小値は 2cycle です。
ただし mulps + addps の Interleave でも、addps のみの場合と同じ時間で
完了するため、加算と乗算は非対称ながら Overlap できるようです。
Atom には HT があるので、Multi-thread 時は無駄な隙間を埋められます。
メインスレッドで mulps + addps のペアを実行し、サブスレッドで addps のみ
走らせるとおそらく 128bit + 64bit の非対称なパイプラインが埋まります。
mulps + addps + addps 組み合わせを 2スレッド走らせたのが下記の結果で、
スコアが伸びていることがわかります。
これらの測定結果から、CPU の個別の演算能力をまとめたのが下記の表です。
倍精度の値はもう少し変動する可能性があります。
・スカラー
ARM11 の mul は 0.5演算/cycle となっています。
つまり単精度の加算や乗算は 2cycle かかります。
mad/fma は命令あたり 2 演算なので、この欄が 2 の場合に 1 cycle で
実行できることを意味しています。
Cortex-A8 のピーク FLOPS は NEON のおかげで ARM11 より高いですが、
上記のように VFP のスカラー演算では ARM11 に負けています。
A7 Cyclone (ARMv8A) は AArch32 (32bit mode) と AArch64 (64bit mode) で
かなり違いがあります。
単精度演算は 64bit mode の方が数倍速く実行できるようです。
おそらく VFP が要求する仕様が NEON と異なっているためだと考えられます。
AArch64 は NEON と統一されたので、NEON と同等の速度で動作できるようです。
VFP が足を引っ張る似たような傾向は、Cortex-A15 など他の ARMv7A CPU にも
見られます。
・SIMD 単精度
Cortex-A8/A9 は 64bit 幅なので、SIMD2 では Scorpion/Krait/Swift と
差がありません。
SIMD4 では 128bit の Scorpion/Krait/Swift の半分であることがわかります。
ユニークなのは Cortex-A15 で、SIMD4 では同じ 128bit の
Scorpion/Krait/Swift と同等ですが SIMD2 では 2倍の数値となっています。
Cortex-A15 は 64bit 幅 2 pipe なので、2命令同時実行できるためです。
スカラーでは単精度でも 1命令/cycle だったので、半分しか使わなくても
NEON の方が速いことになります。
Ivy Bridge は AVX に対応しているので、上の表では省略していますが SIMD8
があります。下記のページに SIMD8 や倍精度 SIMD 含めて表にまとめています。
・CPU FLOPS : FPU
一番最初の GFLOPS のリストでは、Quad core かつ動作クロックの高い
Snapdragon 800 (MSM8974) が上位でした。
CPU の cycle 単位の命令数を出してみると、唯一の ARMv8 CPU でもある
A7 Cyclone が群を抜いて高性能であることがわかります。
計測結果から、mul, mad/fma で 2命令、add では 3命令を同時に実行できるようです。
NEON の場合は AArch32 と AArch64 特に違いはありませんでした。
A7 Cyclone の設計は DEC Alpha や StrongARM に由来するエンジニアが
関わっているとのこと。(Wikipedia P.A.Semi)
Benchmark はあくまで浮動小数点演算能力のピーク値を実測することが目的なので、
必ずしも総合的な優劣には一致しないことを予めご了承ください。
関連エントリ
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
ARM CPU と同じように SSE/AVX の命令速度を計測することができます。
・VFP Benchmark v1.1
・VFP Benchmark Android (Google play)
・VFP Benchmark iOS (AppStore)
下記は手持ちのデバイスでの結果。
Device CPU sp GFLOPS dp GFLOPS --------------------------------------------------------------------- MacBookRetina13 Core i5-3210M Ivy 2.5GHz x2 90.2 45.2 Kindle HDX 7 MSN8974 Krait 400 2.2GHz x4 67.5 16.9 Tegra Note 7 Tegra4 Cortex-A15 1.8GHz x4 51.3 9.8 Nexus 7 (2013) AQP8064 Krait 1.5GHz x4 47.8 11.8 iPhone 5s A7 arm64 Cyclone 1.3GHz x2 40.9 20.5 iPhone 5s A7 arm7s Cyclone 1.3GHz x2 40.9 8.0 Mac mini 2009 Core2 Duo P7350 2.0GHz x2 31.7 12.7 Nexus 10 Exynos5D Cortex-A15 1.7GHz x2 26.7 5.3 iPad 4 A6X Swift 1.4GHz x2 21.5 3.6 iPhone 5 A6 Swift 1.3GHz x2 20.1 3.4 Nexus 7 (2012) Tegra3 Cortex-A9 1.3GHz x4 18.9 4.7 EVO 3D ISW12HT MSM8660 Scorpion 1.2GHz x2 16.6 1.3 VAIO Type P Atom Z540 Bonnell 1.8GHz x1 10.9 1.9 Desire X06HT QSD8250 Scorpion 1.0GHz x1 7.1 0.9 iPad 2 A5 Cortex-A9 1.0GHz x2 7.8 2.0 iPod touch 4 A4 Cortex-A8 0.8GHz x1 3.1 0.1 Raspberry Pi BCM2835 ARM1176JZFS 0.7GHz x1 0.7 0.7 * 数値が大きい方が速い。 * sp= 単精度, dp= 倍精度
ピーク値の測定なので実アプリケーションの速度とは異なります。
詳しくはこちらを参照してください。
下記のページのほぼ理論値通りの傾向が出ています。
・CPU FLOPS 理論値
倍精度のテストはまだ改良の余地があります。
スカラーで mul+add のペアリングを測定していないので、
一部の CPU でもう少しスコアが伸びると考えられます。
Core i5 Ivy Bridge は想定より高い数値が出ていますが、TurboBoost の効果で
より高いクロックで走っているようです。single-thread 時は 3.0GHz、
mult-thread 時は 2.85GHz 相当の結果となっています。
実際の測定結果は命令単位の数値を出すので、より細かく CPU の動作を
調べることができます。
SSE2/AVX1 には積和命令がありませんが、Intel CPU は加算と乗算命令が
並列に実行できるようです。
↓ 実際に addps/mulps の Interleave は半分の時間で実行しています。
Ivy Bridge Core i5-3210M * SSE/AVX (single fp) sec MFLOPS MFLOPS AVX vmulps (32bit x8) n8 : 1.322 24205.7 24205.7 AVX vaddps (32bit x8) n8 : 1.319 24256.0 24256.0 AVX vmul+addps (32bit x8) n8 : 0.658 48604.4 48604.4
↓ Atom (Bonnell) は場合少々特殊です。
SSE 命令の乗算は加算よりも 2倍時間がかかっています。
動作クロックを考えると SSE の add が 128bit で mul が 64bit 幅で
演算していると考えられます。
Atom Z540 (Bonnell) * SSE/AVX (single fp) sec MFLOPS MFLOPS SSE mulps (32bit x4) n8 : 4.307 3715.2 3715.2 SSE addps (32bit x4) n8 : 2.207 7248.1 7248.1 SSE mul+addps (32bit x4) n8 : 2.155 7424.2 7424.2
ARM NEON の場合は、同じ SIMD でも 64bit 命令があります。
例えば「 vadd.f32 d0,d1,d2 」は単精度 32bit x2 の 64bit 加算を行うので、
Cortex-A8/A9 のように 64bit 幅でも 1cycle で実行します。
128bit 命令「 vadd.f32 q0,q1,q1 」の場合は 2cycle かかります。
SSE は常に 4要素 = 128bit 単位なので Pentium 3 等 64bit 幅の
SIMD Unit では最小でも 2cycle かかることになります。
同様に Atom の乗算も最小値は 2cycle です。
ただし mulps + addps の Interleave でも、addps のみの場合と同じ時間で
完了するため、加算と乗算は非対称ながら Overlap できるようです。
Atom には HT があるので、Multi-thread 時は無駄な隙間を埋められます。
メインスレッドで mulps + addps のペアを実行し、サブスレッドで addps のみ
走らせるとおそらく 128bit + 64bit の非対称なパイプラインが埋まります。
mulps + addps + addps 組み合わせを 2スレッド走らせたのが下記の結果で、
スコアが伸びていることがわかります。
Atom Z540 (Bonnell) * SSE/AVX (single fp) multi-thread sec MFLOPS MFLOPS SSE ml+ad+addps (32bit x4) n6 : 3.075 10926.6 10926.6
これらの測定結果から、CPU の個別の演算能力をまとめたのが下記の表です。
倍精度の値はもう少し変動する可能性があります。
・スカラー
単精度 倍精度 CPU mul add mad fma mul add mad fma ----------------------------------------- ------------------------- ARM1176JZF-S 0.5 0.5 1 -- 0.5 0.5 1 -- Cortex-A8 0.14 0.14 0.18 -- 0.1 0.1 0.1 -- Cortex-A9 1 1 2 -- 0.5 1 1 -- Cortex-A15 1 1 1.4 2 1 1 1.4 1.4 Scorpion 1 1 2 -- 0.5 1 1 -- Krait 400 1 1 2 2 1 1 1.6 2 A6 Swift 1 1 1 1 1 1 1 1 A7 Cyclone arm7s 1 1 2 2 2 3 3 3 A7 Cyclone arm64 2 3 -- 4 2 3 -- 1.6 Atom Bonnell 1 1 -- -- 0.5 1 -- -- Core2 Penryn 1 1 -- -- 1 1 -- -- Core i5 Ivy Bridge 1 1 -- -- 1 1 -- -- * 数値は 1 cycle に実行可能な演算数 * 値が大きい方が高速
ARM11 の mul は 0.5演算/cycle となっています。
つまり単精度の加算や乗算は 2cycle かかります。
mad/fma は命令あたり 2 演算なので、この欄が 2 の場合に 1 cycle で
実行できることを意味しています。
Cortex-A8 のピーク FLOPS は NEON のおかげで ARM11 より高いですが、
上記のように VFP のスカラー演算では ARM11 に負けています。
A7 Cyclone (ARMv8A) は AArch32 (32bit mode) と AArch64 (64bit mode) で
かなり違いがあります。
単精度演算は 64bit mode の方が数倍速く実行できるようです。
おそらく VFP が要求する仕様が NEON と異なっているためだと考えられます。
AArch64 は NEON と統一されたので、NEON と同等の速度で動作できるようです。
VFP が足を引っ張る似たような傾向は、Cortex-A15 など他の ARMv7A CPU にも
見られます。
・SIMD 単精度
SIMD2 (32bit x 2) SIMD4 (32bit x4) CPU mul add mad fma mul add mad fma ---------------------------------------- ---------------------- ARM1176JZF-S -- -- -- -- -- -- -- -- Cortex-A8 2 2 4 -- 2 2 4 -- Cortex-A9 2 2 4 -- 2 2 4 -- Cortex-A15 4 4 8 8 4 4 8 8 Scorpion 2 2 4 -- 4 4 8 -- Krait 400 2 2 4 4 4 4 8 8 A6 Swift 2 2 4 4 4 4 8 8 A7 Cyclone arm7s 4 6 8 8 8 12 16 16 A7 Cyclone arm64 4 6 -- 8 8 12 -- 16 Atom Bonnell -- -- -- -- 2 4 (6) -- Core2 Penryn -- -- -- -- 4 4 (8) -- Core i5 Ivy Bridge -- -- -- -- 4 4 (8) --
Cortex-A8/A9 は 64bit 幅なので、SIMD2 では Scorpion/Krait/Swift と
差がありません。
SIMD4 では 128bit の Scorpion/Krait/Swift の半分であることがわかります。
ユニークなのは Cortex-A15 で、SIMD4 では同じ 128bit の
Scorpion/Krait/Swift と同等ですが SIMD2 では 2倍の数値となっています。
Cortex-A15 は 64bit 幅 2 pipe なので、2命令同時実行できるためです。
スカラーでは単精度でも 1命令/cycle だったので、半分しか使わなくても
NEON の方が速いことになります。
Ivy Bridge は AVX に対応しているので、上の表では省略していますが SIMD8
があります。下記のページに SIMD8 や倍精度 SIMD 含めて表にまとめています。
・CPU FLOPS : FPU
一番最初の GFLOPS のリストでは、Quad core かつ動作クロックの高い
Snapdragon 800 (MSM8974) が上位でした。
CPU の cycle 単位の命令数を出してみると、唯一の ARMv8 CPU でもある
A7 Cyclone が群を抜いて高性能であることがわかります。
計測結果から、mul, mad/fma で 2命令、add では 3命令を同時に実行できるようです。
NEON の場合は AArch32 と AArch64 特に違いはありませんでした。
A7 Cyclone の設計は DEC Alpha や StrongARM に由来するエンジニアが
関わっているとのこと。(Wikipedia P.A.Semi)
Benchmark はあくまで浮動小数点演算能力のピーク値を実測することが目的なので、
必ずしも総合的な優劣には一致しないことを予めご了承ください。
関連エントリ
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連
2011/01/08
Android とストレージ領域
Android は端末によって SD カードの扱いが結構ばらばらです。
設定画面に表示される用語も端末ごとに異なっています。
上の 内部Flash は /data の容量です。
Android のデータ領域は 2種類あります。
本体内蔵の内部ストレージと取り外し可能な外部ストレージです。
ダウンロードしたアプリケーションは主に内部ストレージにインストールされます。
外部ストレージは主に撮影した写真等のメディアデータが格納されます。
共有しても問題ないデータ、あとから生成する容量の大きいデータはこちらが
使われることが多いようです。
また OS 2.2 からは外部ストレージへインストールできるアプリもあります。
◎内部ストレージ /data
・本体内蔵のフラッシュメモリのうちデータ用の領域
・ダウンロードしたアプリケーションは主にこちらにインストールされる
・USB 接続時に PC から見えない
◎外部ストレージ /sdcard
・共有可能なデータが格納される
・取り外し可能
・OS 2.2 からは対応アプリケーションならインストールできる
・USB 接続時に PC から直接アクセスできる。(一時的に Unmount される)
●SD カードとの関係
iPod touch のように、本体にもメディア用の大容量なフラッシュメモリを
内蔵している場合に少々複雑になります。
内蔵のメディア用フラッシュ領域が /sdcard が割り当てられるものの、
同時に本来の SD カードスロットも存在しているからです。
ZEN Touch 2 / ZiiO 7 は設定画面からも両方の容量を確認可能です。
PC 接続時には内蔵のメディア領域と SDカードの 2つのドライブが作られます。
LuvPad の場合は基本的に内蔵のメディア領域を使うことが前提となっているようです。
SD カード側のマウントには再起動が必要で PC から見えるのも内部の
メディア領域のみです。
大容量の内蔵フラッシュを持たない Desire X06HT の場合はシンプルです。
もともとこのような使われ方を想定していたのだと思われます。
内蔵のメディア領域を持っている場合、外付けの SD カードがなくても運用
できますが容量は固定となります。
SD カードは別領域にマウントされるため /sdcard そのもののは変わりません。
●アプリケーション
端末によっては内部ストレージがかなり小さく、アプリケーションの
インストール時に容量が足りなくなることがあります。
2.2 からは SDカードへもインストールや移動ができるようになりましたが
その対応度はアプリケーションに依存します。
この点においては、取り外し不可能な単一領域の大容量フラッシュを内蔵
している iOS の方が分かりやすく開発側の負担も少なくなっています。
◎アプリケーションを SDカードインストール対応にする方法
AndroidManifest.xml に1行追加。auto または preferExternal
実際に HTC Desire X06HT (2.2 Froyo) で Market から Angry Birds を
ダウンロードしてみると SD カードにインストールされました。
おそらく preferExternal が指定されているのだと思われます。
また前回ベンチマークテストに用いた GPUBench も SD カードに入ります。
このアプリは当初 LuvPad (2.2) や ODROID-S (2.2) にはインストールすることが
出来ずしばらくはまりました。
設定→「SDカードと端末容量」→「SDカードのアンマウント」
でアンマウントしてからだとインストール出来ることがわかりました。
この場合は内部ストレージに入ります。
もしかしたら Market が使えないか、何らかの認証されていないデバイスでは
SD カードにアプリケーションをインストール出来ないのかもしれません。
そのため preferExternal が設定されたアプリケーションはインストールに失敗し、
管理画面からも SD カードに移動出来なくなっていると考えられます。
関連エントリ
・各種 Android 端末のベンチマークテスト (2)
・各種 Android 端末のベンチマークテスト
設定画面に表示される用語も端末ごとに異なっています。
OS 内部Flash 内部メディア領域 SDカード ------------------------------------------------------------------- Desire X06HT 2.2 147MB 無し /sdcard ZEN Touch2(8GB) 2.1 2.95GB 4.10GB /sdcard /extsd ZiiO 7 (8GB) 2.1 1.97GB 4.94GB /sdcard /sdcard/SD_CARD LuvPad AD100 2.2 1.62GB 12.95GB /sdcard /sdcard2
上の 内部Flash は /data の容量です。
Android のデータ領域は 2種類あります。
本体内蔵の内部ストレージと取り外し可能な外部ストレージです。
ダウンロードしたアプリケーションは主に内部ストレージにインストールされます。
外部ストレージは主に撮影した写真等のメディアデータが格納されます。
共有しても問題ないデータ、あとから生成する容量の大きいデータはこちらが
使われることが多いようです。
また OS 2.2 からは外部ストレージへインストールできるアプリもあります。
◎内部ストレージ /data
・本体内蔵のフラッシュメモリのうちデータ用の領域
・ダウンロードしたアプリケーションは主にこちらにインストールされる
・USB 接続時に PC から見えない
◎外部ストレージ /sdcard
・共有可能なデータが格納される
・取り外し可能
・OS 2.2 からは対応アプリケーションならインストールできる
・USB 接続時に PC から直接アクセスできる。(一時的に Unmount される)
●SD カードとの関係
iPod touch のように、本体にもメディア用の大容量なフラッシュメモリを
内蔵している場合に少々複雑になります。
内蔵のメディア用フラッシュ領域が /sdcard が割り当てられるものの、
同時に本来の SD カードスロットも存在しているからです。
ZEN Touch 2 / ZiiO 7 は設定画面からも両方の容量を確認可能です。
PC 接続時には内蔵のメディア領域と SDカードの 2つのドライブが作られます。
LuvPad の場合は基本的に内蔵のメディア領域を使うことが前提となっているようです。
SD カード側のマウントには再起動が必要で PC から見えるのも内部の
メディア領域のみです。
大容量の内蔵フラッシュを持たない Desire X06HT の場合はシンプルです。
もともとこのような使われ方を想定していたのだと思われます。
内蔵のメディア領域を持っている場合、外付けの SD カードがなくても運用
できますが容量は固定となります。
SD カードは別領域にマウントされるため /sdcard そのもののは変わりません。
●アプリケーション
端末によっては内部ストレージがかなり小さく、アプリケーションの
インストール時に容量が足りなくなることがあります。
2.2 からは SDカードへもインストールや移動ができるようになりましたが
その対応度はアプリケーションに依存します。
この点においては、取り外し不可能な単一領域の大容量フラッシュを内蔵
している iOS の方が分かりやすく開発側の負担も少なくなっています。
◎アプリケーションを SDカードインストール対応にする方法
AndroidManifest.xml に1行追加。auto または preferExternal
<manifest ~ android:installLocation="auto" >
実際に HTC Desire X06HT (2.2 Froyo) で Market から Angry Birds を
ダウンロードしてみると SD カードにインストールされました。
おそらく preferExternal が指定されているのだと思われます。
また前回ベンチマークテストに用いた GPUBench も SD カードに入ります。
このアプリは当初 LuvPad (2.2) や ODROID-S (2.2) にはインストールすることが
出来ずしばらくはまりました。
設定→「SDカードと端末容量」→「SDカードのアンマウント」
でアンマウントしてからだとインストール出来ることがわかりました。
この場合は内部ストレージに入ります。
もしかしたら Market が使えないか、何らかの認証されていないデバイスでは
SD カードにアプリケーションをインストール出来ないのかもしれません。
そのため preferExternal が設定されたアプリケーションはインストールに失敗し、
管理画面からも SD カードに移動出来なくなっていると考えられます。
関連エントリ
・各種 Android 端末のベンチマークテスト (2)
・各種 Android 端末のベンチマークテスト
2012/04/18
Mobile CPU core の速度比較
ARM や MIPS、Atom 等さまざまな CPU を比べてみました。
・CPU benchmark
厳密なテストとは言いがたいので参考程度にお願いします。
コンパイラの違いでも結構差が出ているようです。
関連エントリ
・Android 4.0 ainol Novo 7 Paladin、MIPS CPU の NDK と Vivante GPU
・CPU benchmark
厳密なテストとは言いがたいので参考程度にお願いします。
コンパイラの違いでも結構差が出ているようです。
関連エントリ
・Android 4.0 ainol Novo 7 Paladin、MIPS CPU の NDK と Vivante GPU
2012/10/03
iPhone 5 / A6 の CPU 速度 その 3
下記の CPU ベンチに Apple A6 の結果を追加しました。
・CPU benchmark
以下抜粋
こちらでも A6 は非常に良い結果となっています。
リンク先の説明にもある通りテストはデータの暗号化を行なっており、
処理の大半がメモリアクセスやテーブル参照と XOR です。
浮動小数点演算は含みません。
single thread なので単一 core だけの速度となっています。
またコンパイラとの相性があり、全体的に iOS よりも Android の方が
高速に実行される傾向があります。
比較する場合はコンパイラの違いにも注意してください。
必ずしもこの結果だけで判断できませんが、A6 はリストにある ARM の中では
最も速く、x86 でもネットブック向け Atom では全く相手にならないようです。
関連エントリ
・iPhone 5 / A6 の CPU 速度 その 2
・iPhone 5 / A6 の浮動小数点演算
・CPU benchmark
以下抜粋
SoC/CPU core 実行時間 実行速度 1GHz時 ---------------------------------------------------------------- iPhone 5 A6 ? 1.87 (57.96 MB/s) 44.58? iPad 3 A5X Cortex-A9 1.0GHz 4.60 (23.55 MB/s) 23.55 iPod touch 4 A4 Cortex-A8 800MHz 6.07 (17.85 MB/s) 17.92 実行時間が小さい方が高速。(実行速度が大きい方が速い)
こちらでも A6 は非常に良い結果となっています。
リンク先の説明にもある通りテストはデータの暗号化を行なっており、
処理の大半がメモリアクセスやテーブル参照と XOR です。
浮動小数点演算は含みません。
single thread なので単一 core だけの速度となっています。
またコンパイラとの相性があり、全体的に iOS よりも Android の方が
高速に実行される傾向があります。
比較する場合はコンパイラの違いにも注意してください。
必ずしもこの結果だけで判断できませんが、A6 はリストにある ARM の中では
最も速く、x86 でもネットブック向け Atom では全く相手にならないようです。
関連エントリ
・iPhone 5 / A6 の CPU 速度 その 2
・iPhone 5 / A6 の浮動小数点演算
2012/11/15
Silicon Studio MOBILE GPUMARK のスコア比較
ベンチマークソフトを手持ちのデバイスで試してみました。
・Sillicon Studio MOBILE GPUMARK
iPad4 より iPhone5 の方が良い結果でした。
画面の解像度が小さい方が多少有利に働くのかもしれません。
SC-04D は非常に低速で、ひと通り完了を待つだけでもかなり時間がかかりました。
見かけの速度は速いですが、SGX540 はやはりひと世代前の GPU であることがわかります。
Galaxy S2 はそこそこのスコアですがディザがかかったような画面に見えるのが気になりました。
HONEYBEE 101K が突出した値に見えますが実は描画が正しく行われておりません。
もともとこの端末は OpenGL ES 2.0 で問題が生じることが多かったのですが、
GEMS,DP,NB の描画はラスタ状に一瞬見える程度でほとんど暗転しており、まるで
V-Sync を待たずにフレームバッファがクリアされているような画面になっています。
よってこのスコアは無効です。
GPU BENCHMARK の内容をさらに詳しく比較したのが下記の表です。
PowerVR 系は頂点(vert,spec)とピクセル(pix,norm)のスコアに極端な差が
ついていることがわかります。
Unified Shader である PowerVR 系はピクセル負荷が下がった分だけ頂点性能が
大きく向上します。
同じ Unified ながら全く性質が異なるのが Adreno 220 系で、
頂点(vert,spec)とピクセル(pix,norm)の差がわずかです。
全体の負荷を下げてもピーク性能が上がらない代わりに、ある程度複雑な
ピクセルシェーダーを走らせても性能が落ちにくい傾向があります。
Discrete Shader である Tegra は頂点性能が非常に高いことがわかります。
ピクセル負荷に影響を受けず、Tegra2 でもアンバランスに見えるほど
頂点スコアが高くなっています。
Tegra3 はピクセルも強化されていますが、PowerVR とは異なり
シェーダーの演算能力よりも fill が弱点になっているようです。
Tegra と正反対なのが同じ Discrete の Mali-400MP4 です。
4 core あるのはピクセルユニットだけなので、どうしても相対的に頂点性能が
足りないようです。
spec, pix を比べるとわかりますが、頂点でライティングするよりもむしろ
ピクセルでライティングした方が速くなっています。
GEMS, DP だけを見ると上位に食い込むスコアなので、NB を含めて
ハイポリ系が大きくスコアを落とす原因となっているようです。
HONEYBEE 101K では 420,800,1280 (YEBIS) の描画が完全に壊れていました。
よってこのスコアは正しくないことに注意してください。
それ以外は一見正しく描画されていましたが fill の値だけなぜか突出しています。
この機種だけ Android 2.3 であることも何か関係しているかもしれません。
実際のラインキングを見ると Snapdragon S4 (Adreno225/320) がかなり
上位を占めているようです。
・MOBILE GPUMARK - RANKING
ポストエフェクトなどスクリーン系エフェクトは TBDR の PowerVR 等とは
相性がよくなく、Mobile 系 GPU ではあまり用いられていませんでした。
このソフトでは非常によく動いており各種効果による違いもよくわかります。
PowerVR はかなり特徴が偏っているため、PC と同じアプローチだと他の GPU と
あまり差がつかないかもしれません。その点 Tegra の方が素直です。
また highp 演算が多い場合やピクセルの演算命令が複雑な場合は Adreno が有利です。
今後は様々な GPU が登場し、レンダリング手法も幅が広がってくるものと思われます。
Adreno 320 では TBR だけでなく Direct Rendering Mode も使い分けられるので、
このようなケースでも今まで以上に最適化が可能となるようです。
新しい世代の Adreno 320/Mali-T604 をまだ入手できていないので、
機会があればぜひ比べてみたいと思います。
関連エントリ
・iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
・Sillicon Studio MOBILE GPUMARK
MOBILE GPUMARK GEMS DP NB GPU Total
---------------------------------------------------------------------
iPhone5 A6 PowerVR SGX543MP3 751 902 474 4068 6195
iPad4 A6X PowerVR SGX554MP4 665 729 429 3943 5757
iPad mini A5 PowerVR SGX543MP2 582 695 362 2852 4491
Nexus 7 Tegra3 ULP GeForce(12) 362 623 231 3271 4487
EVO 3D ISW12HT MSM8660 Adreno220 431 564 245 2235 3475
iPod touch5 A5 PowerVR SGX543MP2 385 450 239 2338 3412
Galaxy S2 SC-02C Exynos4210 Mali-400MP4 577 730 174 1196 2677
Optimus Pad L-06C Tegra2 ULP GeForce(8) 121 220 81 1838 2260
Galaxy Nexus SC-04D OMAP4460 PowerVR SGX540 160 161 63 1273 1657
HONEYBEE 101K APE5R PowerVR SGX543MP 407 572 240 10673 11892 ※無効
・数値が大きいほうが高速。スコアは v1.0 時のもの
・GEMS=RIGID GEMS, DP=DEAD PARKING, NB= NATURAL BONE, GPU=GPU BENCHMARK
・CPU はすべて dual core 以上
iPad4 より iPhone5 の方が良い結果でした。
画面の解像度が小さい方が多少有利に働くのかもしれません。
SC-04D は非常に低速で、ひと通り完了を待つだけでもかなり時間がかかりました。
見かけの速度は速いですが、SGX540 はやはりひと世代前の GPU であることがわかります。
Galaxy S2 はそこそこのスコアですがディザがかかったような画面に見えるのが気になりました。
HONEYBEE 101K が突出した値に見えますが実は描画が正しく行われておりません。
もともとこの端末は OpenGL ES 2.0 で問題が生じることが多かったのですが、
GEMS,DP,NB の描画はラスタ状に一瞬見える程度でほとんど暗転しており、まるで
V-Sync を待たずにフレームバッファがクリアされているような画面になっています。
よってこのスコアは無効です。
GPU BENCHMARK の内容をさらに詳しく比較したのが下記の表です。
GPU BENCHMARK fill high many vert spec pix norm 420 800 1280
-------------------------------------------------------------------------------
iPhone5 PVR SGX543MP3 538 82 242 1013 871 343 310 364 203 102
iPad4 PVR SGX554MP4 403 137 296 765 726 412 393 234 269 172
iPad mini PVR SGX543MP2 484 62 158 640 560 241 222 274 144 67
Nexus 7 Tegra3 ULP GF(12) 185 56 116 828 571 288 235 667 218 107
EVO 3D 8660 Adreno220 283 98 123 384 378 320 279 191 132 47
iPod touch5 PVR SGX543MP2 286 39 130 601 513 183 164 243 123 56
Galaxy S2 4210 Mali-400MP4 253 37 26 193 138 159 145 196 29 20
Optimus Pad Tegra2 ULP GF(8) 75 22 77 572 409 125 102 317 98 41
Galaxy Nexus 4460 PVR SGX540 87 31 48 302 265 190 131 134 62 26
HONEYBEE101K PVR SGX543MP 7768 72 91 1038 595 385 416 161 102 45
・数値が大きいほうが高速。スコアは v1.0 時のもの
・fill=Fill Test, high=High Polygon Model, many=Many Models
・vert=Per Vertex Lighting, spec=Per Vertex Lighting & Specular
・pix=Per Pixel Lighting & Specular, norm=Per Pixel Lighting & Specular & Normal Map
・420=YEBIS Resolution 420x234, 800=YEBIS Resolution 800x450, 1280=YEBIS Resolution 1280x720
PowerVR 系は頂点(vert,spec)とピクセル(pix,norm)のスコアに極端な差が
ついていることがわかります。
Unified Shader である PowerVR 系はピクセル負荷が下がった分だけ頂点性能が
大きく向上します。
同じ Unified ながら全く性質が異なるのが Adreno 220 系で、
頂点(vert,spec)とピクセル(pix,norm)の差がわずかです。
全体の負荷を下げてもピーク性能が上がらない代わりに、ある程度複雑な
ピクセルシェーダーを走らせても性能が落ちにくい傾向があります。
Discrete Shader である Tegra は頂点性能が非常に高いことがわかります。
ピクセル負荷に影響を受けず、Tegra2 でもアンバランスに見えるほど
頂点スコアが高くなっています。
Tegra3 はピクセルも強化されていますが、PowerVR とは異なり
シェーダーの演算能力よりも fill が弱点になっているようです。
Tegra と正反対なのが同じ Discrete の Mali-400MP4 です。
4 core あるのはピクセルユニットだけなので、どうしても相対的に頂点性能が
足りないようです。
spec, pix を比べるとわかりますが、頂点でライティングするよりもむしろ
ピクセルでライティングした方が速くなっています。
GEMS, DP だけを見ると上位に食い込むスコアなので、NB を含めて
ハイポリ系が大きくスコアを落とす原因となっているようです。
HONEYBEE 101K では 420,800,1280 (YEBIS) の描画が完全に壊れていました。
よってこのスコアは正しくないことに注意してください。
それ以外は一見正しく描画されていましたが fill の値だけなぜか突出しています。
この機種だけ Android 2.3 であることも何か関係しているかもしれません。
実際のラインキングを見ると Snapdragon S4 (Adreno225/320) がかなり
上位を占めているようです。
・MOBILE GPUMARK - RANKING
ポストエフェクトなどスクリーン系エフェクトは TBDR の PowerVR 等とは
相性がよくなく、Mobile 系 GPU ではあまり用いられていませんでした。
このソフトでは非常によく動いており各種効果による違いもよくわかります。
PowerVR はかなり特徴が偏っているため、PC と同じアプローチだと他の GPU と
あまり差がつかないかもしれません。その点 Tegra の方が素直です。
また highp 演算が多い場合やピクセルの演算命令が複雑な場合は Adreno が有利です。
今後は様々な GPU が登場し、レンダリング手法も幅が広がってくるものと思われます。
Adreno 320 では TBR だけでなく Direct Rendering Mode も使い分けられるので、
このようなケースでも今まで以上に最適化が可能となるようです。
新しい世代の Adreno 320/Mali-T604 をまだ入手できていないので、
機会があればぜひ比べてみたいと思います。
関連エントリ
・iPad 4 Apple A6X GPU PowerVR SGX554 MP4 の速度
2013/09/23
iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
iPhone 5s の浮動小数点演算速度を命令単位で比べてみました。
A7 の CPU core は ARMv8 で 64bit 命令に対応していますが、
ここでの比較は AArch32 (32bit mode) の VFP/NEON 命令となっています。
64bit mode (AArch64) ではレジスタの個数や view が異なるので
違う結果になる可能性があります。
速いと思った iPhone 5 A6 の Swift から 1年、A7 はさらに強力な演算能力を
持っているようです。
ほぼ同クロック(?)でも最大で Swift の 3倍のスループットとなっており、
クロック差があるにも関わらず Cortex-A15 に匹敵するスコアが出ているようです。
特に NEON 命令が高速であることがわかります。
D と Q で差がないので、演算は 128bit 単位だと考えられます。
それでも Cortex-A15 の 64bit 2pipe で実現している速度に追いついているので、
あくまで憶測ですが A7 は 128bit pipe が複数存在している可能性があります。
反面、VFP の方は他の CPU とあまり違いが無いようで、
動作クロックの分だけ差がついています。
ただし Swift で極端に苦手だったスカラーの積和命令においては、
A7 できちんと欠点を克服していることがわかります。
それでもレイテンシは Swift 程ではないものの比較的大きくなっているようです。
ARMv8 のアーキテクチャの変更により、NEON 命令でも倍精度の演算が
サポートされました。
このテストは単精度の 32bit 浮動小数点演算ですが、もし倍精度で比較したなら
32bit ARMv7 世代とはさらに差が広がることになります。
x86 でも SSE2 が倍精度命令をサポートしたことにより、
互換性目的以外で FPU (x87) を使う必要がなくなりました。
実際に Windows x64 の 64bit mode では、
FPU を使わずに SSE 命令だけが用いられています。
同じように ARMv8 も Advanced NEON が倍精度をカバーしたことで、
VFP を分ける必要がなくなっています。
AArch32 では VFP 命令でも AArch64 では NEON のスカラーに
置き換わっていると考えられます。
Krait, Swift, Cortex-A15 と ARMv7-A の VFPv4 世代の CPU を
やっと揃えたと思ったら、更に新しい世代の CPU が登場してしまいました。
本当のパフォーマンスは AArch64 (64bit mode) で発揮されるので、
まだまだこれからです。
a:〜z: 個々の詳細と説明は過去の記事を参照してください。
Cortex-A8 を含めて多くの機種の結果を下記のページにまとめました。
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
関連エントリ
・2013/04/08:Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
A7 の CPU core は ARMv8 で 64bit 命令に対応していますが、
ここでの比較は AArch32 (32bit mode) の VFP/NEON 命令となっています。
64bit mode (AArch64) ではレジスタの個数や view が異なるので
違う結果になる可能性があります。
(1) (2) (3) (4) (5) (6) Nexus7 EVO 3D iPhone5 HTL21 Nexus10 iPhone5s Cortex-A9 Scorpion Swift Krait Cortex-A15 ? Tegra3 MSM8660 A6 APQ8064 Exynos5D A7 1.2GHz 1.2GHz 1.3GHz 1.5GHz 1.7GHz 1.3GHz? ----------------------------------------------------------------- a:m44 vmla_A Q 3.959 2.859 1.293 1.337 0.619 0.700 b:m44 vmla_B Q 2.002 1.136 1.359 0.931 0.569 0.670 c:m44 vmla_A D 3.980 3.053 1.669 1.889 0.557 0.649 d:m44 vmla_B D 2.003 1.434 1.329 1.532 0.568 0.745 A:m44 vfma_A Q ----- ----- 1.632 1.882 0.746 0.707 B:m44 vfma_B Q ----- ----- 1.594 0.695 0.840 0.699 e:fadds A 3.343 3.383 3.090 2.774 2.383 3.551 f:fmuls A 3.337 3.383 3.167 2.747 2.369 3.475 g:fmacs A 3.337 3.379 6.180 5.574 2.956 3.480 h:vfma.f32 A ----- ----- 6.180 2.747 2.957 3.480 i:vadd.f32 D A 3.426 3.377 3.091 2.762 1.183 1.031 j:vmul.f32 D A 3.421 3.383 3.168 2.746 1.478 1.545 k:vmla.f32 D A 3.792 3.380 3.166 5.604 1.480 1.567 l:vadd.f32 Q A 6.688 3.377 3.090 2.801 2.365 1.031 m:vmul.f32 Q A 6.681 3.384 3.166 2.761 2.364 1.548 n:vmla.f32 Q A 6.681 3.380 3.167 5.606 2.367 1.574 o:vfma.f32 D A ----- ----- 3.167 2.833 1.479 1.574 p:fadds B 3.347 5.917 6.181 3.467 2.956 6.953 q:fmuls B 4.195 5.917 6.180 3.556 3.558 6.652 r:fmacs B 6.688 8.451 12.361 6.298 5.912 9.867 s:vfma.f32 B ----- ----- 12.363 3.430 5.910 9.859 t:vadd.f32 D B 3.421 5.916 3.090 3.529 2.958 3.663 u:vmul.f32 D B 3.422 5.073 3.169 3.447 2.364 3.114 v:vmla.f32 D B 7.561 8.451 6.180 6.293 4.728 6.185 w:vadd.f32 Q B 6.705 5.916 3.090 3.457 2.961 3.659 x:vmul.f32 Q B 6.683 5.074 3.167 3.428 2.363 3.101 y:vmla.f32 Q B 7.532 8.457 6.179 6.372 4.729 6.199 z:vfma.f32 D B ----- ----- 6.181 3.437 4.730 6.188 ↑数値は実行時間(秒) 数値が小さい方が高速
速いと思った iPhone 5 A6 の Swift から 1年、A7 はさらに強力な演算能力を
持っているようです。
ほぼ同クロック(?)でも最大で Swift の 3倍のスループットとなっており、
クロック差があるにも関わらず Cortex-A15 に匹敵するスコアが出ているようです。
特に NEON 命令が高速であることがわかります。
D と Q で差がないので、演算は 128bit 単位だと考えられます。
それでも Cortex-A15 の 64bit 2pipe で実現している速度に追いついているので、
あくまで憶測ですが A7 は 128bit pipe が複数存在している可能性があります。
反面、VFP の方は他の CPU とあまり違いが無いようで、
動作クロックの分だけ差がついています。
ただし Swift で極端に苦手だったスカラーの積和命令においては、
A7 できちんと欠点を克服していることがわかります。
それでもレイテンシは Swift 程ではないものの比較的大きくなっているようです。
ARMv8 のアーキテクチャの変更により、NEON 命令でも倍精度の演算が
サポートされました。
このテストは単精度の 32bit 浮動小数点演算ですが、もし倍精度で比較したなら
32bit ARMv7 世代とはさらに差が広がることになります。
x86 でも SSE2 が倍精度命令をサポートしたことにより、
互換性目的以外で FPU (x87) を使う必要がなくなりました。
実際に Windows x64 の 64bit mode では、
FPU を使わずに SSE 命令だけが用いられています。
同じように ARMv8 も Advanced NEON が倍精度をカバーしたことで、
VFP を分ける必要がなくなっています。
AArch32 では VFP 命令でも AArch64 では NEON のスカラーに
置き換わっていると考えられます。
Krait, Swift, Cortex-A15 と ARMv7-A の VFPv4 世代の CPU を
やっと揃えたと思ったら、更に新しい世代の CPU が登場してしまいました。
本当のパフォーマンスは AArch64 (64bit mode) で発揮されるので、
まだまだこれからです。
a:〜z: 個々の詳細と説明は過去の記事を参照してください。
Cortex-A8 を含めて多くの機種の結果を下記のページにまとめました。
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
関連エントリ
・2013/04/08:Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
64bit mode (AArch64) で走らせてみました。
命令もレジスタの構造も異なるのでコードは別物です。
検証が不完全で、この結果には間違いが含まれている可能性があります。
scalar 演算は予想通り AArch64 の方が高速に実行できるようです。
AArch64 では NEON に統合されていると考えられるため
vector 時と同等になっています。
ARMv8 の AArch64 では SIMD レジスタの構造が変わっており、
すべて 128bit サイズになっています。
スカラー演算はその一部だけが用いられる仕組みで、
ちょうど x86 の SSE と同じです。
スカラーのロードでもレジスタ全体がクリアされます。
32bit (ARMv7) では、Q(128bit) x 8 = D(64bit) x 16 = S(32bit) x 32
が同じ領域でした。
D は S の 2個分で、Q には S レジスタが 4個含まれています。
AArch32 の場合、スカラー演算はレジスタの部分書き換えに相当するので
パイプラインの実行効率が落ちているのではないかと考えられます。
fmadd が遅いのは Swift と傾向が似ています。
AArch64 はこの命令だけ 4 オペランドでした。
A: と B: は下記の通り。
レジスタ番号が一致しているので非常に書きやすくなりました。
関連ページ
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・2013/04/08:Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
命令もレジスタの構造も異なるのでコードは別物です。
検証が不完全で、この結果には間違いが含まれている可能性があります。
(1) (2) (3) (4) (5) iPhone5 HTL21 Nexus10 iPhone5s iPhone5s Swift Krait Cortex-A15 AArch32 AArch64 A6 APQ8064 Exynos5D A7 A7 1.3GHz 1.5GHz 1.7GHz 1.3GHz? 1.3GHz? -------------------------------------------------------------------- a:m44 vmla_A Q 1.293 1.337 0.619 0.700 ----- b:m44 vmla_B Q 1.359 0.931 0.569 0.670 ----- c:m44 vmla_A D 1.669 1.889 0.557 0.649 ----- d:m44 vmla_B D 1.329 1.532 0.568 0.745 ----- A:m44 vfma_A Q 1.632 1.882 0.746 0.707 0.692 (fmla v) B:m44 vfma_B Q 1.594 0.695 0.840 0.699 0.696 (fmla v) e:fadds A 3.090 2.774 2.383 3.551 1.043 (fadd s) f:fmuls A 3.167 2.747 2.369 3.475 1.548 (fmul s) g:fmacs A 6.180 5.574 2.956 3.480 ----- h:vfma.f32 A 6.180 2.747 2.957 3.480 3.185 (fmadd s) i:vadd.f32 D A 3.091 2.762 1.183 1.031 1.031 (fadd.2s) j:vmul.f32 D A 3.168 2.746 1.478 1.545 1.545 (fmul.2s) k:vmla.f32 D A 3.166 5.604 1.480 1.567 ----- o:vfma.f32 D A 3.167 2.833 1.479 1.574 1.753 (fmla.2s) l:vadd.f32 Q A 3.090 2.801 2.365 1.031 1.039 (fadd.4s) m:vmul.f32 Q A 3.166 2.761 2.364 1.548 1.548 (fmul.4s) n:vmla.f32 Q A 3.167 5.606 2.367 1.574 ----- *:vfma.f32 Q A ----- ----- ----- ----- 1.696 (fmla.4s) p:fadds B 6.181 3.467 2.956 6.953 3.663 (fadd s) q:fmuls B 6.180 3.556 3.558 6.652 3.296 (fmul s) r:fmacs B 2.361 6.298 5.912 9.867 ----- s:vfma.f32 B 2.363 3.430 5.910 9.859 3.292 (fmadd s) t:vadd.f32 D B 3.090 3.529 2.958 3.663 3.643 (fadd.2s) u:vmul.f32 D B 3.169 3.447 2.364 3.114 3.289 (fmul.2s) v:vmla.f32 D B 6.180 6.293 4.728 6.185 ----- z:vfma.f32 D B 6.181 3.437 4.730 6.188 6.237 (fmla.2s) w:vadd.f32 Q B 3.090 3.457 2.961 3.659 3.641 (fadd.4s) x:vmul.f32 Q B 3.167 3.428 2.363 3.101 3.276 (fmul.4s) y:vmla.f32 Q B 6.179 6.372 4.729 6.199 ----- *:vfma.f32 Q B ----- ----- ----- ----- 6.226 (fmla.4s) ↑数値は実行時間(秒) 数値が小さい方が高速
scalar 演算は予想通り AArch64 の方が高速に実行できるようです。
AArch64 では NEON に統合されていると考えられるため
vector 時と同等になっています。
ARMv8 の AArch64 では SIMD レジスタの構造が変わっており、
すべて 128bit サイズになっています。
スカラー演算はその一部だけが用いられる仕組みで、
ちょうど x86 の SSE と同じです。
スカラーのロードでもレジスタ全体がクリアされます。
32bit (ARMv7) では、Q(128bit) x 8 = D(64bit) x 16 = S(32bit) x 32
が同じ領域でした。
D は S の 2個分で、Q には S レジスタが 4個含まれています。
AArch32 の場合、スカラー演算はレジスタの部分書き換えに相当するので
パイプラインの実行効率が落ちているのではないかと考えられます。
fmadd が遅いのは Swift と傾向が似ています。
AArch64 はこの命令だけ 4 オペランドでした。
A: と B: は下記の通り。
; A: m44 fmla A Q ldp q0, q1, [%0] ldp q2, q3, [%0,#32] ldp q4, q5, [%1] ldp q6, q7, [%1,#32] fmul.4s v8, v0, v4[0] fmla.4s v8, v1, v4[1] fmla.4s v8, v2, v4[2] fmla.4s v8, v3, v4[3] str q8, [%2] 〜 fmul.4s v8, v0, v7[0] fmla.4s v8, v1, v7[1] fmla.4s v8, v2, v7[2] fmla.4s v8, v3, v7[3] str q8, [%2,#48]
; B: m44 fmla B Q ldp q0, q1, [%0] ldp q4, q5, [%1] ldp q6, q7, [%1,#32] fmul.4s v8, v0, v4[0] fmul.4s v9, v0, v5[0] fmul.4s v10, v0, v6[0] fmul.4s v11, v0, v7[0] ldp q2, q3, [%0,#32] 〜 fmla.4s v8, v3, v4[3] fmla.4s v9, v3, v5[3] fmla.4s v10, v3, v6[3] fmla.4s v11, v3, v7[3] stp q8, q9, [%2] stp q10, q11, [%2,#32]
レジスタ番号が一致しているので非常に書きやすくなりました。
関連ページ
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・2013/04/08:Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・2013/01/09:Qualcomm APQ8064 GPU Adreno 320 の速度
・2012/12/23:Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
2013/09/25
iPhone 5s A7 64bit CPU と AArch64 (arm64)
スマートフォンが搭載しているメモリ容量は非常に速いペースで増加しています。
下記ページに日本で発売された端末のスペックを集めています。
・端末全リスト: 日本で発売されたスマートフォン・タブレット全リスト
ざっと眺めただけでもだいたいこんな感じ↓でしょうか。
特に Android デバイスで容量増加が著しいことがわかります。
このペースが今後も続くと考えるならば、来年には 32bit プロセッサの
壁にぶつかることになります。
RAM 容量が必要になる原因の一つとして画面の高解像度化が考えられます。
こちらも RAM 増量に負けないペースで進化してきました。
高解像度化に伴いアプリケーションで必要な描画リソース量も増加します。
解像度が高いと CPU 描画が間に合わないので、GPU のサポートも必須となります。
描画やレイヤーの合成など OS が管理する GPU リソースも大幅に
増えているのではないかと考えられます。
それ以外にも多数要因があると思いますが、
プロセッサ全体の性能向上とそれに合わせた要求から、
64bit 化は自然な流れだといえるでしょう。
しかしながら、今一番 RAM 容量が切迫しているのは Android の方です。
iOS は Android のおよそ半分の RAM 容量で動作しているため、
iPhone 5s の A7 が先陣を切ったのはかなり意外だと思いました。
64bit 化のメリットとしてアドレス空間の拡張が挙げられますが、
他にも様々なメリットがあります。
特に 64bit mode は互換性の枷から逃れるための大きなチャンスであり、
64bit 化においてはさまざまなアーキテクチャの変更が行われているようです。
ひとつは命令セットやレジスタなどのハードウエア的なアーキテクチャの
変更で、もうひとつはソフトウエア的な取り決めを再設計可能なことです。
全く使われないけど互換性のために残っている機能とか、
設計が古く都合が悪くなっていた仕様などを切り捨てることが出来ます。
(もちろん 32bit 動作 mode では互換性が保たれます)
ARM はロードストア型の RISC プロセッサですが、ひとつの
インストラクションに複数の機能が盛り込まれた多機能な命令体系でした。
例えば命令フィールドには Condition Code が含まれており、条件付き
実行が可能だったり、ソースオペランドに Shifter が組み込まれているなど
かなり独特です。
AArch64 では全く異なる別の命令セットになっています。
よりシンプルで実用的な設計になったと言われていますが、見たところ
便利そうな少々変わった機能も豊富で、十分 ARM らしいと感じました。
コンパイラの出力コードを比べると、関数によっては 64bit の方が命令数が
減ってコンパクトになっていることに気が付きます。
・Nexus 7 の Ubuntu で ARM の abi softfp と hard-float を比べる
上記のように ARMv7 では互換性の問題から softfp (soft-float) が
使われることがありました。
浮動小数点値も関数入出力では一旦整数レジスタを経由しており無駄が発生します。
AArch64 (64bit) ではこのような配慮が不要なので最初から hard-float 相当
となっているようです。
64bit 化が直接的な理由ではありませんが、
ABI やスタックフレームの改良ができることも実パフォーマンスに
影響を与えているのではないかと思います。
実際に Windows の x86/x64 でも、両方使っていると
同じ CPU 上でも明らかに 64bit の方が速いことに気が付きます。
64bit が苦手と言われていた Core 2 でもきちんと効果がでていました。
・CPU ベンチ
x64 でレジスタ数が倍増したことが一番の要因かもしれませんが、
ABI のようにソフトウエアのデザイン面で互換性保たなくて良いことも
大きなメリットになっていると考えられます。
iPhone のメモリ空間にはまだ余裕がありますが、
パフォーマンスの向上や、利用効率を上げて省電力につなげるという
意味でも iPhone 5s の 64bit 化は意味があるように思います。
昨日 ARMv8 AArch64 の浮動小数点演算速度比較のためにコンパイラの
出力コードを調べていたのですが、これ↓が最初なにかわかりませんでした。
意味のない or 命令はレジスタ間の move でした。(mov v5,v1)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 7 の Ubuntu で ARM の abi softfp と hard-float を比べる
・iPhone 5s の Apple A7 GPU
下記ページに日本で発売された端末のスペックを集めています。
・端末全リスト: 日本で発売されたスマートフォン・タブレット全リスト
ざっと眺めただけでもだいたいこんな感じ↓でしょうか。
2008 年 128MB 2009 年 128MB〜256MB 2010 年 256MB〜512MB 2011 年 512MB〜1GB 2012 年 1GB〜2GB 2013 年 1/2GB〜?
特に Android デバイスで容量増加が著しいことがわかります。
このペースが今後も続くと考えるならば、来年には 32bit プロセッサの
壁にぶつかることになります。
RAM 容量が必要になる原因の一つとして画面の高解像度化が考えられます。
こちらも RAM 増量に負けないペースで進化してきました。
2008 年 128MB 480x320 x1.0 2009 年 128MB〜256MB 480x320〜800x480 x2.5 2010 年 256MB〜512MB 854x480〜1024x768 x5.12 2011 年 512MB〜1GB 854x480〜1280x800 x6.67 2012 年 1GB〜2GB 854x480〜2560x1600 x26.67 2013 年 1/2GB〜? 1280x720〜?
高解像度化に伴いアプリケーションで必要な描画リソース量も増加します。
解像度が高いと CPU 描画が間に合わないので、GPU のサポートも必須となります。
描画やレイヤーの合成など OS が管理する GPU リソースも大幅に
増えているのではないかと考えられます。
それ以外にも多数要因があると思いますが、
プロセッサ全体の性能向上とそれに合わせた要求から、
64bit 化は自然な流れだといえるでしょう。
しかしながら、今一番 RAM 容量が切迫しているのは Android の方です。
iOS は Android のおよそ半分の RAM 容量で動作しているため、
iPhone 5s の A7 が先陣を切ったのはかなり意外だと思いました。
64bit 化のメリットとしてアドレス空間の拡張が挙げられますが、
他にも様々なメリットがあります。
特に 64bit mode は互換性の枷から逃れるための大きなチャンスであり、
64bit 化においてはさまざまなアーキテクチャの変更が行われているようです。
ひとつは命令セットやレジスタなどのハードウエア的なアーキテクチャの
変更で、もうひとつはソフトウエア的な取り決めを再設計可能なことです。
全く使われないけど互換性のために残っている機能とか、
設計が古く都合が悪くなっていた仕様などを切り捨てることが出来ます。
(もちろん 32bit 動作 mode では互換性が保たれます)
ARM はロードストア型の RISC プロセッサですが、ひとつの
インストラクションに複数の機能が盛り込まれた多機能な命令体系でした。
例えば命令フィールドには Condition Code が含まれており、条件付き
実行が可能だったり、ソースオペランドに Shifter が組み込まれているなど
かなり独特です。
AArch64 では全く異なる別の命令セットになっています。
よりシンプルで実用的な設計になったと言われていますが、見たところ
便利そうな少々変わった機能も豊富で、十分 ARM らしいと感じました。
コンパイラの出力コードを比べると、関数によっては 64bit の方が命令数が
減ってコンパクトになっていることに気が付きます。
・Nexus 7 の Ubuntu で ARM の abi softfp と hard-float を比べる
上記のように ARMv7 では互換性の問題から softfp (soft-float) が
使われることがありました。
浮動小数点値も関数入出力では一旦整数レジスタを経由しており無駄が発生します。
AArch64 (64bit) ではこのような配慮が不要なので最初から hard-float 相当
となっているようです。
// AArch64 __Z5func3fff: ; @_Z5func3fff ; BB#0: fadd s0, s0, s1 fsub s0, s0, s2 ret lr __Z5func419__simd128_float32_tS_: ; @_Z5func419__simd128_float32_tS_ ; BB#0: fmul.4s v1, v0, v1 fadd.4s v0, v1, v0 ret lr
// AArch32 __Z5func3fff: @ @_Z5func3fff @ BB#0: vmov d18, r1, r1 vmov d20, r0, r0 vmov d16, r2, r2 vadd.f32 d18, d20, d18 vsub.f32 d0, d18, d16 vmov r0, s0 bx lr __Z5func419__simd128_float32_tS_: @ @_Z5func419__simd128_float32_tS_ @ BB#0: vmov d17, r2, r3 vmov d16, r0, r1 mov r0, sp vld1.32 {d18, d19}, [r0] vmul.f32 q9, q8, q9 vadd.f32 q8, q9, q8 vmov r0, r1, d16 vmov r2, r3, d17 bx lr
64bit 化が直接的な理由ではありませんが、
ABI やスタックフレームの改良ができることも実パフォーマンスに
影響を与えているのではないかと思います。
実際に Windows の x86/x64 でも、両方使っていると
同じ CPU 上でも明らかに 64bit の方が速いことに気が付きます。
64bit が苦手と言われていた Core 2 でもきちんと効果がでていました。
・CPU ベンチ
x64 でレジスタ数が倍増したことが一番の要因かもしれませんが、
ABI のようにソフトウエアのデザイン面で互換性保たなくて良いことも
大きなメリットになっていると考えられます。
iPhone のメモリ空間にはまだ余裕がありますが、
パフォーマンスの向上や、利用効率を上げて省電力につなげるという
意味でも iPhone 5s の 64bit 化は意味があるように思います。
昨日 ARMv8 AArch64 の浮動小数点演算速度比較のためにコンパイラの
出力コードを調べていたのですが、これ↓が最初なにかわかりませんでした。
orr.16b v5, v1, v1
意味のない or 命令はレジスタ間の move でした。(mov v5,v1)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 7 の Ubuntu で ARM の abi softfp と hard-float を比べる
・iPhone 5s の Apple A7 GPU
CPU ベンチに Snapdragon 800 MSM8974 Krait 400 の結果を追加しました。
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
・CPU benchmark
浮動小数点演算命令毎の実行速度
Krait 400 は動作 clock が高いこともあり非常に高速です。
上の結果では同じ ARMv7A VFPv4 世代の Cortex-A15 に匹敵し、
実行効率の差を動作クロックが十分補っていることがわかります。
またここでの Quad core は Cortex-A9, Krait, Krait 400 だけなので、
総合的なパフォーマンスでは高クロックかつ Quad core の Krait 400 が
最も高いスコアになることが予想できます。
NEON 命令は 64bit と 128bit の差がなく、Cortex-A15 と違い 128bit
単位となっています。
vfma (FMA) よりも vmla が 2倍遅かった Krait 無印 (3) と比べて、
Krait 400 (7) では vmla も vfma に近い速度が出ています。
同じ Krait でも傾向が異なっており、様々な改良が施されているようです。
同時にあらためて A7 Cyclone の単 core 性能が非常に高いこともわかります。
A7 Cyclone の結果は 2個ありますが、
(5) は ARMv8 AArch32 (armv7) 32bit モードの結果で
(6) は ARMv8 AArch64 (arm64) 64bit モードでの結果です。
以下テスト端末の詳細
下記はもうひとつのCPUベンチの結果です。
専用命令を使っている 1. が一桁高速なのは当然ですが、64bit アーキテクチャ
の A7 も十分高速です。
新 core + クロック数が最も高い Krait 400 はそれらに次ぐ速度となりました。
テスト内容の詳細はこちらから。
テストに使った Kindle Fire HDX 7 のデータは下記にも追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM CPU core 毎の浮動小数点演算速度の比較 (VFP/NEON)
・CPU benchmark
浮動小数点演算命令毎の実行速度
(1) (2) (3) (4) (5) (6) (7) Nexus7 iPad4 HTL21 Nexus10 iPhone5s iPhone5s KindleHDX7 Cortex-A9 Swift Krait Cortex-A15 Cyclone Cyclone Krait4 Tegra3 A6X APQ8064 Exynos5D A7 32 A7 64 MSM8974 1.2GHz 1.4GHz 1.5GHz 1.7GHz 1.3GHz 1.3GHz 2.2GHz ------------------------------------------------------------------------------ a:m44 vmla_AQ 3.959 1.204 1.337 0.619 0.700 ----- 0.661 b:m44 vmla_BQ 2.002 1.266 0.931 0.569 0.670 ----- 0.542 c:m44 vmla_AD 3.980 1.554 1.889 0.557 0.649 ----- 0.888 d:m44 vmla_BD 2.003 1.238 1.532 0.568 0.745 ----- 0.768 A:m44 vfma_AQ ----- 1.519 1.882 0.746 0.707 0.692 1.178 B:m44 vfma_BQ ----- 1.484 0.695 0.840 0.699 0.696 0.463 e:fadds A 3.343 2.878 2.774 2.383 3.551 1.043 1.864 f:fmuls A 3.337 2.953 2.747 2.369 3.475 1.548 1.867 g:fmacs A 3.337 5.757 5.574 2.956 3.480 ----- 2.052 h:vfma.f32 A ----- 5.756 2.747 2.957 3.480 3.185 1.864 i:vadd.f32 DA 3.426 2.877 2.762 1.183 1.031 1.031 1.866 j:vmul.f32 DA 3.421 2.950 2.746 1.478 1.545 1.545 1.864 k:vmla.f32 DA 3.792 2.951 5.604 1.480 1.567 ----- 2.051 o:vfma.f32 DA ----- 2.494 2.833 1.479 1.574 1.753 1.871 l:vadd.f32 QA 6.688 2.878 2.801 2.365 1.031 1.039 1.872 m:vmul.f32 QA 6.681 2.952 2.761 2.364 1.548 1.548 1.879 n:vmla.f32 QA 6.681 2.950 5.606 2.367 1.574 ----- 2.059 N:vfma.f32 QA ----- ----- ----- ----- ----- 1.696 ----- p:fadds B 3.347 5.756 3.467 2.956 6.953 3.663 ----- q:fmuls B 4.195 5.756 3.556 3.558 6.652 3.296 ----- r:fmacs B 6.688 11.514 6.298 5.912 9.867 ----- ----- s:vfma.f32 B ----- 11.513 3.430 5.910 9.859 3.292 ----- t:vadd.f32 DB 3.421 2.881 3.529 2.958 3.663 3.643 1.865 u:vmul.f32 DB 3.422 2.949 3.447 2.364 3.114 3.289 2.339 v:vmla.f32 DB 7.561 5.755 6.293 4.728 6.185 ----- 3.773 z:vfma.f32 DB ----- 5.755 3.437 4.730 6.188 6.237 2.340 w:vadd.f32 QB 6.705 2.879 3.457 2.961 3.659 3.641 1.875 x:vmul.f32 QB 6.683 2.950 3.428 2.363 3.101 3.276 2.340 y:vmla.f32 QB 7.532 5.759 6.372 4.729 6.199 ----- 3.746 Y:vfma.f32 QB ----- ----- ----- ----- ----- 6.226 ----- ・↑数値は実行時間(秒) 数値が小さい方が高速。single thread ・すべて単精度 32bit float の演算です。
Krait 400 は動作 clock が高いこともあり非常に高速です。
上の結果では同じ ARMv7A VFPv4 世代の Cortex-A15 に匹敵し、
実行効率の差を動作クロックが十分補っていることがわかります。
またここでの Quad core は Cortex-A9, Krait, Krait 400 だけなので、
総合的なパフォーマンスでは高クロックかつ Quad core の Krait 400 が
最も高いスコアになることが予想できます。
NEON 命令は 64bit と 128bit の差がなく、Cortex-A15 と違い 128bit
単位となっています。
vfma (FMA) よりも vmla が 2倍遅かった Krait 無印 (3) と比べて、
Krait 400 (7) では vmla も vfma に近い速度が出ています。
同じ Krait でも傾向が異なっており、様々な改良が施されているようです。
同時にあらためて A7 Cyclone の単 core 性能が非常に高いこともわかります。
A7 Cyclone の結果は 2個ありますが、
(5) は ARMv8 AArch32 (armv7) 32bit モードの結果で
(6) は ARMv8 AArch64 (arm64) 64bit モードでの結果です。
以下テスト端末の詳細
device OS SoC CPU core clock Arch VFP ---------------------------------------------------------------------------- (1)ASUS Nexus 7 (2012) A4.2 Tegra 3 Cortex-A9 x4 1.2GHz ARMv7A 32bit v3 (2)Apple iPad 4 i6.1 A6X Swift x2 1.4GHz ARMv7A 32bit v4 (3)HTC J butterfly HTL21 A4.1 APQ8064 Krait x4 1.5GHz ARMv7A 32bit v4 (4)Samsung Nexus 10 A4.2 Exynos5D Cortex-A15x2 1.7GHz ARMv7A 32bit v4 (5)Apple iPhone 5s i7.0 A7 Cyclone x2 1.3GHz ARMv8A 32bit v4 (6)Apple iPhone 5s i7.0 A7 Cyclone x2 1.3GHz ARMv8A 64bit Ad (7)Amazon Kindle Fire HDX7 A4.2 MSM8974 Krait 400 x4 2.2GHz ARMv7A 32bit v4
下記はもうひとつのCPUベンチの結果です。
SoC CPU clock compiler arch time MB/s MBS/GHz ------------------------------------------------------------------- 1.A7 Cyclone + AES 1.3GHz clang 5.0 arm64 0.129 837.54 644.26 2.A7 Cyclone 1.3GHz clang 5.0 arm64 1.04 104.27 80.21 3.A7 Cyclone 1.3GHz clang 5.0 armv7 1.16 93.04 71.57 4.MSM8974 Krait 400 2.2GHz gcc 4.8 armv7 1.41 76.67 34.85 5.Exynos 5D Cortex-A15 1.7GHz gcc 4.6 armv7 1.49 72.61 42.71 6.A6X Swift 1.4GHz clang 4.2 armv7 1.75 61.82 44.16 7.APQ8064 Krait 1.5GHz gcc 4.6 armv7 2.28 47.64 31.82 8.Tegra3 Cortex-A9 1.3GHz gcc 4.4.3 armv7 3.00 36.15 25.82 ・time の単位は秒 ・MB/s が大きいほうが高速 ・MBS/GHz = 1GHz あたりの処理速度
専用命令を使っている 1. が一桁高速なのは当然ですが、64bit アーキテクチャ
の A7 も十分高速です。
新 core + クロック数が最も高い Krait 400 はそれらに次ぐ速度となりました。
テスト内容の詳細はこちらから。
テストに使った Kindle Fire HDX 7 のデータは下記にも追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
関連エントリ
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
2014/05/06
Atom Bay Trail の浮動小数点演算能力
最近の Windows Tablet 等に使われている Bay Trail は、
新しい世代の Atom CPU core (Silvermont) を搭載しています。
HT 無しの 2/4 core で Out-of-Order となり、
旧 Atom と比べて実行性能が大きく向上しています。
Bay Trail の浮動小数点演算能力を調べてみました。
テスト環境は Bay Trail-D (Celeron J1900) なので厳密には Celeron となります。
結果、単精度の浮動小数点演算能力は 旧 Atom と変わらず、
1 core あたり 6 fop (add 4 + mul 2) / clock であることがわかりました。
旧 Atom 同様 add, mul の非対称な interleave が良い結果となっています。
その代わり倍精度演算は強化されており、旧 Atom の 2倍に相当します。
VFP Benchmark の結果から求めた cycle あたりの演算 (1coreあたり)
演算内容の内訳は次の通り
Scalar 時の結果など、より詳しくまとめた表を下記に載せています。
・cycle あたりの演算命令の詳細
以下は実際の J1900 の VFP Benchmark の結果です。
演算命令単位など、より詳細な結果をご覧になりたい方は こちら よりどうぞ。
各種 CPU のログを載せています。
理論値は 2GHz 4core で 48 GFLOPS なので、計測結果はより高い数値が出ています。
Turbo Boost が効いているためで、57.902 / 24 = 2.41 から
Multi Thread 時におよそ 2.4GHz で動作していることがわかります。
他の CPU との比較。
↑ Multi Thread 時の比較なので、Core 数が多く Clock が高い方が良い結果になります。
Mobile 向け CPU の性能向上が著しく、旧 Atom (Bonnell/Saltwell) では
ハイエンドの Quad core ARM に太刀打ちできませんでした。
新しい Atom Silvermont は十分な性能を有しています。
ただ浮動小数点演算はそれほど得意ではないようです。
おそらく AVX にも対応している Jaguar の方が上でしょう。
なお Tablet 向け Bay Trail-T は動作クロックが下がるため、
上記の表よりも低い値になると考えられます。
また、あくまで浮動小数点演算に特化した数値なので、
実際のアプリケーションの動作速度とは異なる点にご注意ください。
当 blog が浮動小数点演算能力のデータを集めているのは、ゲーム開発時の最適化が目的となります。
2014/05/15 訂正:
・Celeron J1900 の TB Clock の間違いを訂正いたしました 2.5GHz → 2.41GHz
・倍精度演算で旧 Atom の 2倍は間違いでした。旧 Atom と同等の性能と思われます。
申し訳ありませんでした。
関連ページ
・VFP Benchmark
・VFP Benchmark の計測結果
・CPU FLOPS 理論値と、cycle ごとの演算数まとめ
関連エントリ
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
新しい世代の Atom CPU core (Silvermont) を搭載しています。
HT 無しの 2/4 core で Out-of-Order となり、
旧 Atom と比べて実行性能が大きく向上しています。
Bay Trail の浮動小数点演算能力を調べてみました。
テスト環境は Bay Trail-D (Celeron J1900) なので厳密には Celeron となります。
結果、単精度の浮動小数点演算能力は 旧 Atom と変わらず、
1 core あたり 6 fop (add 4 + mul 2) / clock であることがわかりました。
旧 Atom 同様 add, mul の非対称な interleave が良い結果となっています。
VFP Benchmark の結果から求めた cycle あたりの演算 (1coreあたり)
Single FP Double FP --------------------------------------------------------- Atom Bonnell (旧Atom) 6 1.5 Atom Silvermont (新) 631.5 (Bay Trail) Core 2 Duo 8 4 Core i7 Sandy Bridge 16 8 Core i7 Ivy Bridge 16 8 Core i7 Haswell 32 16 (未計測,予想値) Cortex-A9 4 1 Cortex-A15 8 1.4 Krait 8 2 (Snapdragon 800) Swift 8 1 (iPhone 5) Cyclone ARM64 16 8 (iPhone 5s)
演算内容の内訳は次の通り
Single FP Double FP SIMD(Vector) mul add mad mul add mad ------------------------------------------------------- Atom Bonnell (旧Atom) 2 4 (6) 0.4 0.5 ? Atom Silvermont (新) 2 4 (6)1 2 (3)0.5 1.0 (1.5) Core 2 Duo 4 4 (8) 2 2 (3?) Core i7 Sandy Bridge 8 8 (16) 4 4 (8) Core i7 Ivy Bridge 8 8 (16) 4 4 (8) Cortex-A9 2 2 4 -- -- -- Cortex-A15 4 4 8 -- -- -- Krait 4 4 8 -- -- -- Swift 4 4 8 -- -- -- Cyclone ARM64 8 12 16 4 6 8
Scalar 時の結果など、より詳しくまとめた表を下記に載せています。
・cycle あたりの演算命令の詳細
以下は実際の J1900 の VFP Benchmark の結果です。
演算命令単位など、より詳細な結果をご覧になりたい方は こちら よりどうぞ。
各種 CPU のログを載せています。
Bay Traild-D Celeron J1900 2.0GHz (TB:2.5GHz2.41GHz) ARCH: x64 FPU: SSSE3 SSE4.1 SSE4.2 SingleT SP max: 14.477 GFLOPS SingleT DP max: 3.619 GFLOPS MultiT SP max: 57.902 GFLOPS MultiT DP max: 14.471 GFLOPS CPU core: 4 SSE: yes AVX: no FMA: no ~
理論値は 2GHz 4core で 48 GFLOPS なので、計測結果はより高い数値が出ています。
Turbo Boost が効いているためで、57.902 / 24 = 2.41 から
Multi Thread 時におよそ 2.4GHz で動作していることがわかります。
他の CPU との比較。
VFP Benchmark 実測値 clock core Single FP Double FP
-------------------------------------------------------------------
Bay Trail-D J1900 2.0GHz x4 57.9 GFLOPS 14.5 GFLOPS
Menlow Atom Z540 1.9GHz x1 10.9 GFLOPS 1.9 GFLOPS
Core 2 Duo P7350 2.0GHz x2 31.7 GFLOPS 12.7 GFLOPS
Ivy Birdge Core i5-3210M 2.5GHz x2 90.2 GFLOPS 45.2 GFLOPS
Sandy Bridge Core i7-2720QM 2.2GHz x4 162.3 GFLOPS 74.0 GFLOPS
Kindle HDX 7 Krait 400 2.2GHz x4 67.5 GFLOPS 16.9 GFLOPS
Tegra Note 7 Cortex-A15 1.8GHz x4 51.3 GFLOPS 9.8 GFLOPS
iPhone 5s Cyclone 1.3GHz x2 40.9 GFLOPS 20.5 GFLOPS
・ピーク値による比較、GFLOPS が大きい方が速い
↑ Multi Thread 時の比較なので、Core 数が多く Clock が高い方が良い結果になります。
Mobile 向け CPU の性能向上が著しく、旧 Atom (Bonnell/Saltwell) では
ハイエンドの Quad core ARM に太刀打ちできませんでした。
新しい Atom Silvermont は十分な性能を有しています。
ただ浮動小数点演算はそれほど得意ではないようです。
おそらく AVX にも対応している Jaguar の方が上でしょう。
なお Tablet 向け Bay Trail-T は動作クロックが下がるため、
上記の表よりも低い値になると考えられます。
また、あくまで浮動小数点演算に特化した数値なので、
実際のアプリケーションの動作速度とは異なる点にご注意ください。
当 blog が浮動小数点演算能力のデータを集めているのは、ゲーム開発時の最適化が目的となります。
2014/05/15 訂正:
・Celeron J1900 の TB Clock の間違いを訂正いたしました 2.5GHz → 2.41GHz
・倍精度演算で旧 Atom の 2倍は間違いでした。旧 Atom と同等の性能と思われます。
申し訳ありませんでした。
関連ページ
・VFP Benchmark
・VFP Benchmark の計測結果
・CPU FLOPS 理論値と、cycle ごとの演算数まとめ
関連エントリ
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
低消費電力の Desktop PC 向け CPU として Intel からは BeyTrail-D、
AMD からは Kabini が登場しています。
BayTrail-D Celeron J1900 と Kabini Athlon 5350 は、
どちらも 4 core CPU + マザーボードでちょうど 1万円。
価格帯もスペックも良く似ているので比べてみました。
・Intel Celeron Processor J1900
・AMD Athlon
浮動小数点演算能力
前前回の予想通り浮動小数点演算能力は Jaguar (Kabini/Athlon) の方が高くなっています。
J1900 (BayTrail) は動作クロックの高さで補っている形です。
再測定して気が付きましたが、以前のエントリで J1900 の倍精度演算の
性能評価が間違っていました。下記訂正しましたので申し訳ありませんでした。
「Atom Bay Trail の浮動小数点演算能力」
前回のコンパイル速度比較を Kabini でも試してみました。
驚くほど拮抗しています。
テストした環境は下記の通り。
Kabini は DDR3-1600 が使えますが、テスト環境では手持ちの DDR3-1333 を使用しています。
本来の能力よりもスコアが低くなっていると考えられますので予めご了承ください。
AES 変換テスト
AES-NI が使えるため Jaguar (Athlon/Kabini) の方が高速です。
同じアルゴリズム同士でもわずかに Jaguar の方が速いようです。
メモリ速度、CPU の動作クロックともに J1900 (BayTrail) の方が上なので、
Jaguar (Athlon/Kabini) は Core 性能そのものが高いのだと思われます。
簡単なシーンのレンダリング速度の比較
比べるまでもなく内蔵 GPU の性能では圧倒的な差があります。
RADEON は OpenGL で新しい API が使える点もポイントが高いです。
J1900 の GPU は使用していて少々性能不足を感じます。
CPU core の基本性能は Jaguar (Athlon/Kabini) の方が上。
メモリ速度や動作クロックを加味すると両者かなり近い性能になっています。
GPU は当然 RADEON (Athlon/Kabini) の方が速く、
性能差には数倍の開きがあります。
● BayTrail-D (Celeron J1900/Silvermont)
・消費電力が低くファンレス
・メモリ帯域が広い
● Kabini (Athlon 5350/Jaguar)
・浮動小数点演算能力が高い
・AVX/AES 命令に対応している
・GPU 性能が非常に高い
関連エントリ
・コンパイル時間の比較 BayTrail
・Atom Bay Trail の浮動小数点演算能力
AMD からは Kabini が登場しています。
BayTrail-D Celeron J1900 と Kabini Athlon 5350 は、
どちらも 4 core CPU + マザーボードでちょうど 1万円。
価格帯もスペックも良く似ているので比べてみました。
BayTrail-D Kabini Celeron J1900 Athlon 5350 ----------------------------------------------------- CPU core Silvermont Jaguar CPU cores 4 4 CPU clock 2.0-2.41GHz 2.05GHz RAM DDR3-1333 dual DDR3-1600 MEM BW 21.3GB/s 12.8GB/s L2 2MB 2MB SSE SSE4.2 SSE4.2 AVX -- AVX AES -- AES-NI CPU SP 24 fop/clock 32 fop/clock CPU SP FLOPS 57.81 GFLOPS 65.6 GFLOPS CPU DP 6 fop/clock 12 fop/clock CPU DP FLOPS 14.46 GFLOPS 24.6 GFLOPS GPU core Intel HD Graphics 3G RADEON R3 (GCN) GPU clock 688-854MHz 600MHz GPU SP 64 fop/clock 256 fop/clock GPU SP FLOPS 54.7 GFLOPS 153.6 GFLOPS OpenGL Windows OpenGL 4.0 OpenGL 4.3 OpenGL Linux OpenGL 3.3 OpenGL 4.3 TDP 10W 25W
・Intel Celeron Processor J1900
・AMD Athlon
浮動小数点演算能力
VFP Benchmark Celeron J1900 Athlon 5350
-------------------------------------------------
SingleT SP max: 14.477 GFLOPS 15.943 GFLOPS
SingleT DP max: 3.619 GFLOPS 6.127 GFLOPS
MultiT SP max: 57.902 GFLOPS 63.737 GFLOPS
MultiT DP max: 14.471 GFLOPS 24.504 GFLOPS
・値が大きいほうが高速
前前回の予想通り浮動小数点演算能力は Jaguar (Kabini/Athlon) の方が高くなっています。
J1900 (BayTrail) は動作クロックの高さで補っている形です。
演算能力/clock Single FP Double FP ----------------------------------------------- Celeron J1900 6 1.5 Athlon 5350 8 3
再測定して気が付きましたが、以前のエントリで J1900 の倍精度演算の
性能評価が間違っていました。下記訂正しましたので申し訳ありませんでした。
「Atom Bay Trail の浮動小数点演算能力」
前回のコンパイル速度比較を Kabini でも試してみました。
驚くほど拮抗しています。
flatlib3 Linux clock core RAM OS arch compiler time sec ------------------------------------------------------------------------- Kabini Athlon 5350 2.05GHz x4 8GB 14.04 x64 clang-3.5 54.8 BayTrail-D J1900 2.41GHz x4 8GB 14.04 x64 clang-3.5 54.6 ・time が小さい方が速い
テストした環境は下記の通り。
Test 環境 Celeron J1900 (Q1900B-ITX DDR3-1333 dual 8GB 21.3GB/s) Athlon 5350 (AM1l DDR3-1333 single 8GB 10.7GB/s)
Kabini は DDR3-1600 が使えますが、テスト環境では手持ちの DDR3-1333 を使用しています。
本来の能力よりもスコアが低くなっていると考えられますので予めご了承ください。
AES 変換テスト
AES CTR 599MByte Celeron J1900 Athlon 5350 ------------------------------------------------- Table1 18.708 18.964 Table2 15.409 14.600 Table3 14.902 12.374 AES-NI -- 4.238 ・単位は秒、値が小さい方が速い, Single Thread
AES-NI が使えるため Jaguar (Athlon/Kabini) の方が高速です。
同じアルゴリズム同士でもわずかに Jaguar の方が速いようです。
メモリ速度、CPU の動作クロックともに J1900 (BayTrail) の方が上なので、
Jaguar (Athlon/Kabini) は Core 性能そのものが高いのだと思われます。
簡単なシーンのレンダリング速度の比較
Ubuntu 14.04 GPU API fps ---------------------------------------------------------- Celeron J1900 Intel HD Graphics 3G OpenGL 3.3 17fps Athlon 5350 RADEON R3 OpenGL 4.3 89fps ・fps が大きい方が速い
比べるまでもなく内蔵 GPU の性能では圧倒的な差があります。
RADEON は OpenGL で新しい API が使える点もポイントが高いです。
J1900 の GPU は使用していて少々性能不足を感じます。
CPU core の基本性能は Jaguar (Athlon/Kabini) の方が上。
メモリ速度や動作クロックを加味すると両者かなり近い性能になっています。
GPU は当然 RADEON (Athlon/Kabini) の方が速く、
性能差には数倍の開きがあります。
● BayTrail-D (Celeron J1900/Silvermont)
・消費電力が低くファンレス
・メモリ帯域が広い
● Kabini (Athlon 5350/Jaguar)
・浮動小数点演算能力が高い
・AVX/AES 命令に対応している
・GPU 性能が非常に高い
関連エントリ
・コンパイル時間の比較 BayTrail
・Atom Bay Trail の浮動小数点演算能力
C++ で開発していた OpenGL/OpenGL ES の Project を Emscripten でビルドしてみました。
Native Code 向けのプログラムがそのままブラウザ内で動いています。
・Windows Firefox (29.0.1)

・Android Firefox (29.0.1)


Chrome では 7 fps 程度なので asm.js (Firefox) の効果は絶大でした。
Android でも十分な速度で動いています。
追記 2014/05/24: その後 Chrome でも 60fps 以上出るようになりました。詳しくはこちら
もともと OpenGL ES 2.0 / EGL に対応していたこともあり、
修正箇所はごく僅かで済んでいます。
使えなかった API は pthread だけで、
追加したのは Mouse/Touch/Keyboard などの Event 周りです。
Network (socket系) とサウンドは未着手。
ソースコード数は 600 file, 26万行ほど。
Native を想定して書いたコードが、拍子抜けするほどあっさりと
ブラウザ内で動いています。
以前から何度か NativeClient (NaCl) への対応化にも取り組んでいたのですが、
あまり本質的でない部分で躓いていました。
同期型 FileIO や Thread 周りといった API 制限だけでなく、
gcc (4.4) が古くて C++11 のコードが通らなかったためです。
その後確認したところ、ARM や pnacl では比較的新しいコンパイラに
置き換わってるようです。
今回使用した Emscripten では何も問題はなく Native 向け API もそのままです。
詳しい説明は次回。
● Emscripten
・emscripten wiki
Android では Java, iOS では Objective-C が使われているように、
プラットフォームによってアプリケーション記述言語はまちまちです。
ただ多くの場合 C/C++ も併用できることが多く、
C/C++ 言語 + OpenGL ES 2.0 の組み合わせは、
移植性の高い共通言語&API としての役割も担っています。
主にゲームで。
Web Browser も OpenGL ES 2.0 (WebGL) に対応しており、
NativeClient (NaCl) や Emscripten といった C/C++ のコードを
走らせる仕組みも登場しています。
C/C++ が使えるようになったことで、同じソースコードのまま
さらに多くの環境にアプリケーションを移植できるようになりました。
NaCl はコンパイルしたバイナリをブラウザ内で走らせますが、
Emscripten は仮想マシンとして JavaScript を利用しています。
ポインタを駆使した C Native なコードが JavaScript に変換されると聞いても
少々奇妙な印象を受けるかもしれません。
しかしながら JavaScript の性能向上は著しく、モバイル含めて
十分な速度で動いているこれらの結果にはやはり驚きを隠せません。
● 速度比較
1. 960x640 63万Tri/191万Vertices, 一部 Bone Animation あり
2. 960x640 63万Tri/191万Vertices
3. 960x640 6万Tri/19万Vertices
描画負荷を変えても速度が大きく変わらないものは CPU (JavaScript) 側の
限界と思われます。
Chrome, BayTrail-D, Kabini, Exynos 5D(Nexus10) が相当します。
また Native との差が少ないものは GPU 側も上限に近いことを意味しています。
Animation ありの場合骨の計算分 JS の負担が増えます。(頂点blendは GPU)
GPU に余裕があるのに 1. と 2. で大きく差が生じる場合は、
JavaScript の演算能力にも余裕がないことを示しています。
BayTrail-D は描画と CPU (JS) 両方共限界に達しているようです。
Native (X11+OpenGL) の 1./2. のテストでは、画面拡大時に速度が上がり、
オブジェクトが画面に全体が収まる場合は Firefox に近い速度まで下がります。
おそらく頂点性能が足りていないと思われます。
また同時に BayTraild の Firefox では拡大しても速度が上がらず一定なので、
JavaScript の動作速度も制限となっていることがわかります。
倍精度浮動小数点演算が苦手なことも影響しているかもしれません。
Kabini は外付けの GeForce がオーバースペック過ぎて CPU が追いついていません。
CPU (JS) 自体は BayTrail よりはかなり速いようです。
Android の Native (NDK+ES) は Fullscreen 動作となり、1920x1200, 2560x1600 で
レンダリングしているため他と条件が異なっています。
JavaScript の動作は Cortex-A15 よりも Krait/Krait 400 の方が高速でした。
Krait (APQ8064) は 3. のテストで制限がかかっていないため、
JavaScript 自体は余裕があるものの GPU で落ちているようです。
GPU の演算能力に余裕がある Krait 400 (MSM8974) はどのテストでも 60fps
超えています。
Desktop の Kabini よりも Krait/Krait 400 の方が JavaScript の
動作速度が速いこともわかります。
Cortex-A15 の速度が全然出ていませんが、VFP Benchmark の結果でも
倍精度演算は Krait の方が良い結果を出しています。
ただそれ以上に大きく差が開いているので、他にも何らかの要因があるのでは
ないかと思われます。
同じ Cortex-A15 のTegra Note 7 (Tegra4) でも試したかったのですが
RAM 容量が足りず動きませんでした。
今のところ Android + Firefox の組み合わせは RAM 2GB でぎりぎりです。
まだビルドを通したばかりでプロジェクトが巨大なせいもあります。
● まとめ
・Emscripten で C/C++ と OpenGL ES 2.0 のコードがブラウザ上でそのまま走る
・Firefox なら速度も速い (asm.js のおかげ)
・Android でも Firefox + Krait は高速動作(Cortex-A15 が遅い原因は不明)
追記 (2014/05/20) : Tegra4 (Cortex-A15) では高速に動作することを確認しました
追記 (2014/05/24) : Chrome で速度が遅かった原因がわかりました。修正により 60fps 以上出ています。
続きます:「Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (2)」
関連エントリ
・Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす 一覧
Native Code 向けのプログラムがそのままブラウザ内で動いています。
・Windows Firefox (29.0.1)

・Android Firefox (29.0.1)


Chrome では 7 fps 程度なので asm.js (Firefox) の効果は絶大でした。
Android でも十分な速度で動いています。
追記 2014/05/24: その後 Chrome でも 60fps 以上出るようになりました。詳しくはこちら
Windows 8.1 Firefox 29 60fps 以上 (Core i7-3615QM) FireOS 3.0 Firefox 29 60fps 以上 (Kindle Fire HDX7 MSM8974) Android 4.4 Firefox 29 34fps 前後 (Nexus 7 2013 APQ8064) Windows 8.1 Chrome 34 7fps 前後 (Core i7-3615QM) FireOS 3.0 Silk 3fps 前後 (Kindle Fire HDX7 MSM8974) Android 4.4 Chrome 34 3fps 前後 (Nexus 7 2013 APQ8064) ・fps の値が大きい方が高速 ・FireOS 3.0 = Android 4.2.2 相当
もともと OpenGL ES 2.0 / EGL に対応していたこともあり、
修正箇所はごく僅かで済んでいます。
使えなかった API は pthread だけで、
追加したのは Mouse/Touch/Keyboard などの Event 周りです。
Network (socket系) とサウンドは未着手。
ソースコード数は 600 file, 26万行ほど。
Native を想定して書いたコードが、拍子抜けするほどあっさりと
ブラウザ内で動いています。
以前から何度か NativeClient (NaCl) への対応化にも取り組んでいたのですが、
あまり本質的でない部分で躓いていました。
同期型 FileIO や Thread 周りといった API 制限だけでなく、
gcc (4.4) が古くて C++11 のコードが通らなかったためです。
その後確認したところ、ARM や pnacl では比較的新しいコンパイラに
置き換わってるようです。
今回使用した Emscripten では何も問題はなく Native 向け API もそのままです。
詳しい説明は次回。
● Emscripten
・emscripten wiki
Android では Java, iOS では Objective-C が使われているように、
プラットフォームによってアプリケーション記述言語はまちまちです。
ただ多くの場合 C/C++ も併用できることが多く、
C/C++ 言語 + OpenGL ES 2.0 の組み合わせは、
移植性の高い共通言語&API としての役割も担っています。
主にゲームで。
Web Browser も OpenGL ES 2.0 (WebGL) に対応しており、
NativeClient (NaCl) や Emscripten といった C/C++ のコードを
走らせる仕組みも登場しています。
C/C++ が使えるようになったことで、同じソースコードのまま
さらに多くの環境にアプリケーションを移植できるようになりました。
NaCl はコンパイルしたバイナリをブラウザ内で走らせますが、
Emscripten は仮想マシンとして JavaScript を利用しています。
ポインタを駆使した C Native なコードが JavaScript に変換されると聞いても
少々奇妙な印象を受けるかもしれません。
しかしながら JavaScript の性能向上は著しく、モバイル含めて
十分な速度で動いているこれらの結果にはやはり驚きを隠せません。
● 速度比較
1. 960x640 63万Tri/191万Vertices, 一部 Bone Animation あり
CPU GPU OS Browser fps ------------------------------------------------------------------------ Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Win+OpenGL 100fps 前後 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Firefox 60fps 以上*1 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Chrome 7fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 X11+OpenGL 8fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 Firefox 5fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 Chrome 動作せず Kabini Athlon5350 GeForce GTX650 Ubuntu14.04 X11+OpenGL 880fps 前後 Kabini Athlon5350 GeForce GTX650 Ubuntu14.04 Firefox 30fps 前後 Kabini Athlon5350 GeForce GTX650 Ubuntu14.04 Chrome 4fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 NDK+ES3.0 50fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Firefox 34fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Chrome 3fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 NDK+ES3.0 60fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 Firefox 8fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 Chrome 動作せず MSM8974 Krait 400 Adreno 330 FireOS 3.0 Firefox 60fps 以上*1 MSM8974 Krait 400 Adreno 330 FireOS 3.0 Silk fps 前後 ・fps の値が大きい方が高速 ・*1 : VSyncの上限 ・Firefox 29, Chrome 34 ・FireOS 3.0 = Android 4.2.2 相当 ・APQ8064 = Nexus 7(2013), Exynos5D = Nexus 10, MSM8974 = Kindle Fire HDX7
2. 960x640 63万Tri/191万Vertices
CPU GPU OS Browser fps ------------------------------------------------------------------------ Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Win+OpenGL 110fps 前後 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Firefox 60fps 以上*1 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Chrome 10fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 X11+OpenGL 8fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 Firefox 5fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 Chrome 動作せず Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 X11+OpenGL 900fps 前後 Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 Firefox 30fps 前後 Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 Chrome 6fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 NDK+ES3.0 50fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Firefox 30fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Chrome 5fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 NDK+ES3.0 60fps 以上*1 Exynos5D Cortex-A15 Mali-T604 Android4.4 Firefox 8fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 Chrome 動作せず MSM8974 Krait 400 Adreno 330 FireOS 3.0 Firefox 60fps 以上*1 MSM8974 Krait 400 Adreno 330 FireOS 3.0 Silk 5fps 前後 ・fps の値が大きい方が高速
3. 960x640 6万Tri/19万Vertices
CPU GPU OS Browser fps ------------------------------------------------------------------------ Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Win+OpenGL 520fps 前後 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Firefox 60fps 以上*1 Ivy Core i7-3615QM Intel HD 4000 Win8.1 x64 Chrome 15fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 X11+OpenGL 60fps 以上*1 BayTrail-D J1900 Intel HD Ubuntu14.04 Firefox 5fps 前後 BayTrail-D J1900 Intel HD Ubuntu14.04 Chrome 動作せず Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 X11+OpenGL 1020fps 前後 Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 Firefox 38fps 前後 Kabini Athlon 5350 GeForce GTX650 Ubuntu14.04 Chrome 9fps 前後 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 NDK+ES3.0 60fps 以上*1 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Firefox 60fps 以上*1 APQ8064 Krait 1.5GHz Adreno 320 Android4.4 Chrome 8fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 NDK+ES3.0 60fps 以上*1 Exynos5D Cortex-A15 Mali-T604 Android4.4 Firefox 9fps 前後 Exynos5D Cortex-A15 Mali-T604 Android4.4 Chrome 動作せず MSM8974 Krait 400 Adreno 330 FireOS 3.0 Firefox 60fps 以上*1 MSM8974 Krait 400 Adreno 330 FireOS 3.0 Silk 8fps 前後 ・fps の値が大きい方が高速
描画負荷を変えても速度が大きく変わらないものは CPU (JavaScript) 側の
限界と思われます。
Chrome, BayTrail-D, Kabini, Exynos 5D(Nexus10) が相当します。
また Native との差が少ないものは GPU 側も上限に近いことを意味しています。
Animation ありの場合骨の計算分 JS の負担が増えます。(頂点blendは GPU)
GPU に余裕があるのに 1. と 2. で大きく差が生じる場合は、
JavaScript の演算能力にも余裕がないことを示しています。
BayTrail-D は描画と CPU (JS) 両方共限界に達しているようです。
Native (X11+OpenGL) の 1./2. のテストでは、画面拡大時に速度が上がり、
オブジェクトが画面に全体が収まる場合は Firefox に近い速度まで下がります。
おそらく頂点性能が足りていないと思われます。
また同時に BayTraild の Firefox では拡大しても速度が上がらず一定なので、
JavaScript の動作速度も制限となっていることがわかります。
倍精度浮動小数点演算が苦手なことも影響しているかもしれません。
Kabini は外付けの GeForce がオーバースペック過ぎて CPU が追いついていません。
CPU (JS) 自体は BayTrail よりはかなり速いようです。
Android の Native (NDK+ES) は Fullscreen 動作となり、1920x1200, 2560x1600 で
レンダリングしているため他と条件が異なっています。
JavaScript の動作は Cortex-A15 よりも Krait/Krait 400 の方が高速でした。
Krait (APQ8064) は 3. のテストで制限がかかっていないため、
JavaScript 自体は余裕があるものの GPU で落ちているようです。
GPU の演算能力に余裕がある Krait 400 (MSM8974) はどのテストでも 60fps
超えています。
Desktop の Kabini よりも Krait/Krait 400 の方が JavaScript の
動作速度が速いこともわかります。
Cortex-A15 の速度が全然出ていませんが、VFP Benchmark の結果でも
倍精度演算は Krait の方が良い結果を出しています。
ただそれ以上に大きく差が開いているので、他にも何らかの要因があるのでは
ないかと思われます。
同じ Cortex-A15 のTegra Note 7 (Tegra4) でも試したかったのですが
RAM 容量が足りず動きませんでした。
今のところ Android + Firefox の組み合わせは RAM 2GB でぎりぎりです。
まだビルドを通したばかりでプロジェクトが巨大なせいもあります。
● まとめ
・Emscripten で C/C++ と OpenGL ES 2.0 のコードがブラウザ上でそのまま走る
・Firefox なら速度も速い (asm.js のおかげ)
・Android でも Firefox + Krait は高速動作
追記 (2014/05/20) : Tegra4 (Cortex-A15) では高速に動作することを確認しました
追記 (2014/05/24) : Chrome で速度が遅かった原因がわかりました。修正により 60fps 以上出ています。
続きます:「Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (2)」
関連エントリ
・Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす 一覧
2014/07/11
Android Wear LG G Watch (LG-W100) の速度(実測)
G Watch のスペックは Cortex-A7 1.2GHz Quad core ですが、
アプリケーションの実際のパフォーマンスは予想を大きく下回るものでした。
今回の計測結果から逆算すると 700MHz の Single core 相当となります。
VFP Benchmark による計測結果
同じ Cortex-A7 1.2GHz Quad core (MT8125) の Tablet との比較は下記の通り。
MT8125 の計測結果は 1.2GHz ほぼ想定通りの速度が出ています。
1.2(GHz) * 4(core) / 0.7(GHz) = 6.9 倍
以下詳細データ
Cortex-A7 は NEON も 32bit 単位なので VFP と同じ速度になります。
(Cortex-A7 の浮動小数点演算速度)
Krait ではなく Cortex-A7 が使われていることが結果からもわかります。
やはり cpu0 だけが 787MHz で動いているようです。(cpu1-3 は idle 状態)
ポリゴンの表示は可能です。

関連エントリ
・Android Wear LG G Watch (LG-W100)
・Android Wear LG G Watch の GPU
・MediaTek MT8125/8389 Cortex-A7 の浮動小数点演算速度
アプリケーションの実際のパフォーマンスは予想を大きく下回るものでした。
今回の計測結果から逆算すると 700MHz の Single core 相当となります。
VFP Benchmark による計測結果
SingleThread SP 最大 : 1.360 GFLOPS MultiThread SP 最大 : 1.360 GFLOPS
同じ Cortex-A7 1.2GHz Quad core (MT8125) の Tablet との比較は下記の通り。
単精度 Float LG G Watch Yoga Tablet MSM8226 MT8125 ---------------------------------------------------------- Single Thread 1.360 GFLOPS 2.374 GFLOPS (x1.7) Multi Thread 1.360 GFLOPS 9.474 GFLOPS (x7.0) ・GFLOPS の数値が大きいほうが高速
MT8125 の計測結果は 1.2GHz ほぼ想定通りの速度が出ています。
1.2(GHz) * 4(core) / 0.7(GHz) = 6.9 倍
以下詳細データ
SingleSP Single-Thread 命令 時間(sec) MFLOPS --------------------------------------------- VFP mul 6.331 631.8 VFP add 6.011 665.5 VFP fmacs 6.062 1319.7 VFP vfma.f32 s 6.032 1326.4 NEONx2 vmla.f32 d 11.833 1352.1 NEONx2 vfma.f32 d 11.859 1349.2 NEONx4 vmla.f32 q 23.621 1354.8 NEONx4 vfma.f32 q 23.542 1359.3 ・MFLOPS の数値が大きいほうが高速
SingleSP Multi-Thread (4 Thread) 命令 時間(sec) MFLOPS --------------------------------------------- VFP mul 24.405 655.6 VFP add 24.063 664.9 VFP fmacs 24.109 1327.3 VFP vfma.f32 s 24.049 1330.6 NEONx2 vmla.f32 d 47.458 1348.6 NEONx2 vfma.f32 d 47.653 1343.0 NEONx4 vmla.f32 q 94.490 1354.6 NEONx4 vfma.f32 q 98.163 1304.0 ・MFLOPS の数値が大きいほうが高速
Cortex-A7 は NEON も 32bit 単位なので VFP と同じ速度になります。
(Cortex-A7 の浮動小数点演算速度)
Krait ではなく Cortex-A7 が使われていることが結果からもわかります。
やはり cpu0 だけが 787MHz で動いているようです。(cpu1-3 は idle 状態)
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state 300000 0 384000 4 600000 73 787200 8799475 998400 174 1094400 109 1190400 2280
ポリゴンの表示は可能です。

関連エントリ
・Android Wear LG G Watch (LG-W100)
・Android Wear LG G Watch の GPU
・MediaTek MT8125/8389 Cortex-A7 の浮動小数点演算速度
2014/07/26
Android Wear VFP Benchmark
「Android Wear LG G Watch (LG-W100) の速度(実測)」で計測に使ったアプリを公開しました。
・VFP Benchmark
・Google Play: VFP Benchmark for Android Wear
命令単位の実行速度など、詳細な表は Smartphone/Tablet 側で表示することができます。
ログの書き出しも可能です。
よろしければどなたか Galaxy Gear Live の結果を教えて下さい。
Android Wear と Smartphone/Tablet の通信 API は対称で、どちらも同じコードになります。
Smartphone 側からデータを送ったり Android Wear の Activity を起動することができますし、
逆も同様に可能です。
Android Wear は Android を搭載した独立したデバイスなので、対等な扱いになっていることがわかります。
このアプリはログのビューアとして Smartphone/Tablet を利用しています。
関連エントリ
・Android Wear 3D のアナログ時計 (Watch Face)
・Android Wear の 3D 描画 と NDK r10
・Android Wear にゲームを移植
・Android Wear LG G Watch (LG-W100) の速度(実測)
・Android Wear LG G Watch (LG-W100)
・Android Wear LG G Watch の GPU
・VFP Benchmark
・Google Play: VFP Benchmark for Android Wear
命令単位の実行速度など、詳細な表は Smartphone/Tablet 側で表示することができます。
ログの書き出しも可能です。
よろしければどなたか Galaxy Gear Live の結果を教えて下さい。
Android Wear と Smartphone/Tablet の通信 API は対称で、どちらも同じコードになります。
Smartphone 側からデータを送ったり Android Wear の Activity を起動することができますし、
逆も同様に可能です。
Android Wear は Android を搭載した独立したデバイスなので、対等な扱いになっていることがわかります。
このアプリはログのビューアとして Smartphone/Tablet を利用しています。
関連エントリ
・Android Wear 3D のアナログ時計 (Watch Face)
・Android Wear の 3D 描画 と NDK r10
・Android Wear にゲームを移植
・Android Wear LG G Watch (LG-W100) の速度(実測)
・Android Wear LG G Watch (LG-W100)
・Android Wear LG G Watch の GPU
2014/07/29
Android x86 Binary Translator を試してみる
x86 の Atom を搭載した Android Tablet も増えてきました。
本来なら NDK を使用したアプリケーションの互換性が気になるところです。
ところが実際はほとんど問題が起こらず、想像以上にそのまま動作するものが多いようです。
最初から複数のアーキテクチャに対応しているアプリももちろんありますが、
x86 未対応でも動く仕組みが用意されています。
・Bay Trailが実現する、WindowsとAndroidが共存するタブレット
x86 の Android 端末は armeabi-v7a のコードを x86 に変換して実行することができます。
実際に試してみました。
ASUS MeMO Pad 7 ME176 (BayTrail-T Atom Z3745) を使い、
ARMv7A のバイナリ (so) だけ含んだ VFP Benchmark を走らせてみました。
NDK かつ assembler を使ったプログラムながら、きちんと動作していることがわかります。
下記はそれぞれのスクリーンショット。
CPU/FPU の種類も正しく判別している点に注目です。(理由は後述)
↓armeabi-v7a バイナリのみ含む場合

↓x86 バイナリのみ含む場合

結果のまとめ
ARM コードは単精度浮動小数点数命令で x86 の 69%、
倍精度でおよそ 53% の速度となっています。
ただしこれは最善ケースのみです。
Matrix の方が比較的現実的な数値に近いと思われます。
↓他の CPU との比較。
上の表では ARM Binary Translation は同クロックの Cortex-A9 よりも
若干遅い程度、動作クロックの分だけ Cortex-A9 よりも高速な結果となっています。
最近増えてきた低価格帯デバイスの Cortex-A7 Quad core よりは、
ずっと高速に演算できるでしょう。
ただしあくまでピーク演算能力の比較なので、
実アプリケーションに則した結果ではない点に注意してください。
演算命令の分布次第で速度が異なります。
例えば下の命令単位の結果を見ると変換された vmla が特に低速であることがわかります。
vmla を多用した最適化されたプログラムほど速度が遅くなるかもしれません。
上の表は今回の用途では適切なベンチマークではないので、参考程度にお願いします。
↑ FMA は無く VFPv3-D32 NEON 相当。
● ABI
第二 ABI として armeabi-v7a が指定されています。
同じ ARM でも armeabi (ARMv5TE) は変換対象とならないようです。
実際に armeabi だけのプログラムを走らせましたが実行できませんでした。
armeabi-v7a ではなく armeabi でビルドしている古いプログラムは
動作しないことになります。
対応アプリが 100% にならない理由の一つだと思われます。
● CPU Features
NDK に付属している CPU Features Library は、SSE,NEON 等の CPU 拡張命令が
使えるかどうかを返します。
このライブラリは Hardware Register MVFR (CPUID相当) を見ているのではなく、
基本的には /proc/cpuinfo から判断しています。
そのため lib (so) バイナリを x86 に変換するだけでは互換性が不十分です。
x86 の Binary Translator は ARM コードからアクセスした場合
/proc/cpuinfo も ARM 相当に置き換えているようです。
CPU Feature を正しく認識できているのはこの機能のおかげでしょう。
armeabi-v7a のコードから見える cpuinfo は下記の通りです。
本来なら NDK を使用したアプリケーションの互換性が気になるところです。
ところが実際はほとんど問題が起こらず、想像以上にそのまま動作するものが多いようです。
最初から複数のアーキテクチャに対応しているアプリももちろんありますが、
x86 未対応でも動く仕組みが用意されています。
・Bay Trailが実現する、WindowsとAndroidが共存するタブレット
x86 の Android 端末は armeabi-v7a のコードを x86 に変換して実行することができます。
実際に試してみました。
ASUS MeMO Pad 7 ME176 (BayTrail-T Atom Z3745) を使い、
ARMv7A のバイナリ (so) だけ含んだ VFP Benchmark を走らせてみました。
NDK かつ assembler を使ったプログラムながら、きちんと動作していることがわかります。
下記はそれぞれのスクリーンショット。
CPU/FPU の種類も正しく判別している点に注目です。(理由は後述)
↓armeabi-v7a バイナリのみ含む場合

↓x86 バイナリのみ含む場合

結果のまとめ
Z3745 x86 Z3745 ARM-BT --------------------------------------------------------- SingleFP Single-thread 8.95 6.14 69% DoubleFP Single-thread 2.80 1.48 53% SingleFP MultiT-hread 35.37 24.33 69% DoubleFP MultiT-tread 11.06 5.91 53% Matrix 4x4 Single-thread 3.06 1.79 59% Matrix 4x4 Multi-thread 12.26 7.23 59% ・プロセッサのピーク演算能力 ・単位は GFLOPS、数値が大きい方が高速 ・ARM-BT = ARM Binary Translation
ARM コードは単精度浮動小数点数命令で x86 の 69%、
倍精度でおよそ 53% の速度となっています。
ただしこれは最善ケースのみです。
Matrix の方が比較的現実的な数値に近いと思われます。
↓他の CPU との比較。
clock SP DP SP-MT DP-MT ------------------------------------------------------------------- BayTrail Z3745 ARM-BT x4 1.86GHz 6.14 1.48 24.33 5.91 ** BayTrail Z3745 x86 x4 1.86GHz 8.95 2.80 35.37 11.06 BayTrail J1900 x64 x4 2.41GHz 14.48 3.62 57.90 14.47 Atom z540 x1 1.86GHz 8.92 1.81 10.93 1.85 Tegra3 Cortex-A9 x4 1.30GHz 4.78 1.20 18.91 4.72 Tegra4 Cortex-A15 x4 1.80GHz 13.37 2.66 51.35 9.86 Snapdragon S4 Pro Krait x4 1.50GHz 11.95 3.01 47.81 11.75 Snapdragon 800 MSM8974 x4 2.20GHz 17.13 4.29 67.54 16.87 Rockchip RK3066 Cortex-A9 x2 1.60GHz 6.35 1.59 12.66 3.14 MediaTek MT8125 Cortex-A7 x4 1.20GHz 2.37 1.17 9.47 4.65 Apple A5 (iPad2) Cortex-A9 x2 1.00GHz 3.97 0.99 7.83 1.96 Apple A6 (iPad4) Swift x2 1.30GHz 10.86 1.82 21.50 3.57 Apple A7 (5s) Cyclone x2 1.40GHz 20.62 10.31 40.87 20.48
上の表では ARM Binary Translation は同クロックの Cortex-A9 よりも
若干遅い程度、動作クロックの分だけ Cortex-A9 よりも高速な結果となっています。
最近増えてきた低価格帯デバイスの Cortex-A7 Quad core よりは、
ずっと高速に演算できるでしょう。
ただしあくまでピーク演算能力の比較なので、
実アプリケーションに則した結果ではない点に注意してください。
演算命令の分布次第で速度が異なります。
例えば下の命令単位の結果を見ると変換された vmla が特に低速であることがわかります。
vmla を多用した最適化されたプログラムほど速度が遅くなるかもしれません。
上の表は今回の用途では適切なベンチマークではないので、参考程度にお願いします。
// armeabi-v7a (Binary Translation) * VFP/NEON (単精度 fp) single-thread sec MFLOPS MFLOPS ---------------------------------------------------------------- VFP fmuls (32bit x1) n8 : 3.954 1011.6 1011.6 VFP fadds (32bit x1) n8 : 3.332 1200.6 1200.6 VFP fmacs (32bit x1) n8 : 8.371 955.7 955.7 VFP vfma.f32 (32bit x1) n8 : - - - NEON vmul.f32 (32bit x2) n8 : 6.009 1331.4 1331.4 NEON vadd.f32 (32bit x2) n8 : 3.816 2096.6 2096.6 NEON vmla.f32 (32bit x2) n8 : 22.824 701.0 701.0 NEON vfma.f32 (32bit x2) n8 : - - - NEON vmul.f32 (32bit x4) n8 : 6.012 2661.2 2661.2 NEON vadd.f32 (32bit x4) n8 : 3.347 4780.6 4780.6 NEON vmla.f32 (32bit x4) n8 : 16.516 1937.5 1937.5 NEON vfma.f32 (32bit x4) n8 : - - -
↑ FMA は無く VFPv3-D32 NEON 相当。
// x86 * SSE/AVX (単精度 fp) single-thread sec MFLOPS MFLOPS ---------------------------------------------------------------- SSE mulss (32bit x1) n8 : 2.203 1816.0 1816.0 SSE addss (32bit x1) n8 : 2.152 1858.6 1858.6 SSE mulps (32bit x4) n8 : 4.292 3728.2 3728.2 SSE addps (32bit x4) n8 : 2.146 7457.2 7457.2 SSE mul+addps (32bit x4) n8 : 2.146 7456.3 7456.3 SSE ml+ad+addps (32bit x4) n6 : 1.877 8949.5 8949.5 SSE mulss (32bit x1) ns4 : 2.145 1864.4 1864.4 SSE addss (32bit x1) ns4 : 2.145 1864.7 1864.7 SSE mulps (32bit x4) ns4 : 4.291 3728.9 3728.9 SSE addps (32bit x4) ns4 : 2.153 7430.9 7430.9 AVX vmulps (32bit x8) n8 : - - - AVX vaddps (32bit x8) n8 : - - - AVX vmul+addps (32bit x8) n8 : - - - AVX vml+ad+adps (32bit x8) n6 : - - -
● ABI
ro.product.cpu.abi=x86 ro.product.cpu.abi2=armeabi-v7a
第二 ABI として armeabi-v7a が指定されています。
同じ ARM でも armeabi (ARMv5TE) は変換対象とならないようです。
実際に armeabi だけのプログラムを走らせましたが実行できませんでした。
armeabi-v7a ではなく armeabi でビルドしている古いプログラムは
動作しないことになります。
対応アプリが 100% にならない理由の一つだと思われます。
● CPU Features
NDK に付属している CPU Features Library は、SSE,NEON 等の CPU 拡張命令が
使えるかどうかを返します。
このライブラリは Hardware Register MVFR (CPUID相当) を見ているのではなく、
基本的には /proc/cpuinfo から判断しています。
そのため lib (so) バイナリを x86 に変換するだけでは互換性が不十分です。
x86 の Binary Translator は ARM コードからアクセスした場合
/proc/cpuinfo も ARM 相当に置き換えているようです。
CPU Feature を正しく認識できているのはこの機能のおかげでしょう。
armeabi-v7a のコードから見える cpuinfo は下記の通りです。
Processor : ARMv7 processor rev 1 (v7l) BogoMIPS : 1500.0 Features : neon vfp swp half thumb fastmult edsp vfpv3 Processor : ARMv7 processor rev 1 (v7l) BogoMIPS : 1500.0 Features : neon vfp swp half thumb fastmult edsp vfpv3
Tegra K1 を搭載した SHILED Tablet が発売されました。
SHIELD Tablet の CPU Core は Tegra 4 同様 32bit Cortex-A15 Quad ですが、
GPU の本気度がこれまでと違います。
ブランドイメージに反して GPU が非力だった Tegra シリーズも、
K1 でようやく NVIDIA らしいスペックになったと言えるでしょう。
・NVIDIA SHIELD
OpenGL ES 3.1 に対応しており、OpenGL 4.x 相当の AEP
「 GL_ANDROID_extension_pack_es31a 」が付いています。
Tegra 2/3 の ULP GeForce は Direct3D 9 世代の GPU から
GLES 2.0 仕様ぎりぎりまで機能を削減したものでした。
Tegra 4 の ULP GeForce は同じ Direct3D 9 世代の GPU core のまま
本来のあるべき機能を復活させたもの。
Tegra K1 は Direct3D 11 世代の GPU core を搭載しています。
Shader Core 数が少ないだけで、対応 API など機能的には desktop GPU との差が
なくなっています。
CPU の VFP Benchmark の結果はこちら。
下記ページにも追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
・VFP Benchmark Log
SHIELD Tablet の CPU Core は Tegra 4 同様 32bit Cortex-A15 Quad ですが、
GPU の本気度がこれまでと違います。
ブランドイメージに反して GPU が非力だった Tegra シリーズも、
K1 でようやく NVIDIA らしいスペックになったと言えるでしょう。
・NVIDIA SHIELD
GL_VENDOR: NVIDIA Corporation GL_RENDERER: NVIDIA Tegra GL_VERSION: OpenGL ES 3.1 340.00 Extension: GL_EXT_debug_marker GL_EXT_blend_minmax GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_EXT_copy_image GL_EXT_debug_label GL_EXT_draw_buffers_indexed GL_EXT_frag_depth GL_EXT_geometry_point_size GL_EXT_geometry_shader GL_EXT_gpu_shader5 GL_EXT_map_buffer_range GL_EXT_occlusion_query_boolean GL_EXT_primitive_bounding_box GL_EXT_robustness GL_EXT_separate_shader_objects GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_shader_io_blocks GL_EXT_shadow_samplers GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_tessellation_point_size GL_EXT_tessellation_shader GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map_array GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_view GL_EXT_unpack_subimage GL_KHR_debug GL_KHR_texture_compression_astc_ldr GL_NV_bgr GL_NV_bindless_texture GL_NV_blend_equation_advanced GL_NV_blend_equation_advanced_coherent GL_NV_copy_buffer GL_NV_copy_image GL_NV_draw_buffers GL_NV_draw_instanced GL_NV_draw_texture GL_NV_EGL_stream_consumer_external GL_NV_explicit_attrib_location GL_NV_fbo_color_attachments GL_NV_framebuffer_blit GL_NV_framebuffer_multisample GL_NV_generate_mipmap_sRGB GL_NV_instanced_arrays GL_NV_occlusion_query_samples GL_NV_non_square_matrices GL_NV_pack_subimage GL_NV_packed_float GL_NV_packed_float_linear GL_NV_pixel_buffer_object GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_NV_secure_context GL_NV_shadow_samplers_array GL_NV_shadow_samplers_cube GL_NV_sRGB_formats GL_NV_texture_array GL_NV_texture_border_clamp GL_NV_texture_compression_latc GL_NV_texture_compression_s3tc GL_NV_texture_compression_s3tc_update GL_NV_timer_query GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_image_atomic GL_OES_shader_multisample_interpolation GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_npot GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_vertex_array_object GL_OES_vertex_half_float GL_ANDROID_extension_pack_es31a
OpenGL ES 3.1 に対応しており、OpenGL 4.x 相当の AEP
「 GL_ANDROID_extension_pack_es31a 」が付いています。
Tegra 2 Cortex-A9 x2 ULP GeForce(8) OpenGL ES 2.0 Tegra 3 Cortex-A9 x4 ULP GeForce(12) OpenGL ES 2.0 Tegra 4 Cortex-A15 x4 ULP GeForce(72) OpenGL ES 2.0 Tegra K1 Cortex-A15 x4 GeForce Kepler(192) OpenGL ES 3.1 AEP/OpenGL 4.4
Tegra 2/3 の ULP GeForce は Direct3D 9 世代の GPU から
GLES 2.0 仕様ぎりぎりまで機能を削減したものでした。
Tegra 4 の ULP GeForce は同じ Direct3D 9 世代の GPU core のまま
本来のあるべき機能を復活させたもの。
Tegra K1 は Direct3D 11 世代の GPU core を搭載しています。
Shader Core 数が少ないだけで、対応 API など機能的には desktop GPU との差が
なくなっています。
CPU の VFP Benchmark の結果はこちら。
SingleT SP max: 17.136 GFLOPS SingleT DP max: 3.431 GFLOPS MultiT SP max: 70.174 GFLOPS MultiT DP max: 14.036 GFLOPS
下記ページにも追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
・VFP Benchmark Log
2014/11/08
Nexus 9 Tegra K1 と ARM 64bit Denver
iPhone 5s に遅れることおよそ 1年、
64bit 対応の Android と ARM64 端末がリリースされました。
Nexus 9 の CPU core は NVIDIA の Denver。
少々わかりにくいですが "processor" の行が 2つあるので dual core です。
vfpbenchmark は下記のとおり。
single core 時の浮動小数点演算能力はほぼ SHILED Tablet (Cortex-A15 2.2GHz)
と同等で、トータル性能では Core 数の分だけ落ちています。
あくまで 32bit の結果なので後ほど 64bit (AArch64) でも試してみたいと思います。
arm64-v8a, armeabi-v7a, armeabi 3つの ABI に対応していました。
Android が現在 NDK でサポートしている ABI は下記の 7種類です。
ちなみに iOS で開発用の lib を作ると 5種類。
GPU は OpenGL ES 3.1 の Context を返します。
対応しているテクスチャフォーマットは DXT, ETC1, ETC2/EAC, ASTC 。
詳細は下記ページに掲載しています。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
64bit 対応の Android と ARM64 端末がリリースされました。
Nexus 9 の CPU core は NVIDIA の Denver。
Processor : NVIDIA Denver 1.0 rev 0 (aarch64) processor : 0 processor : 1 Features : fp asimd aes pmull sha1 sha2 crc32 CPU implementer : 0x4e CPU architecture: AArch64 CPU variant : 0x0 CPU part : 0x000 CPU revision : 0 Hardware : Flounder Revision : 0000 Serial : 0000000000000000
少々わかりにくいですが "processor" の行が 2つあるので dual core です。
$ cat /sys/devices/system/cpu/online 0-1
vfpbenchmark は下記のとおり。
single core 時の浮動小数点演算能力はほぼ SHILED Tablet (Cortex-A15 2.2GHz)
と同等で、トータル性能では Core 数の分だけ落ちています。
あくまで 32bit の結果なので後ほど 64bit (AArch64) でも試してみたいと思います。
// Nexus 9 ARCH: ARMv7A CPU core: 2 VFP: VFPv4-D32 NEON FMA: Yes NEON: Yes SingleT SP max: 17.799 GFLOPS SingleT DP max: 4.423 GFLOPS MultiT SP max: 34.582 GFLOPS MultiT DP max: 8.719 GFLOPS
ro.product.cpu.abi=arm64-v8a ro.product.cpu.abilist=arm64-v8a,armeabi-v7a,armeabi ro.product.cpu.abilist32=armeabi-v7a,armeabi ro.product.cpu.abilist64=arm64-v8a
arm64-v8a, armeabi-v7a, armeabi 3つの ABI に対応していました。
Android が現在 NDK でサポートしている ABI は下記の 7種類です。
armeabi ARMv5TE armeabi-v7a ARMv7A VFPv3-D16 softfp (VFPv3-D32, NEON, hard-float) arm64-v8a ARMv8A (AArch64) x86 x86 (IA-32) x86_64 x64 mips MIPS32-R1 miips64 MIPS64
ちなみに iOS で開発用の lib を作ると 5種類。
armv7 ARMv7A VFPv3-D32+NEON softfp armv7s ARMv7A VFPv4-D32+NEON softfp arm64 ARMv8A (AArch64) i386 x86 simulator x86_64 x86_64 simulator
GPU は OpenGL ES 3.1 の Context を返します。
GL_VERSION: OpenGL ES 3.1 NVIDIA 343.00 GL_RENDERER: NVIDIA Tegra GL_VENDOR: NVIDIA Corporation GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10
対応しているテクスチャフォーマットは DXT, ETC1, ETC2/EAC, ASTC 。
詳細は下記ページに掲載しています。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
2014/12/07
Android Wear Sony SmartWatch 3 SWR50 は速い
Sony SmartWatch3 の vfpbench スコアを送っていただきました。
LG G Watch (LG-W100) よりも速く、実際に 1.2GHz 出ているものと思われます。
またきちんと確認していませんが 2 core 生きている可能性もあります。
Motorola Moto 360 以外はどれも同じ Snapdragon 400 (MSM8226) の
横並びですが、予想外に違いがあるようです。
同様に Motorola Moto 360 の結果も頂いたので下記にまとめます。
スコアから見てこちらは Cortex-A8 の 1.0GHz で動いているものと見られます。
一見 Moto 360 が一番速いようにみえるかもしれません。
ピーク値で突出しているのは Cortex-A8 が 64bit 幅の NEON ALU を
持っているからです。(Cortex-A7 は 32bit幅)
実際は世代の古い SoC を採用しており Moto360 の CPU Core も数世代前のものです。
倍精度(DP)の結果を見てわかるように、VFP 演算では他の CPU の 1/5 以下の速度となります。
浮動小数点演算を多用している一般的なアプリケーション (NEON未使用) では
おそらく Moto 360 の方が低速でしょう。
この辺りは VFP Bencmark で命令毎の数値を比較するとよくわかります。
詳しいログを下記ページに追加しました
・VFP Benchmark Log
もし他のデバイスのログをお持ちの方がいましたらぜひ送ってください。
関連エントリ
・Android Wear VFP Benchmark
・ndroid Wear LG G Watch (LG-W100) の速度(実測)
LG G Watch (LG-W100) よりも速く、実際に 1.2GHz 出ているものと思われます。
またきちんと確認していませんが 2 core 生きている可能性もあります。
// SmartWatch 3 SWR50 // MSM8226 Cortex-A7 1.2GHz x4 (1.2GHz x2?) ARCH: ARMv7A CPU core: 4 VFP: VFPv4-D32 NEON FMA: Yes NEON: Yes Result SingleT SP max: 2.257 GFLOPS SingleT DP max: 1.144 GFLOPS MultiT SP max: 4.946 GFLOPS MultiT DP max: 2.278 GFLOPS
Motorola Moto 360 以外はどれも同じ Snapdragon 400 (MSM8226) の
横並びですが、予想外に違いがあるようです。
device SoC CPU SoCのspec 実質 ---------------------------------------------------------------------- LG G Watch LG-W100 Snapdragon 400 Cortex-A7 1.2GHz x4 0.8GHz x1 LG G Watch R LG-W110 Snapdragon 400 Cortex-A7 1.2GHz x4 ? Galaxy Gear Live Snapdragon 400 Cortex-A7 1.2GHz x4 ? ASUS ZenWatch WI500Q Snapdragon 400 Cortex-A7 1.2GHz x4 ? SmartWatch 3 SWR50 Snapdragon 400 Cortex-A7 1.2GHz x4 1.2GHz x2? Motolora Moto 360 TI OMAP3630 Cortex-A8 1.0GHz x1 1.0GHz x1
同様に Motorola Moto 360 の結果も頂いたので下記にまとめます。
スコアから見てこちらは Cortex-A8 の 1.0GHz で動いているものと見られます。
device (4.4W.2) SP-ST DP-ST SP-MT DP-MT ----------------------------------------------------------- LG G Watch LG-W100 1.419 0.742 1.367 0.676 GFLOPS SmartWatch 3 SWR50 2.257 1.144 4.946 2.278 GFLOPS Motolora Moto 360 3.739 0.126 3.376 0.125 GFLOPS * SP=単精度, DP=倍精度, ST=SingleThread, MT=MultiThread
一見 Moto 360 が一番速いようにみえるかもしれません。
ピーク値で突出しているのは Cortex-A8 が 64bit 幅の NEON ALU を
持っているからです。(Cortex-A7 は 32bit幅)
実際は世代の古い SoC を採用しており Moto360 の CPU Core も数世代前のものです。
倍精度(DP)の結果を見てわかるように、VFP 演算では他の CPU の 1/5 以下の速度となります。
浮動小数点演算を多用している一般的なアプリケーション (NEON未使用) では
おそらく Moto 360 の方が低速でしょう。
この辺りは VFP Bencmark で命令毎の数値を比較するとよくわかります。
詳しいログを下記ページに追加しました
・VFP Benchmark Log
もし他のデバイスのログをお持ちの方がいましたらぜひ送ってください。
関連エントリ
・Android Wear VFP Benchmark
・ndroid Wear LG G Watch (LG-W100) の速度(実測)
2015/02/12
Raspberry Pi 2 で速くなったコンパイル時間の比較
Raspberry Pi 2 を入手したので使ってみました。
ARM11 の Raspberry Pi と比べると格段に速くなっています。
VFP Benchmark の比較
ARM11 世代の VFP と比べると core あたり 2.6倍 (単精度時,クロック差含む)。
詳細な結果は下記に追加しました
・VFP Benchmark Log
Cortex-A7 は big.LITTLE でも省電力 core として用いられており、
単体の性能はあまり高くありません。
それでもエントリークラスのスマートフォンやタブレットでは
同じ Cortex-A7 Quad core のデバイスが多数リリースされています。
Snapdraogn 400 MSM8926/8226 や MT8125/8389/6582 など、
それなりにバランスが良い構成なのだと思われます。
下記は手持ちライブラリ(flatlib3)のビルド時間の比較です。
36分から 5分半へと現実的な数値になりました。
SD Card の速度に依存するためあまり正確ではないですが、
およそ 6.6倍で公称値通りといえそうです。
Raspberry Pi 2 でそのままビルドすると ARMv6 のバイナリが生成されるため、
gcc-4.8 -march=armv7-a mfpu=neon-vfpv4 のオプションでコンパイルしています。
下記はそれぞれの詳細です。
GPU 周りは変わっていないようです。下記ページに追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
ARM11 の Raspberry Pi と比べると格段に速くなっています。
VFP Benchmark の比較
CPU clock single fp double fp ---------------------------------------------------------------- Raspberry Pi B ARM1176 0.7GHz x1 0.674 GFLOPS 0.674 GFLOPS Raspberry Pi 2 Cortex-A7 0.9GHz x4 7.087 GFLOPS 3.472 GFLOPS
ARM11 世代の VFP と比べると core あたり 2.6倍 (単精度時,クロック差含む)。
詳細な結果は下記に追加しました
・VFP Benchmark Log
Cortex-A7 は big.LITTLE でも省電力 core として用いられており、
単体の性能はあまり高くありません。
それでもエントリークラスのスマートフォンやタブレットでは
同じ Cortex-A7 Quad core のデバイスが多数リリースされています。
Snapdraogn 400 MSM8926/8226 や MT8125/8389/6582 など、
それなりにバランスが良い構成なのだと思われます。
下記は手持ちライブラリ(flatlib3)のビルド時間の比較です。
36分から 5分半へと現実的な数値になりました。
SD Card の速度に依存するためあまり正確ではないですが、
およそ 6.6倍で公称値通りといえそうです。
Clock core ISA RAM gcc-4.8 clang-3.4 --------------------------------------------------------------------------- (1) Raspberry Pi B ARM1176JZF 0.7GHz x1 armv6l 0.5GB 36m18s (2) Raspberry Pi 2 Cortex-A7 0.9GHz x4 armv7l 1GB 5m29s (3) Nexus 7 2012 Cortex-A9 1.3GHz x4 armv7l 1GB 3m42s (4) Atom Z540 Bonnell 1.8GHz x1+HT x86 2GB 6m23s 6m18s (5) BayTrail-D J1900 Silvermont 2.0GHz x4 x86_64 8GB 1m30s 1m11s (6) Athlon-5350 Jaguar 2.0GHz x4 x86_64 8GB 1m33s 1m10s (7) Core i7-2720QM SandyBridge 2.2GHz x4+HT x86_64 16GB 0m31s 0m24s ・36m18s = 36分18秒 ・値は実行時間(3回の平均)。数値が小さい方が高速
Raspberry Pi 2 でそのままビルドすると ARMv6 のバイナリが生成されるため、
gcc-4.8 -march=armv7-a mfpu=neon-vfpv4 のオプションでコンパイルしています。
下記はそれぞれの詳細です。
(1) Raspberry Pi model B BMC2835 ARM1176JZF 0.7GHz x1 RAM 512MB, SD 16GB Debian wheezy armv6l (console) (2) Raspberry Pi 2 model B BMC2836 Cortex-A7 0.9GHz x4 RAM 1GB DDR2, SD 16GB Debian wheezy armv7l (console) gcc-4.8 (-march=armv7-a mfpu=neon-vfpv4) (3) Nexus 7 (2012) Tegra 3 T30L Cortex-A9 1.3GHz x4 RAM 1GB DDR3L, 8GB Ubuntu 13.04 armv7l (console) (4) VAIO Type P Atom Z540 Bonnell 1.86GHz x1+HT RAM 2GB, SSD 64GB Ubuntu 14.04LTS x86 (console) (5) Desktop PC BayTrail-D Celeron J1900 Silvermont 2.0GHz x4 RAM 8GB, HDD Ubuntu 14.04LTS x86_64 (6) Desktop PC Athlon-5350 Jaguar 2.0GHz x4 RAM 8GB, HDD Ubuntu 14.04LTS x86_64 (7) Desktop PC Core i7-2720QM SandyBridge 2.2GHz x4+HT RAM 16GB, HDD Ubuntu 14.04LTS x86_64
GPU 周りは変わっていないようです。下記ページに追加しました。
・CPU/GPU OpenGL ES Extension (Mobile GPU)
2015/03/01
Nexus Player を GamePad&Mouse で使う、他
Google の Android TV 端末、Nexus Player を使ってみました。
UI は一般の Android とは大きく異なり TV を意識したもの。
操作は付属のリモコンを使うので Apple TV に似ています。
・Google Nexus Player
大きく異なっているのは単体でアプリが動作することで、Google Play Store からダウンロードできます。
ただし専用&対応アプリしか出てこないらしく検索してもタイトルは多くありません。
HOME に並んでるものもゲームとムービー等のコンテンツのみで実用系アプリは無し。
Chrome や GMail なども無く、検索でもこの辺りのアプリが見当たりませんでした。
micro USB 端子があるので PC につなげば adb 接続できます。
開発者メニューを有効にするには設定の端末情報から「 ビルド 」を何度も選択する必要あり。
USB 経由で install した場合は普通の Android アプリも動くようです。
ただし HOME 画面にはアイコンが表示されないため、実行には少々手間がかかります。
1. 設定 → アプリ → ダウンロードしたアプリ
2. 一覧から選択してから「開く」
HOME画面に表示させる場合は intent-filter の設定が必要です。
application に isGame="true" があるとアプリではなくゲーム側に分類されます。
通常の Android アプリを走らせた場合タッチ操作はできませんが、
vfpbenchmark のように標準の UI を使ったものはリモコンだけで操作できました。
(vfp benchmark の結果はこちら)
また USB Host が有効なので、タッチ操作が必要なアプリでもマウスを繋げばそれなりに使用することが出来ます。
BACK や HOME ボタンはないので、マウスの場合もリモコンは必要になります。
同様に USB を使った接続では PS3 や Xbox360 (USB版) のゲームコントローラも使うことが出来ました。
この辺りも通常の Android 端末と同様です。
専用のゲームパッドがなくてもひと通りゲーム操作できます。
ただし USB 接続は adb と併用できないので、ゲーム開発にはワイヤレスのコントローラが欲しくなります。
下記追加しました
・VFP Benchmark Log
・CPU/GPU OpenGL ES Extension (Mobile GPU)
GPU は Intel HD Graphics ではなく Apple A7 世代と同じ PowerVR G6430 です。
関連エントリ
・Android 5.0 Nexus Player x86 と対応 ABI
・iOS7 対応 SteelSeries Stratus ワイヤレスゲームコントローラー
・Android 用ゲームパッド BUFFALO Zeemote JS1 H
・Android 3.1 と GamePad のイベントの詳細 (2)
・Android 3.1 と GamePad のイベントコード
UI は一般の Android とは大きく異なり TV を意識したもの。
操作は付属のリモコンを使うので Apple TV に似ています。
・Google Nexus Player
大きく異なっているのは単体でアプリが動作することで、Google Play Store からダウンロードできます。
ただし専用&対応アプリしか出てこないらしく検索してもタイトルは多くありません。
HOME に並んでるものもゲームとムービー等のコンテンツのみで実用系アプリは無し。
Chrome や GMail なども無く、検索でもこの辺りのアプリが見当たりませんでした。
micro USB 端子があるので PC につなげば adb 接続できます。
開発者メニューを有効にするには設定の端末情報から「 ビルド 」を何度も選択する必要あり。
USB 経由で install した場合は普通の Android アプリも動くようです。
ただし HOME 画面にはアイコンが表示されないため、実行には少々手間がかかります。
1. 設定 → アプリ → ダウンロードしたアプリ
2. 一覧から選択してから「開く」
HOME画面に表示させる場合は intent-filter の設定が必要です。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
application に isGame="true" があるとアプリではなくゲーム側に分類されます。
<application android:isGame="true">
通常の Android アプリを走らせた場合タッチ操作はできませんが、
vfpbenchmark のように標準の UI を使ったものはリモコンだけで操作できました。
(vfp benchmark の結果はこちら)
また USB Host が有効なので、タッチ操作が必要なアプリでもマウスを繋げばそれなりに使用することが出来ます。
BACK や HOME ボタンはないので、マウスの場合もリモコンは必要になります。
同様に USB を使った接続では PS3 や Xbox360 (USB版) のゲームコントローラも使うことが出来ました。
この辺りも通常の Android 端末と同様です。
専用のゲームパッドがなくてもひと通りゲーム操作できます。
ただし USB 接続は adb と併用できないので、ゲーム開発にはワイヤレスのコントローラが欲しくなります。
下記追加しました
・VFP Benchmark Log
・CPU/GPU OpenGL ES Extension (Mobile GPU)
GPU は Intel HD Graphics ではなく Apple A7 世代と同じ PowerVR G6430 です。
関連エントリ
・Android 5.0 Nexus Player x86 と対応 ABI
・iOS7 対応 SteelSeries Stratus ワイヤレスゲームコントローラー
・Android 用ゲームパッド BUFFALO Zeemote JS1 H
・Android 3.1 と GamePad のイベントの詳細 (2)
・Android 3.1 と GamePad のイベントコード
2015/07/19
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
新しい iPod touch 6 は iPhone 4S 相当から 2世代飛んで一気に iPhone 6 世代へ移行しています。最も安価な iOS Device の底上げが行われました。
GPU も一番新しい PowerVR Series 6XT の世代へ。
RAM 容量も一段上がっています。
歴代 iOS Device との速度比較は下記の通りです。(vfpbenchmark)
浮動小数点演算のピーク値だけの比較なので実際のアプリケーションの速度とは異なります。ですが、浮動小数点演算の速度だけでも Apple の公称値である「CPU 速度で 6倍」に近い数値を得ることが出来ました。
M-SP: 35.5 (iPod touch 6) / 6.2 (iPod touch 5) = 5.7倍
また 32bit 世代 (A4~A6) と 64bit 世代 (A7/A8) の間に入る調度良い比較対象だったので Mac mini Early 2009 の結果も載せてみました。もちろん最新の Core i5/i7 には敵いません。Android や Desktop PC 含めた結果を下記に載せています。
・VFP Benchmark Log
GPU は ASTC 対応で PowerVR Series6XT (iOS GPUFamily2) を確認。
RAM は 1GB でした。
関連エントリ
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・VFP Benchmark 関連
CPU | SoC | iPhone | iPod | iPad | iPad mini |
---|---|---|---|---|---|
Cortex-A9 | A5 | iPhone 4S | iPod touch 5 | iPad2/iPad3 | mini |
Swift | A6 | iPhone 5/5c | -- | iPad4 | -- |
Cyclone | A7 | iPhone 5s | -- | iPad Air | mini2/mini3 |
Cyclone2 | A8 | iPhone 6/6p | iPod touch 6 | iPad Air2 | -- |
GPU も一番新しい PowerVR Series 6XT の世代へ。
GPU | PVR | iPhone | iPod | iPad | iPad mini |
---|---|---|---|---|---|
SGX543/554 | 5XT | iPhone 4S/5/5c | iPod touch 5 | iPad2/iPad3/iPad4 | mini |
G6430 | 6 | iPhone 5s | -- | iPad Air | mini2/mini3 |
GX6450/6850 | 6XT | iPhone 6/6p | iPod touch 6 | iPad Air2 | -- |
RAM 容量も一段上がっています。
RAM | iPhone | iPod | iPad | iPad mini |
---|---|---|---|---|
512MB | iPhone 4S | iPod touch 5 | iPad2 | mini |
1GB | iPhone 5/5c/5s/6/6p | iPod touch 6 | iPad3/iPad4/Air | mini2/mini3 |
2GB | -- | -- | iPad Air2 | -- |
歴代 iOS Device との速度比較は下記の通りです。(vfpbenchmark)
Device | SoC | CPU | Clock | S-SP | S-DP | M-SP | M-DP | |
---|---|---|---|---|---|---|---|---|
iPad Air 2 | A8X | Cyclone2 | x3 | 1.5GHz | 23.568 | 11.751 | 68.591 | 33.968 |
iPhone 5s | A7 | Cyclone | x2 | 1.3GHz | 20.621 | 10.313 | 40.871 | 20.480 |
iPad mini 2 | A7 | Cyclone | x2 | 1.3GHz | 20.373 | 10.223 | 40.616 | 20.238 |
iPod touch 6 | A8 | Cyclone2 | x2 | 1.1GHz | 17.964 | 8.899 | 35.530 | 17.775 |
Mac mini 2009 | Core 2 Duo | x2 | 2.0GHz | 15.916 | 6.365 | 31.662 | 12.724 | |
iPad 4 | A6X | Swift | x2 | 1.4GHz | 10.855 | 1.818 | 21.502 | 3.573 |
iPhone 5 | A6 | Swift | x2 | 1.3GHz | 10.094 | 1.710 | 20.029 | 3.398 |
iPad 2 | A5 | Cortex-A9 | x2 | 1.0GHz | 3.960 | 0.989 | 7.830 | 1.961 |
iPad mini | A5 | Cortex-A9 | x2 | 1.0GHz | 3.846 | 0.983 | 7.800 | 1.941 |
iPad 3 | A5X | Cortex-A9 | x2 | 1.0GHz | 3.394 | 0.983 | 7.752 | 1.954 |
iPod touch 5 | A5 | Cortex-A9 | x2 | 0.8GHz | 3.161 | 0.790 | 6.203 | 1.565 |
iPod touch 4 | A4 | Cortex-A8 | x1 | 0.8GHz | 3.139 | 0.112 | 3.139 | 0.112 |
S-SP = Single Thread 単精度 (GFLOPS) いずれも数値が大きいほうが高速 S-DP = Single Thread 倍精度 (GFLOPS) M-SP = Multi Thread 単精度 (GFLOPS) M-DP = Multi Thread 倍精度 (GFLOPS)
浮動小数点演算のピーク値だけの比較なので実際のアプリケーションの速度とは異なります。ですが、浮動小数点演算の速度だけでも Apple の公称値である「CPU 速度で 6倍」に近い数値を得ることが出来ました。
M-SP: 35.5 (iPod touch 6) / 6.2 (iPod touch 5) = 5.7倍
また 32bit 世代 (A4~A6) と 64bit 世代 (A7/A8) の間に入る調度良い比較対象だったので Mac mini Early 2009 の結果も載せてみました。もちろん最新の Core i5/i7 には敵いません。Android や Desktop PC 含めた結果を下記に載せています。
・VFP Benchmark Log
GPU は ASTC 対応で PowerVR Series6XT (iOS GPUFamily2) を確認。
GL_VERSION: OpenGL ES 3.0 Apple A8 GPU - 53.13 GL_RENDERER: Apple A8 GPU GL_VENDOR: Apple Inc. GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.00 Extension: GL_OES_standard_derivatives GL_KHR_texture_compression_astc_ldr GL_EXT_color_buffer_half_float GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_pvrtc_sRGB GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_filter_anisotropic GL_APPLE_clip_distance GL_APPLE_color_buffer_packed_float GL_APPLE_copy_texture_levels GL_APPLE_rgb_422 GL_APPLE_texture_format_BGRA8888 GL_IMG_read_format GL_IMG_texture_compression_pvrtc
RAM は 1GB でした。
HW INFO: Machine = iPod7,1 HW INFO: Model = N102AP HW INFO: Arch = N102AP HW INFO: ByteOrder = 1234 HW INFO: NCPU = 2 HW INFO: MemSize = 1039306752 HW INFO: UserMem = 862314496 HW INFO: PageSize = 16384 HW INFO: VectorUnit = 0 HW INFO: Float = 0
関連エントリ
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・VFP Benchmark 関連
2015/09/06
Apple Watch の CPU の種類と浮動小数点演算速度
VFP Benchmark を走らせてみました。
詳細な結果はこちら。
・VFP Benchmark Log
下記は抜粋です。
Single core で VFPv4 と NEON に対応していることがわかります。
ただし NEON でも結果はスカラーと同じ速度しか出ていません。(上の表の MFLOPS)
また倍精度の乗算速度も加算の 1/4 まで落ちています。
これらの特徴を踏まえると Cortex-A7 が使われているものと思われます。速度を見る限り実行クロックは 500MHz 程度でしょう。CPU core 毎の浮動小数点演算能力 (特徴) は下記にまとめています。
・CPU の浮動小数点演算能力の詳細
Apple S1 のアプリケーションプロセッサは Android Wear に使われている Snapdragon 400 と比べると少々非力です。CPU core は同じですがクロックはおよそ半分で Single core になります。
↓ 一応 Apple Watch で ChiRaKS 動きました。まだ操作と速度に問題があります。

関連エントリ
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・Android Wear Sony SmartWatch 3 SWR50 は速い
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android Wear VFP Benchmark
・ndroid Wear LG G Watch (LG-W100) の速度(実測)
・VFP Benchmark 関連
ARCH: ARMv7A FPU: VFPv4-D32 NEON SingleT SP max: 0.951 GFLOPS SingleT DP max: 0.470 GFLOPS MultiT SP max: 0.945 GFLOPS MultiT DP max: 0.469 GFLOPS CPU core: 1 NEON: yes FMA: yes
詳細な結果はこちら。
・VFP Benchmark Log
下記は抜粋です。
* VFP/NEON (single fp) sec MFLOPS MFLOPS -------------------------------------------------------------- VFP fmuls (32bit x1) n8 : 2.649 453.0 453.0 VFP fadds (32bit x1) n8 : 2.557 469.3 469.3 VFP fmacs (32bit x1) n8 : 2.586 928.2 928.2 NEON vmul.f32 (32bit x4) n8 : 10.097 475.4 475.4 NEON vadd.f32 (32bit x4) n8 : 10.182 471.4 471.4 NEON vmla.f32 (32bit x4) n8 : 10.165 944.4 944.4 * VFP/NEON (double fp) sec MFLOPS MFLOPS -------------------------------------------------------------- VFP fmuld (64bit x1) n8 : 10.164 118.1 118.1 VFP faddd (64bit x1) n8 : 2.554 469.8 469.8 VFP fmacd (64bit x1) n8 : 10.746 223.3 223.3
Single core で VFPv4 と NEON に対応していることがわかります。
ただし NEON でも結果はスカラーと同じ速度しか出ていません。(上の表の MFLOPS)
また倍精度の乗算速度も加算の 1/4 まで落ちています。
これらの特徴を踏まえると Cortex-A7 が使われているものと思われます。速度を見る限り実行クロックは 500MHz 程度でしょう。CPU core 毎の浮動小数点演算能力 (特徴) は下記にまとめています。
・CPU の浮動小数点演算能力の詳細
Apple S1 のアプリケーションプロセッサは Android Wear に使われている Snapdragon 400 と比べると少々非力です。CPU core は同じですがクロックはおよそ半分で Single core になります。
↓ 一応 Apple Watch で ChiRaKS 動きました。まだ操作と速度に問題があります。

関連エントリ
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・Android Wear Sony SmartWatch 3 SWR50 は速い
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android Wear VFP Benchmark
・ndroid Wear LG G Watch (LG-W100) の速度(実測)
・VFP Benchmark 関連
2015/10/30
ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)
Amazon Fire TV (2015) で vfpbench を走らせてみました。下記表の MT8173C (上 2つ) が Fire TV です。
(SP/DP/SP-MT/DP-MT の単位は MFLOPS GFLOPS,数値が大きい方が高速)
詳細な結果は下記に追加しています。(big core のみ計測しています)
・VFP Benchmark Log
Cortex-A72 はピーク性能に突出したところはなく core あたり 8 fop (単精度 SIMD4 FMA) と標準的。SIMD2 の結果から Cortex-A15 同様 64bit 2pipe の構成であることもわかります。
ただしスカラー命令にはかなり違いがあるようです。Cortex-A72 では NEON だけでなくスカラー命令も 2 pipe 並列に実行できるらしく、加算で Cortex-A15 のおよそ 2倍。これは AArch32 mode でも有効なので、ARMv7A でビルドしたバイナリでも 64bit CPU の方が高速に演算できることになります。
倍精度でも少々面白い結果になっています。AArch64 には倍精度浮動小数点演算の NEON 命令があるものの SIMD でも 2並列です。Cortex-A72 は 64bit x 2pipe なので、ピーク性能において NEON とスカラーの差がなくなっています。
AArch32 でも同じなので、倍精度 NEON 命令が使えない ARMv7A もピーク速度が落ちておらず AArch64 の NEON 相当の速度を維持しています。
下記は倍精度のみの抜粋です。AppleA7/TegraK1 は AArch32 と AArch64 で差が開いていますが Cortex-A72 はスコア差がありません。A7/K1 比でピーク速度で負けているものの AArch32 では逆転していることがわかります。
・CPU の浮動小数点演算能力の詳細
関連エントリ
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・VFP Benchmark 関連
SoC | CPU | clock | AArch | fop | SP | DP | SP-MT | DP-MT |
---|---|---|---|---|---|---|---|---|
MT8173C | Cortex-A72 | 2.0GHz x2 | 64 | 16 | 15.875 | 7.946 | 31.756 | 15.882 |
MT8173C | Cortex-A72 | 2.0GHz x2 | 32 | 16 | 15.864 | 7.934 | 31.771 | 15.885 |
Tegra4 | Cortex-A15 | 1.8GHz x4 | 32 | 32 | 13.371 | 2.655 | 51.345 | 9.860 |
AppleA7 | Cyclone | 1.3GHz x2 | 64 | 32 | 20.621 | 10.313 | 40.871 | 20.480 |
AppleA7 | Cyclone | 1.3GHz x2 | 32 | 32 | 20.608 | 4.038 | 40.924 | 8.021 |
TegraK1 | Denver | 2.3GHz x2 | 64 | 24 | 17.906 | 8.762 | 34.888 | 17.601 |
TegraK1 | Denver | 2.3GHz x2 | 32 | 24 | 18.043 | 4.297 | 34.177 | 8.702 |
詳細な結果は下記に追加しています。(big core のみ計測しています)
・VFP Benchmark Log
Cortex-A72 はピーク性能に突出したところはなく core あたり 8 fop (単精度 SIMD4 FMA) と標準的。SIMD2 の結果から Cortex-A15 同様 64bit 2pipe の構成であることもわかります。
ただしスカラー命令にはかなり違いがあるようです。Cortex-A72 では NEON だけでなくスカラー命令も 2 pipe 並列に実行できるらしく、加算で Cortex-A15 のおよそ 2倍。これは AArch32 mode でも有効なので、ARMv7A でビルドしたバイナリでも 64bit CPU の方が高速に演算できることになります。
倍精度でも少々面白い結果になっています。AArch64 には倍精度浮動小数点演算の NEON 命令があるものの SIMD でも 2並列です。Cortex-A72 は 64bit x 2pipe なので、ピーク性能において NEON とスカラーの差がなくなっています。
AArch32 でも同じなので、倍精度 NEON 命令が使えない ARMv7A もピーク速度が落ちておらず AArch64 の NEON 相当の速度を維持しています。
下記は倍精度のみの抜粋です。AppleA7/TegraK1 は AArch32 と AArch64 で差が開いていますが Cortex-A72 はスコア差がありません。A7/K1 比でピーク速度で負けているものの AArch32 では逆転していることがわかります。
SoC | CPU | clock | AArch | DP | DP-MT |
---|---|---|---|---|---|
MT8173C | Cortex-A72 | 2.0GHz x2 | AArch64 | 7.946 | 15.882 |
MT8173C | Cortex-A72 | 2.0GHz x2 | AArch32 | 7.934 | 15.885 |
SoC | CPU | clock | AArch | DP | DP-MT |
AppleA7 | Cyclone | 1.3GHz x2 | AArch64 | 10.313 | 20.480 |
AppleA7 | Cyclone | 1.3GHz x2 | AArch32 | 4.038 | 8.021 |
SoC | CPU | clock | AArch | DP | DP-MT |
TegraK1 | Denver | 2.3GHz x2 | AArch64 | 8.762 | 17.601 |
TegraK1 | Denver | 2.3GHz x2 | AArch32 | 4.297 | 8.702 |
・CPU の浮動小数点演算能力の詳細
関連エントリ
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・VFP Benchmark 関連
新しい Apple TV は Apple A8 搭載で Android TV や Fire TV 同様アプリケーション走らせることができるようになっています。vfpbench を試してみました。clock 数から計算すると Apple TV の CPU は 1.4GHz だと思われます。
詳細は下記に追加しています。
・VFP Benchmark Log
同等の TV 用プレイヤーデバイスとの比較。
(SP/DP/SP-MT/DP-MT の単位は GFLOPS, 数値が大きい方が高速)
GPU は下記の通り
SoC/CPU core が異なるもののなぜか GPU はみな PowerVR です。動作クロックは不明ですが型番上は Apple TV の GPU が一番性能が高いことになります。
なお Android TV は Nexus Player 以外にも存在しているため性能にはばらつきがあります。例えば NVIDIA SHILED も Android TV です。
下記ページも更新しました。
・Video Game Console スペック一覧
いずれも GameController に対応しており Game Console のような使い方も可能となっています。
Nexus Player, Fire TV は純正の Wireless Game Contoller が用意されていますし、Android に対応した Game Pad を USB 接続することも可能です。特に Fire TV はフルサイズの USB コネクタなので変換アダプタも不要。Apple TV は iOS 仕様の Bluetooth ゲームパッドを使うことができます。

↑左上から AppleTV, Fire TV, Nexus Player
Apple TV は厚みがある代わりに AC アダプタが不要です。

↑付属リモコン 左から Nexus Player, Fire TV, Apple TV
充電式で乾電池が不要な分だけ Apple TV のリモコンは薄型です。Nexus Player, Fire TV はどちらもリング状の方向キーでセンターが決定、左下に Back キー。Apple TV はカーソルの代わりにタッチパッドがついており押し込みで決定。MENU がバックキー相当です。
関連エントリ
・ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)
・Amazon Fire TV と OpenGL ES 3.1, TV Stick の OS
・Nexus Player を GamePad&Mouse で使う、他
・Android 5.0 Nexus Player x86 と対応 ABI
ARCH: ARMv8A FPU: AArch64 NEON SingleT SP max: 22.197 GFLOPS SingleT DP max: 11.105 GFLOPS MultiT SP max: 44.331 GFLOPS MultiT DP max: 22.084 GFLOPS CPU core: 2
詳細は下記に追加しています。
・VFP Benchmark Log
同等の TV 用プレイヤーデバイスとの比較。
device | CPU | SP | DP | SP-MT | DP-MT | ||
---|---|---|---|---|---|---|---|
Apple TV | Cyclone | 1.4GHz | 2 | 22.2 | 11.1 | 44.3 | 22.1 |
Fire TV 2015 | Cortex-A72/A53 | 2.0GHz | 2+2 | 15.9 | 7.9 | 31.8 | 15.9 |
Nexus Player | ilvermont | 1.8GHz | 4 | 8.7 | 2.7 | 33.9 | 10.7 |
GPU は下記の通り
device | SoC | GPU | API | ASTC |
---|---|---|---|---|
Apple TV | Apple A8 | PowerVR GX6450 | ES3.0/Metal | Y |
Fire TV 2015 | MT8173C | PowerVR GX6250 | ES3.1 | Y |
Nexus Player | Atom Z3560 | PowerVR G6430 | ES3.1 | N |
SoC/CPU core が異なるもののなぜか GPU はみな PowerVR です。動作クロックは不明ですが型番上は Apple TV の GPU が一番性能が高いことになります。
なお Android TV は Nexus Player 以外にも存在しているため性能にはばらつきがあります。例えば NVIDIA SHILED も Android TV です。
下記ページも更新しました。
・Video Game Console スペック一覧
いずれも GameController に対応しており Game Console のような使い方も可能となっています。
Nexus Player, Fire TV は純正の Wireless Game Contoller が用意されていますし、Android に対応した Game Pad を USB 接続することも可能です。特に Fire TV はフルサイズの USB コネクタなので変換アダプタも不要。Apple TV は iOS 仕様の Bluetooth ゲームパッドを使うことができます。
device | RAM | ROM | LAN | USB | SD | 電源 |
---|---|---|---|---|---|---|
Apple TV | 2GB | 32/64GB | Y | Type-C | -- | 内蔵 |
Fire TV 2015 | 2GB | 8GB | Y | USB2.0 | microSDXC | 専用ACアダプタ |
Nexus Player | 1GB | 8GB | N | microUSB | -- | 専用ACアダプタ |

↑左上から AppleTV, Fire TV, Nexus Player
Apple TV は厚みがある代わりに AC アダプタが不要です。

↑付属リモコン 左から Nexus Player, Fire TV, Apple TV
充電式で乾電池が不要な分だけ Apple TV のリモコンは薄型です。Nexus Player, Fire TV はどちらもリング状の方向キーでセンターが決定、左下に Back キー。Apple TV はカーソルの代わりにタッチパッドがついており押し込みで決定。MENU がバックキー相当です。
関連エントリ
・ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)
・Amazon Fire TV と OpenGL ES 3.1, TV Stick の OS
・Nexus Player を GamePad&Mouse で使う、他
・Android 5.0 Nexus Player x86 と対応 ABI