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