最終更新: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(単一命令複数データ処理)アーキテクチャの拡張版であり、ユーザ エクスペリエンスを大幅に改善できます。

搭載

  • ARMv7から。ARMv7命令が実行できてもNEONが搭載されているとは限らない。

命令

  • メディアおよびデジタル信号の処理に向いた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

  • 128ビット長のレジスタが16個から32個に倍増
  • NEONで倍精度の浮動小数点演算をサポート
  • NEONの浮動小数点演算がIEEE 754規格準拠に

レジスタ

  • 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:

使ってるソフトとか

関連

参考