NEON ユニット

NEON ユニットは、32 個の 64 ビットベクタレジスタから構成されるレジスタバンクを備えています。NEON ユニットは、このレジスタバンクを以下のどちらかとして識別できます。

これらのレジスタは、NEON ユニット内で同時に操作できます。例えば、1 つのベクタ加算命令で 8 個の 16 ビット整数を他の 8 個の 16 ビット整数に算して、8 個の 16 ビットの結果を得ることができます。この操作は、ベクトル化(NEON では SIMD(Single Instruction Multiple Data、単一命令複数データ処理)ベクトル化)と呼ばれます。

NEON ユニットでは、8 ビット、16 ビット、および 32 ビットの整数演算と一部の 64 ビット演算をサポートし、単精度(32 ビット)の浮動小数点演算サポートしています。NEON ユニットは、2、4、8、16 のグループの要素に対して演算を実行できます。Cortex-A9 プロセッサでは、--fp16_format が指定されたときにコンパイラでサポートされる 16 ビット浮動小数点演算との間の変換もサポートされています(RVCT 4.0 以降および ARM コンパイラ 4.1 以降)。

Note

浮動小数点コードは常に自動的にベクトル化されるとは限りません。例えば、再関連付けが必要なループは、--fpmode fast を使用したコンパイル時にのみベクトル化されます。--fpmode fast を使用してコンパイルすると、結果に影響を及ぼすことのある変換を実行できます。

NEON ユニットは、1 つの命令でベクタレジスタの複数の要素を処理するベクタ SIMD(Single Instruction Multiple Data、単一命令複数データ処理)ユニットとして分類されます。

例えば、配列 A は 16 ビット整数の配列で 8 つの要素からなります。

Table 3. 配列 A

12345678

配列 B には次の 8 つの要素があります。

Table 4. 配列 B

8070605040302010

これらの配列どうしを加算するには、各ベクタをベクタレジスタにフェッチし、1 つのベクタ SIMD 命令を使用して結果を算出します。

Table 5. 結果

8172635445362718

NEON ユニットで処理できるのはメモリ内に連続して格納されるベクタだけなので、間接アドレス指定はベクトル化できません。

構造体を記述する場合は、NEON 構造体をロードするときに構造体のメンバがすべて同じサイズである必要がある点に注意して下さい。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711