AccueilđŸ‡«đŸ‡·Chercher

ARM NEON

L'ARM NEON également appelé Advanced SIMD ou encore « MPE » (de l'anglais media processing engine, littéralement « moteur de calcul de médias ») est une unité de calcul de type SIMD, accélérant les calculs de type DSP, apparu en 2009 et intégré à la série de microprocesseurs ARM Cortex-A, d'architecture ARMv7A. Elle reprend certains principes des SIMD précédents d'ARM, mais apporte 3 fois plus de performance que celui du processeur VFP (de l'anglais « vector floating point » pour virgule flottante vectorielle) présent dÚs l'ARMv5 (VFPv2) et deux fois plus que le SIMD implémenté dans l'ARMv6 en plus de l'unit VFP[1]. Dans l'architecture ARMv7, le VFP est remplacé par VFPv3 (VFPlite pour la révision r1p1 du Cortex-A8) et le SIMD par l'Advanced SIMD ou NEON.

Caractéristiques générales

Si les unités VFP sont compatibles avec la norme IEEE 754[2], assurant ainsi un bon niveau de précision, ça n'est pas le cas de Neon[3] - [4].

Il contient 32 registres 64 bits qui peuvent ĂȘtre combinĂ©s pour former 16 registres 128 bits. Ceux-ci sont partagĂ©s avec le FPU (VFPlite, VFPv3 ou VFPv4 selon les modĂšles) du processeur. Ces registres sont considĂ©rĂ©s comme des vecteurs d'Ă©lĂ©ments qui sont tous du mĂȘme type avec les particularitĂ©s suivantes [1]:

  • Les types de donnĂ©es peuvent Ă©galement ĂȘtre de type entier, signĂ©s ou non-signĂ©s sur 8, 16, 32 ou 64 bits, ou des flottants simple prĂ©cision ;
  • Les mĂȘmes instructions peuvent ĂȘtre exĂ©cutĂ©es sur tous les canaux de calcul.

Il fournit l'accélération des calculs vectoriels, standardisé pour les applications de traitement du signal ou des médias. Par exemple, filtre de couleurs au format ARGB, des opérations sur des vecteurs de type (x, y, z) ou bien de la compression et décompression d'un signal audio ou vidéo.

Il est obligatoirement inclus dans l'ARM Cortex-A8, mais, tout comme le VFP est optionnel sur l'ARM Cortex-A9 MPCore[5].

Il supporte l'accélération des codecs MPEG-4, H.264, On2 VP6/7/8, Real, AVS.

NEON peut faire du dĂ©codage MP3 sur un processeur fonctionnant Ă  10 MHz et peut encoder et dĂ©coder le codec audio GSM AMR Ă  13 MHz.

Il contient un jeu d’instruction, un registre de fichiers sĂ©parĂ© et de l’exĂ©cution matĂ©rielle indĂ©pendante[6].

Jeu d'instructions

Le jeu d'instructions de Neon partageant les mĂȘmes registres que celui de VFP, ils peuvent ĂȘtre complĂ©mentaire dans le traitement de leurs donnĂ©es.

ARMv7

Au sein de l'architecture ARMv7, le jeu d'instructions peut ĂȘtre divisĂ© en diffĂ©rentes catĂ©gories[7] :

  • DĂ©placement des donnĂ©es : chargement depuis la mĂ©moire, sauvegarde en mĂ©moire, copie d'un registre Ă  un autre ;
  • ArithmĂ©tique : addition, soustraction, multiplication, diffĂ©rence absolue, maximum, minimum, saturation arithmĂ©tique, rĂ©ciproque, racine carrĂ©e, multiplication-addition, multiplication-soustraction, division par 2-addition, multiplication-accumulation, opĂ©ration dĂ©pendant d'une valeur scalaire ;
  • Logique : opĂ©rateurs applicables Ă  des champs de bits, tels que ou, ou exclusif, et, nĂ©gation et mise Ă  zĂ©ro.
  • Comparaison : sur une valeur absolue ou la donnĂ©e d'un registre, >, ≄, =, ≀, <.
  • Compression, dĂ©compression : donnĂ©es conservĂ©es dans les registres ou les 'canaux' de traitement dans des vecteurs.
  • En fonction des implĂ©mentations, il peut exĂ©cuter jusqu'Ă  4 opĂ©rations 32 bits, 8 opĂ©rations 16 bits ou 16 opĂ©rations 8 bits simultanĂ©ment[8]

ARMv8

ARMv8 fonctionne en 2 modes, Aarch32, compatible avec ARMv7 et Aarch64 bénéficiant pleinement des avancées de la nouvelle architecture.

Support logiciel de NEON

Ne10

ProjectNe10 est une bibliothĂšque logicielle libre comportant des optimisations pour NEON en assembleur pour diffĂ©rentes fonctions tels que l'algĂšbre linĂ©aire, le traitement du signal ou le traitement d'image, crĂ©e Ă  la base par Zhang Yang (ćŒ æŽ‹), d'ARM[9].

Compilateur GNU

Depuis 2008, le compilateur GNU GCC comporte des algorithmes d'auto-vectorisation pour les SIMD[10], il supporte notamment NEON avec l'auto-vectorisation du code source. Les premiers tests de vectorisation ont été faits par Jun Zhou de l'université de Griffith, en Australie[7] ils donnent une plus grande efficacité consommation électrique/puissance de calcul aux SIMD des ARM que ceux des x86. Les optimisations manuelles semblent également donner de bien meilleurs résultats. Cela a conduit à différentes techniques d'amélioration de la vectorisation automatique des boucles (ou auto-vectorisation).

La version 4.7 de GCC auto-vectorise en 128 bits par défaut, et repasse en 64 bits, si ça n'est pas possible[11].

Depuis la version 4.8.0, sortie le , il comporte un nouveau modÚle de vectorisation pour améliorer l'auto-vectorisation à destination de ce SIMD[12]. Il faut noter qu'en raison de sa non-conformité avec la norme de précision IEEE 754, il est davantage orienté multimédia que calcul scientifique, il faut utiliser l'option -funsafe-math-optimizations pour bénéficier de l'auto-vectorisation.

AlgÚbre linéaire

Autres

Parmi les logiciels comportant des optimisations en assembleur pour NEON, on peut citer :

  • La bibliothĂšque d'encodage/dĂ©codage multimĂ©dia ffmpeg[14].
  • La bibliothĂšque de compression/dĂ©compression vidĂ©o x264 pour le codec H.264[15].
  • La bibliothĂšque de traitement d'image jpeg libjpeg-turbo, modification de libjpeg avec le support de l'accĂ©lĂ©ration de diffĂ©rents SIMD par optimisation en assembleur.
  • La bibliothĂšque de rendu gĂ©omĂ©trique Cairo (bibliothĂšque Pixmap du projet, depuis la 0.22.0[16]).
  • La bibliothĂšque graphique libre de dessin vectoriel 2D, Skia, utilisĂ© par Android[15], Chrome OS (et Chromium OS), Chrome (et Chromium), Firefox, FirefoxOS.
  • La bibliothĂšque de chiffrement OpenSSL depuis la version 1.0.1[17]
  • La bibliothĂšque de chiffrement NaCl de Daniel J. Bernstein (en cours d'optimisation en )[18], dont des dĂ©veloppeurs d'OpenSSL veulent s'inspirer pour implĂ©menter Curve25519 dans OpenSSL[19].
  • La bibliothĂšque libre BlueZ de gestion du bluetooth notamment sous Linux[15].

Annexes

Bibliographie

Liens externes

(en)(ja)(zh-CN) « NEON », sur arm.com
(en) « NEONℱ Support in Compilation Tools Development Article » ((en) « version PDF », sur infocenter.arm.com)
(en) « Optimizing Code for ARM Cortex-A8 with NEON SIMD » [archive du ], sur pixhawk.ethz.ch (consulté le ) explications sur le fonctionnement de Neon et certains moyens pour optimiser le code.
(en) Jiangning Liu, « The implementation of AArch64 Neonℱ in LLVM » [archive du ], sur hellogcc.org (consultĂ© le )

Notes et références

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.