月別アーカイブ: 2012年9月

iPhone 5 / A6 の CPU 速度 その 2

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

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

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 手順

iOS Settings

iOS の設定画面は、Settings.bundle の Root.plist で簡単に作成できます。
ただしデフォルト値を設定しても、アプリのインストール直後には UserDefaults に
反映されていません。

一度でも設定画面を開かないと初期値が反映されないことはわかったのですが、
iPad と iPhone で値が異なる問題で悩んでいました。
原因は iPhone の方画面が狭いからでした。

iPad では設定項目が全部画面内に収まっているので、設定を開くと全部表示されます。
iPhone だといくつか画面外に出ており、スクロールさせないと表示されない項目がありました。
画面外のもの、つまり一度も表示されていない項目には初期値が入らないようです。