ARM NEON

Das ARM NEON, auch Advanced SIMD oder "  MEP  " genannt (von der englischen Medienverarbeitungs-Engine , wörtlich "Media Computation Engine"), ist eine Art Recheneinheit SIMD , die Typberechnungen DSP beschleunigt und 2009 erschien und in das ARM Cortex-A integriert wurde Reihe von Mikroprozessoren , ARMv7A-Architektur . Es enthält bestimmte Prinzipien früherer ARM-SIMDs, bietet jedoch dreimal mehr Leistung als der von ARMv5 (VFPv2) vorhandene VFP-Prozessor (steht für "Vektor-Gleitkomma" für Vektor-Gleitkomma ) und doppelt so viel wie die in implementierte SIMD ARMv6 zusätzlich zur VFP-Einheit. In der ARMv7-Architektur wird das VFP durch VFPv3 (VFPlite für die r1p1-Revision des Cortex-A8) und das SIMD durch das Advanced SIMD oder NEON ersetzt.

Haupteigenschaften

Während die VFP-Einheiten mit dem IEEE 754-Standard kompatibel sind und somit ein hohes Maß an Präzision gewährleisten, ist dies bei Neon nicht der Fall.

Es enthält 32 64-Bit-Register, die zu 16 128-Bit-Registern kombiniert werden können. Diese werden mit der FPU (VFPlite, VFPv3 oder VFPv4 je nach Modell) des Prozessors gemeinsam genutzt. Diese Register werden als Vektoren von Elementen betrachtet, die alle vom gleichen Typ mit den folgenden Besonderheiten sind:

Es bietet eine Beschleunigung der Vektorberechnung, standardisiert für Signal- oder Medienverarbeitungsanwendungen. Zum Beispiel Farbfilter im ARGB- Format , Operationen an Vektoren vom Typ (x, y, z) oder die Komprimierung und Dekomprimierung eines Audio- oder Videosignals.

Es muss im ARM Cortex-A8 enthalten sein , aber genau wie das VFP ist es im ARM Cortex-A9 MPCore optional .

Es unterstützt die Codecs beschleunigte MPEG-4 , H.264 , On2 VP6 / 7 / 8 , Echt , AVS .

NEON kann MP3-Decodierung auf einem Prozessor mit 10  MHz durchführen und den Codec- Audio- GSM- AMR auf 13  MHz codieren und decodieren .

Es enthält einen Befehlssatz, ein separates Dateiregister und eine unabhängige Hardwareausführung.

Anleitungsset

Da der Befehlssatz von Neon dieselben Register wie der von VFP verwendet, können sie sich bei der Verarbeitung ihrer Daten ergänzen.

ARMv7

Innerhalb der ARMv7- Architektur kann der Befehlssatz in verschiedene Kategorien unterteilt werden:

ARMv8

ARMv8 arbeitet in zwei Modi, Aarch32, kompatibel mit ARMv7 und Aarch64, wobei die Fortschritte der neuen Architektur voll genutzt werden.

NEON Software-Unterstützung

Ne10

ProjectNe10 ist eine kostenlose Softwarebibliothek mit Optimierungen für NEON in Assembler für verschiedene Funktionen wie lineare Algebra, Signalverarbeitung oder Bildverarbeitung, die ursprünglich von Zhang Yang (张 洋) von ARM erstellt wurden.

GNU-Compiler

Seit 2008 ist die GNU GCC Compiler hat enthalten Auto-Vektorisierung Algorithmen für SIMDs unterstützt es insbesondere NEON mit dem Auto-Vektorisierung des Quellcodes. Die ersten Vektorisierungstests wurden von Jun Zhou von der Griffith University, Australien, durchgeführt. Sie bieten ARM-SIMDs einen höheren Stromverbrauch und eine höhere Rechenleistung als x86-SIMDs. Manuelle Optimierungen scheinen auch viel besser zu funktionieren. Dies hat zu verschiedenen Techniken zur Verbesserung der automatischen Schleifenvektorisierung (oder Autovektorisierung) geführt.

Version 4.7 von GCC wird standardmäßig automatisch auf 128 Bit vektorisiert und auf 64 Bit zurückgesetzt, wenn dies nicht möglich ist

Seit Version 4.8.0, veröffentlicht am 22. März 2013Es enthält ein neues Vektorisierungsmodell zur Verbesserung der Auto-Vektorisierung für diese SIMD. Es ist zu beachten, dass Sie aufgrund der Nichteinhaltung des Präzisionsstandards IEEE 754, da dieser multimedialer als wissenschaftliches Rechnen ist, die Option -funsafe-math-optimizations verwenden müssen, um von der automatischen Vektorisierung zu profitieren.

Lineare Algebra

Andere

Unter der Software, einschließlich Optimierungen in Assembler für NEON, können wir erwähnen:

Anhänge

Literaturverzeichnis

Externe Links

(en) (ja) (zh-CN) "  NEON  " auf arm.com (de) "  NEON ™ -Unterstützung im Artikel zur Entwicklung von Kompilierungswerkzeugen  " ( (en) "  PDF-Version  " auf infocenter.arm.com ) (de) "  Code für ARM Cortex-A8 mit NEON SIMD optimieren  " [ Archiv von16. Oktober 2013] , auf pixhawk.ethz.ch (abgerufen am 15. Oktober 2013 ) Erklärungen zur Funktionsweise von Neon und einige Möglichkeiten zur Optimierung des Codes. (de) Jiangning Liu , „  Die Implementierung von AArch64 Neon ™ in LLVM  “ [ archive du3. März 2016] , auf hellogcc.org (abgerufen am 7. September 2017 )

Anmerkungen und Referenzen

  1. (en) NEON auf arm.com
  2. http://www.arm.com/products/processors/technologies/vector-floating-point.php
  3. (in) 3.17.4 ARM-Optionen in der GCC-Dokumentation
  4. (de) Q1. Ist die ARM-Unterstützung in der neuesten stabilen Version (3.10) von ATLAS enthalten? (ATLAS FAQ)
  5. „  Cortex-A9-Prozessor  “, Arm.com (abgerufen am 21. November 2011 )
  6. "  Über den Cortex-A9 NEON MPE  " , Arm.com (abgerufen am 21. November 2011 )
  7. (de) Verwendung von SIMD-Vektoroperationen zur Beschleunigung der Anwendungscodeleistung auf ARM- und Intel-Plattformen mit geringem Stromverbrauch auf dem Gelände der Griffith University, Australien.
  8. (in) Mali ™ GPU - Version: 1.0 - Handbuch zur Anwendungsoptimierung - 4.8 Verwenden Sie Vektoranweisungen
  9. (in) NE10-Bibliothek Erste Schritte in Blogs von ARM-Ingenieuren
  10. Auto-Vektorisierung in GCC
  11. http://gcc.gnu.org/gcc-4.7/changes.html
  12. (de) CCG 4.8-Austausch auf gcc.gnu.org
  13. (in) FAQ - Welche SIMD-Befehlssätze werden von Eigen unterstützt?
  14. (in) "  Dieser ist für dich, Mru  "
  15. Anderson 2011 .
  16. (de) "  [ANKÜNDIGEN] pixman stetige Version 0.22.0 jetzt verfügbar  "
  17. (in) "  OpenSSL - News, ChangeLog  "
  18. (in) "  NaCl: Networking and Cryptography Library  " , cr.yp.to (abgerufen am 30. Juni 2014 )
  19. (in) "  Sichere ECC-Kurven  " (abgerufen am 30. Juni 2014 )