最終更新:2017-03-16 (木) 16:19:30 (2760d)
NEON
Top / NEON
http://www.arm.com/ja/products/processors/technologies/neon.php
概要
- ARM NEONテクノロジは、マルチメディア アプリケーションに対して、柔軟で強力なアクセラレーションを提供するために設計された、ARM Cortex-Aシリーズ プロセッサ用の128ビットSIMD(単一命令複数データ処理)アーキテクチャの拡張版であり、ユーザ エクスペリエンスを大幅に改善できます。
搭載
命令
- メディアおよびデジタル信号の処理に向いた64ビットと128ビットのSIMD命令セット
- 8/16/32/64ビットの整数演算と、32ビット (単精度) 浮動小数点演算のためのSIMD命令
レジスタ
- レジスタはVFPレジスタとして用意されている32本の64ビットレジスタを用いる
- VFPv3-D16はレジスタ数が半分 (64bit*16)
NEONv2?
- Advanced SIMDv2 adds both the Half-precision Extension and the fused multiply-add instructions to the features of Advanced SIMDv1.
VFPv3
- 通常はレジスタ数32個 (VFPv3-D16はレジスタ数が半分)
- VFPv3を実装するARMv7世代以降ではモダンなSIMD命令セットであるAdvanced SIMD拡張命令 (NEON) が導入されたため、現在ではベクタモードの利用は推奨されていない
- 現在のARMアーキテクチャにおけるVFPの位置づけはスカラ専用の浮動小数点演算コプロセッサであり、SIMD演算用途についてはNEONに道を譲っている。
- 単精度の浮動小数点演算はNEONでも実行可能であるが、倍精度?の浮動小数点演算やIEEE 754準拠の4つの丸めモード、非正規化数のサポート等はNEONには存在しないため、これらを利用したい場合はVFP命令を使う必要がある。
AArch64
レジスタ
- 32個の64ビット幅レジスタ(16個の128ビット幅レジスタとしても使用可能)
- 128ビット幅の使い方
- 64-bit signed/unsigned x2
- 32-bit signed/unsigned x4
- 32-bit single precision floating point x4
- 16-bit signed/unsigned x8
- 8-bit signed/unsigned x16
メモ
- 倍精度にはVFPを使用。
How to use NEON
- OpenMAX DL library:
- Recommended approach to accelerate AV codecs
- Libraries released in source form, free-of-charge from the ARM website
- Supports the following formats: MPEG-4 simple profile, H.264 baseline, JPEG, MP3, AAC
- Supports the following functions: FIR, IIR, FFT, Dot Product, Color space conversion, de-blocking.de-ringing, rotation, scaling, composition
- Vectorizing compilers:
- Exploits NEON SIMD automatically with existing source code
- Supported by ARM RealView? Development Suite (v3.1 Pro and later)
- Supported by gcc in versions 2007q3 and later
- C intrinsics:
- C function call interface to NEON operations
- Supports all data types and operations supported by NEON
- Supported in ARM RealView? Development Suite (version 3.1 and later) and gcc version 2007q3 and later
- Assembler:
- For those who really want to optimize at the lowest level
- Supported in ARM's RealView? Development Suite (version 3.1 and later) and gcc version 2007q3 and later
NEON Support in the Open Source Community
NEON is currently supported in the following Open Source projects:
- Android - NEON optimizations
- Skia library, S32A_D565_Opaque is 5x faster using NEON
- Ubuntu 9.04 support NEON:
- NEON versions of critical shared libraries
- BlueZ - official linux Bluetooth protocol stack
- NEON SBC audio encoder
- Pixman (part of cairo 2D graphic library)
- Compositing/alpha blending
- X.Org, Mozilla Firefox, Fennec? and WebKit browsers eg fbCompositeSolidMask_nx8x0565neon is 8x faster using NEON
- FFmpeg - libavcodec
- x264 - Google Summer of Code 2009
- GPL h.264 encoder - eg for video conferencing