月別アーカイブ: 2011年4月

iPad2 A5 と浮動小数演算 VFP/NEON

iPad2 のプロセッサ A5 は浮動小数演算が高速です。
” Cortex-A9 1GHz の dual core ” という構成は Tegra2 と同じですが、
Tegra2 が NEON 非対応なのに対して A5 は NEON に対応していることが
わかりました。

過去に発売された iPhone/iPad と互換性を保つには Cortex-A8 との
バイナリ互換が必要となります。NEON 搭載は当然としても、Cortex-A9 は
VFP の速度が桁違い(普通に戻った)ので全体的に速い、死角の少ない
演算能力となっているようです。

A4他       Cortex-A8   VFP低速   NEON
A5         Cortex-A9   VFP       NEON
Tegra2     Cortex-A9   VFP       無し
Snapdragon Scorpion    VFP       NEON

何度か書いてきましたが Cortex-A8 の VFP は低速です。
x86 で FPU の代わりに SSE が使えるように、Cortex-A8 では VFP の
代わりに SIMD 命令セット NEON を使うことができます。

ところが Android には Tegra2 のように NEON が無いデバイスも存在して
いるので NDK では非常に互換性を取りづらくなっています。

Tegra1 は ARM11 を採用しており Cortex-A8 が使われていません。
Tegra2 で NEON が見送られたのは、無理に Cortex-A8 と互換性を取る
必要がなかったからかもしれません。

iOS の場合は A5 も NEON に対応しておりシンプルです。
安心して NEON を使えますし、iPad2 では VFP を使っても ARM11 より
遅くなってしまうことも無いでしょう。

以下簡単な計測結果です。

iPod touch3 Cortex-A8 600MHz
vfp  fadds         47.04sec
vfp  fmuls         47.53sec
vfp  fmacs         74.47sec
neon vadd.f32 D     6.73sec
neon vmul.f32 D     6.71sec
neon vmla.f32 D     7.55sec
neon vadd.f32 Q    13.72sec
neon vmul.f32 Q    13.42sec
neon vmla.f32 Q    13.43sec


iPod touch4 A4 Cortex-A8 800MHz?
vfp  fadds         35.59sec
vfp  fmuls         35.62sec
vfp  fmacs         55.54sec
neon vadd.f32 D     5.28sec
neon vmul.f32 D     5.05sec
neon vmla.f32 D     5.68sec
neon vadd.f32 Q    10.11sec
neon vmul.f32 Q    10.09sec
neon vmla.f32 Q    10.09sec


iPad1 A4 Cortex-A8 1GHz
vfp  fadds         28.82sec
vfp  fmuls         28.46sec
vfp  fmacs         44.85sec
neon vadd.f32 D     4.04sec
neon vmul.f32 D     4.06sec
neon vmla.f32 D     4.57sec
neon vadd.f32 Q     8.12sec
neon vmul.f32 Q     8.11sec
neon vmla.f32 Q     8.13sec


iPad2 A5 Cortex-A9 1GHz dual (1/2)
vfp  fadds          4.11sec
vfp  fmuls          4.12sec
vfp  fmacs          4.11sec
neon vadd.f32 D     4.21sec
neon vmul.f32 D     4.21sec
neon vmla.f32 D     4.51sec
neon vadd.f32 Q     8.02sec
neon vmul.f32 Q     8.02sec
neon vmla.f32 Q     8.02sec


ZEN Touch2 i.MX51 Cortex-A8 800MHz
vfp  fadds         46.54sec
vfp  fmuls         51.60sec
vfp  fmacs         92.77sec
neon vadd.f32 D     5.15sec
neon vmul.f32 D     5.14sec
neon vmla.f32 D     5.76sec
neon vadd.f32 Q    10.29sec
neon vmul.f32 Q    10.31sec
neon vmla.f32 Q    10.29sec


ZiiO7 ZMS-08 HD Cortex-A8 1GHz
vfp  fadds         49.44sec
vfp  fmuls         54.71sec
vfp  fmacs         98.48sec
neon vadd.f32 D     5.47sec
neon vmul.f32 D     5.47sec
neon vmla.f32 D     6.15sec
neon vadd.f32 Q    10.94sec
neon vmul.f32 Q    10.95sec
neon vmla.f32 Q    10.96sec


Desire X06HT Snapdragon QSD8250 1GHz
vfp  fadds          4.31sec
vfp  fmuls          4.46sec
vfp  fmacs          4.44sec
neon vadd.f32 D     4.35sec
neon vmul.f32 D     4.34sec
neon vmla.f32 D     4.33sec
neon vadd.f32 Q     4.35sec
neon vmul.f32 Q     4.36sec
neon vmla.f32 Q     4.12sec


LuvPad Tegra2 Cortex-A9 1GHz dual (1/2)
vfp  fadds          4.05sec
vfp  fmuls          4.06sec
vfp  fmacs          4.05sec
neon vadd.f32 D     --
neon vmul.f32 D     --
neon vmla.f32 D     --
neon vadd.f32 Q     --
neon vmul.f32 Q     --
neon vmla.f32 Q     --

単独の 40命令を1億回ループして場合の実行時間です。
値が小さい方が高速です。

キャッシュ内で動作し純粋に CPU 命令の速度のみとなっています。
全く意味が無い演算が行われており、出力レジスタは競合しないように
インターリーブしています。

オーバーフローの可能性など細かい検証をしていないので
あくまで参考値でお願いします。

Scorpion (Snapdragon) も A5 同様に VFP NEON 両対応で極端な
速度低下もなく比較的そつなく動作します。
ただし Scorpion の NEON はレジスタの競合により、同じケースでも
Cortex-A8/A9 より速度が落ちることがあります。
また特定の入力値で速い数値を返すことがあります。
Q を含めて速度差がありませんが、もう少し意味のあるプログラムで検証
した方が良いかもしれません。

A5/Tegra2 は 1 core 分の速度です。
ピークの演算能力はこの 2倍となります。

A5 はおそらく現時点で最速ですが、今後続々と新 ARM プロセッサが登場して
くるでしょう。
もし新しい Tegra が出るなら、速度だけでなく互換性もお願いします。

関連エントリ
Tegra2 Cortex-A9 と浮動小数演算
Snapdragon と浮動小数演算速度
ARM Cortex-A8 の NEON と浮動小数演算最適化

Android 2.2 Creative ZEN Touch 2

Creative の Android 音楽プレイヤー、ZEN Touch 2 が
Android 2.2 に対応しました。

CREATIVE ZEN Touch 2

2.1 から 2.2 への変更は結構大きく、ZEN Touch 2 固有のいくつかの
問題も解消されているようです。

◎armeabi-v7a の native binary が動作する

OS 2.1 の時は NDK の armeabi-v7a でビルドされた Native Code を
ロード出来ませんでした。
2.2 へのアップグレードできちんと動作するようになっています。

◎armeabi-v7a 時に neon が使えるようになった

2.1 では cpuinfo の Features に neon がありませんでしたが 2.2 では
含まれています。NDK の判定コードがこの値を見ています。

◎Live 壁紙対応

他にも違いがあるかもしれません。

およそ一ヶ月前、3月末には同じく Creative の Android tablet ZiiO 7
にも Android 2.2 ファームウエアが公開されています。
これで回りにある Android デバイスはすべて 2.2 になりました。

関連エントリ
Android NDK r5 と armeabi, 浮動小数命令の種類
Android ZEN Touch 2 の CPU/GPU その2