Archives

September 2012 の記事

iOS iTunes Linpack による比較。

                                                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 と浮動小数演算最適化


浮動小数点演算も全体的にパフォーマンスが上がっています。
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 と浮動小数演算最適化


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 の例
  ~
  <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 手順