日別アーカイブ: 2010年11月22日

Tegra2 Cortex-A9 と浮動小数演算

ARM の浮動小数演算命令は再び混沌としてきました。
Tegra2 の Cortex-A9 では NEON 命令が使えないようです。

テストしたのは LuvPad AD100。
Tegra2 搭載でメインプロセッサは Cortex-A9 の Dual Core (MPCore)。
以前作成していた ndk のコードが動かず、build 時の neon option を外すと
動作しました。

その代わり VFP が常識的な速度で走ります。
Cortex-A8 のように極端に遅くなることもなく、Snapdragon 系 CPU や
ARM11 + VFP のように普通に VFP で浮動小数演算を行うことができそうです。

NEON を使わなければ全く速度が出なかった Cortex-A8 の方が特殊だったのかも
しれません。

           core       VFP     NEON
--------------------------------------------------------------------
各種       Cortex-A8  超低速  高速   NEONが必ず搭載されている
Snapdragon Scorpion   高速    高速   スカラーだけなら VFP の方が良い
Tegra2     Cortex-A9  高速    ---    VFP のみ (A9 の neon は option)

VFP が遅いため ARM11 時代のコードは A8 で速度が落ちることがありました。
A9 ではそのような問題は起こらないと思われます。
その代わり A8 向けに NEON 最適化したプログラムは、少なくても Tegra2 では
使えないことになります。
Snapdragon は比較的どちらのコードもそつなく走るだろうと予想できます。
ただし若干特性は違います。

これでどのプラットフォームでも高速に走るバイナリの作成が難しくなりました。

; Cortex-A9 (Tegra2)
Processor       : ARMv7 Processor rev 0 (v7l)
Features        : swp half thumb fastmult vfp edsp vfpv3 vfpv3d16
; Snapdragon (QSD8250)
Processor       : ARMv7 Processor rev 2 (v7l)
Features        : swp half thumb fastmult vfp edsp thumbee neon

参考
ARM Cortex-A9 Processor

関連エントリ
Snapdragon と浮動小数演算速度
ARM Cortex-A8 の NEON と浮動小数演算最適化
NetWalker PC-Z1 Cortex-A8 の NEON 命令とメモリ速度
SSE の浮動小数演算速度
NetWalker PC-Z1 Cortex-A8 浮動小数演算の実行速度
NetWalker PC-Z1 Atom と速度比較
Direct3D Mobile と T-01A の Snapdragon