2012/09/30
iPhone 5 / A6 の CPU 速度 その 2
iOS iTunes Linpack による比較。
iPhone 5 / A6 は圧倒的な速度です。
A5/A5X の CPU はほぼ同一であることがわかります。
single thread でも Cortex-A8 と A9 の差が大きいため、浮動小数点演算
(おそらく倍精度)に VFP が用いられていると考えられます。
NEON (単精度)だと A8/A9 はほとんど差が付きません。
NVIDIA の Tegra 3 は Cortex-A9 の数を倍に増やして Quad core (+1) に強化
しましたが、Apple A6 は CPU Core そのものの演算能力が大きく上がっています。
CPU core 数や動作クロックだけでは性能を判断することはできません。
同じように Qualcomm の Krait (Snapdragon S4) も A8/A9 と比べて
CPU core の性能が上がっているはずです。
こちらはさらに Snapdragon APQ8064 など Quad core も登場する予定で、
同時に GPU も OpenGL ES 3.0 世代になります。
どの程度の性能が出るか楽しみです。
関連エントリ
・iPhone 5 / A6 の浮動小数点演算
・Android SXZ-PD10 Cortex-A5 の速度
・Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・Snapdragon の本当の浮動小数点演算能力
・iPad2 A5 と浮動小数演算 VFP/NEON
・Tegra2 Cortex-A9 と浮動小数演算
・Snapdragon と浮動小数演算速度
・ARM Cortex-A8 の NEON と浮動小数演算最適化
max/avg FLOPS max/avg FLOPS SoC CPU core clock multi-thread single-thread ----------------------------------------------------------------------------- iPhone 5 Apple A6 ? x2 1.3GHz? 612.45/586.21 381.35/367.51 iPad 3 Apple A5X Cortex-A9 x2 1.0GHz 154.26/148.14 95.68/ 89.64 iPad 2 Apple A5 Cortex-A9 x2 1.0GHz 150.28/143.52 96.59/ 90.07 iPod touch 4 Apple A4 Cortex-A8 x1 800MHz 21.48/ 21.31 数値が大きいほうが高速。 設定値はデフォルトのままです。(500x10)
iPhone 5 / A6 は圧倒的な速度です。
A5/A5X の CPU はほぼ同一であることがわかります。
single thread でも Cortex-A8 と A9 の差が大きいため、浮動小数点演算
(おそらく倍精度)に VFP が用いられていると考えられます。
NEON (単精度)だと A8/A9 はほとんど差が付きません。
NVIDIA の Tegra 3 は Cortex-A9 の数を倍に増やして Quad core (+1) に強化
しましたが、Apple A6 は CPU Core そのものの演算能力が大きく上がっています。
CPU core 数や動作クロックだけでは性能を判断することはできません。
同じように Qualcomm の Krait (Snapdragon S4) も A8/A9 と比べて
CPU core の性能が上がっているはずです。
こちらはさらに Snapdragon APQ8064 など Quad core も登場する予定で、
同時に GPU も OpenGL ES 3.0 世代になります。
どの程度の性能が出るか楽しみです。
関連エントリ
・iPhone 5 / A6 の浮動小数点演算
・Android SXZ-PD10 Cortex-A5 の速度
・Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・Snapdragon の本当の浮動小数点演算能力
・iPad2 A5 と浮動小数演算 VFP/NEON
・Tegra2 Cortex-A9 と浮動小数演算
・Snapdragon と浮動小数演算速度
・ARM Cortex-A8 の NEON と浮動小数演算最適化
2012/09/25
iPhone 5 / A6 の浮動小数点演算
浮動小数点演算も全体的にパフォーマンスが上がっています。
CPU core が Cortex-A9 でないことは間違いありません。
特に NEON は 4並列 (128bit) になっており、Cortex-A8/A9 の 2倍、
Qualcomm の Snapdragon 系 CPU core である Scorpion/Krait に
匹敵する速度が出ているようです。
特筆すべきは NEON 命令の out-of-order で、順番依存による
速度低下がほぼ発生していないように見えます。
この点は Scorpion より有利で、同じ 128bit 演算でも大きく差がつくと
思われます。
ただし Qualcomm の新 CPU core 、Krait でも同等の性能が出ている
可能性があります。残念ながらまだ Krait を手に入れておらず
評価できていません。
VFP も全体的に高速ですが、VFP だけ積和命令が苦手なようです。
fmacs は fmuls/fadds の 2倍かかっており、2命令に展開されるか
レイテンシが大きいのだと思われます。この命令は A9/Scorpion より
わずかに遅くなっています。
NEON の場合は特に差がなく、vmul/vadd も積和命令 vmla も全く同じ速度で
走っており高速です。そのためピーク FLOPS には影響ありません。
全体的に速度が出やすい CPU です。
関連エントリ
・Android SXZ-PD10 Cortex-A5 の速度
・Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・Snapdragon の本当の浮動小数点演算能力
・iPad2 A5 と浮動小数演算 VFP/NEON
・Tegra2 Cortex-A9 と浮動小数演算
・Snapdragon と浮動小数演算速度
・ARM Cortex-A8 の NEON と浮動小数演算最適化
CPU core が Cortex-A9 でないことは間違いありません。
特に NEON は 4並列 (128bit) になっており、Cortex-A8/A9 の 2倍、
Qualcomm の Snapdragon 系 CPU core である Scorpion/Krait に
匹敵する速度が出ているようです。
特筆すべきは NEON 命令の out-of-order で、順番依存による
速度低下がほぼ発生していないように見えます。
この点は Scorpion より有利で、同じ 128bit 演算でも大きく差がつくと
思われます。
ただし Qualcomm の新 CPU core 、Krait でも同等の性能が出ている
可能性があります。残念ながらまだ Krait を手に入れておらず
評価できていません。
VFP も全体的に高速ですが、VFP だけ積和命令が苦手なようです。
fmacs は fmuls/fadds の 2倍かかっており、2命令に展開されるか
レイテンシが大きいのだと思われます。この命令は A9/Scorpion より
わずかに遅くなっています。
NEON の場合は特に差がなく、vmul/vadd も積和命令 vmla も全く同じ速度で
走っており高速です。そのためピーク FLOPS には影響ありません。
全体的に速度が出やすい CPU です。
関連エントリ
・Android SXZ-PD10 Cortex-A5 の速度
・Android 4.0 MIPS で RenderScript, ainol Novo 7 Paladin の浮動小数点演算速度
・Snapdragon の本当の浮動小数点演算能力
・iPad2 A5 と浮動小数演算 VFP/NEON
・Tegra2 Cortex-A9 と浮動小数演算
・Snapdragon と浮動小数演算速度
・ARM Cortex-A8 の NEON と浮動小数演算最適化
2012/09/02
Android SDK Eclipse の ADT で NDK のデバッグ
Android SDK は ADT r20 から NDK Plugin が追加されています。
開発手順が IDE 上で統合できるので非常に楽になりそうです。
まずは ADT の install 時に "NDK Plugins" が出てくるので追加しておきます。
1. Eclipse から Menu の Help → Install New Software...
2. [Add...] ボタン
Name: ADT
Location: https://dl-ssl.google.com/android/eclipse/
(すでに ADT を install しているならプルダウンから選ぶ)
3. Developer Tools と NDK Plugins にチェックを入れて Next
ADT の install 後に、NDK のパスを設定する必要があります。
1. Eclipse Menu の Window → Preferences
2. Android → NDK → NDK Location
3. android-ndk-r8b 等のフォルダを設定
プロジェクトを設定します。
1. プロジェクトを選択して右ボタンメニュー
2. Android Tools → Add Native Support...
3. ライブラリ名を登録
NDK Sample で試してみます。
1. eclipse 起動
2. Menu の File → New → Project... → Android Project from Existing Code
3. Root Directory に ndk の samples から任意のパス設定
・~ android-ndk-r8b\samples\hello-gl2 など
4. Projects のリストにチェックが入ってることを確認して Finish
5. 登録されたプロジェクトを選択して右ボタンメニューから
・Android Tools → Add Native Support...
cpp のソースコードを開くとエラーが出るので、
とりあえず Code Analysis をすべて切っています。
1. Menu の Window → Preferences → C/C++ → Code Analysis
2. チェックを全部外して OK
3. eclipse を起動し直す
これで NDK sample も build して実行できるようになりました。
1. Project を選択
2. Menu の Project → Build Project
3. Project 選択して右ボタンメニューから Run As → Android Application
Native コードをデバッグするには AndroidManifest.xml を書き換えておきます。
application に android:debuggable="true" を追加。
↓hello-gl2 の例
Native code もデバッグ実行できます。
1. Project を選択
2. 右ボタンメニューから Debug As → Android Native Application
break や step できました。
Wiki も更新しています。
・Android SDK/NDK install 手順
開発手順が IDE 上で統合できるので非常に楽になりそうです。
まずは ADT の install 時に "NDK Plugins" が出てくるので追加しておきます。
1. Eclipse から Menu の Help → Install New Software...
2. [Add...] ボタン
Name: ADT
Location: https://dl-ssl.google.com/android/eclipse/
(すでに ADT を install しているならプルダウンから選ぶ)
3. Developer Tools と NDK Plugins にチェックを入れて Next
ADT の install 後に、NDK のパスを設定する必要があります。
1. Eclipse Menu の Window → Preferences
2. Android → NDK → NDK Location
3. android-ndk-r8b 等のフォルダを設定
プロジェクトを設定します。
1. プロジェクトを選択して右ボタンメニュー
2. Android Tools → Add Native Support...
3. ライブラリ名を登録
NDK Sample で試してみます。
1. eclipse 起動
2. Menu の File → New → Project... → Android Project from Existing Code
3. Root Directory に ndk の samples から任意のパス設定
・~ android-ndk-r8b\samples\hello-gl2 など
4. Projects のリストにチェックが入ってることを確認して Finish
5. 登録されたプロジェクトを選択して右ボタンメニューから
・Android Tools → Add Native Support...
cpp のソースコードを開くとエラーが出るので、
とりあえず Code Analysis をすべて切っています。
1. Menu の Window → Preferences → C/C++ → Code Analysis
2. チェックを全部外して OK
3. eclipse を起動し直す
これで NDK sample も build して実行できるようになりました。
1. Project を選択
2. Menu の Project → Build Project
3. Project 選択して右ボタンメニューから Run As → Android Application
Native コードをデバッグするには AndroidManifest.xml を書き換えておきます。
application に android:debuggable="true" を追加。
↓hello-gl2 の例
~ <application android:debuggable="true" android:label="@string/gl2jni_activity"> ~
Native code もデバッグ実行できます。
1. Project を選択
2. 右ボタンメニューから Debug As → Android Native Application
break や step できました。
Wiki も更新しています。
・Android SDK/NDK install 手順