AMX, le coprocesseur caché de l’Apple M1
(medium.com)Apple Matrix Coprocessor
-
Processeur dédié aux matrices, jamais mentionné lors de la présentation du M1
-
Les matrices sont largement utilisées dans le traitement d’image, le machine learning, la reconnaissance vocale/écrite, la reconnaissance faciale, la compression, ainsi que le traitement audio/vidéo
-
Ce n’est pas le Neural Engine qui s’en charge ? Quelle différence avec le Neural Engine ?
→ Le GPU ou le Neural Engine sont des accélérateurs
→ Il est inefficace que le CPU travaille pour remplir l’espace mémoire que ces accélérateurs vont utiliser
→ Dans ce cas, un coprocesseur observe les instructions et prend ce travail en charge à la place
→ Pour utiliser cela, il faut définir un jeu d’instructions distinct
→ ARM a longtemps refusé l’ajout d’instructions personnalisées, mais a commencé à proposer des extensions possibles à partir de 2019
→ C’est probablement pour cette raison que les instructions AMX n’apparaissent pas dans la documentation officielle
- Alors, quelle différence avec le SIMD Vector Engine intégré à ARM ?
→ SIMD : Single Instruction Multiple Data
→ Une méthode offrant de hautes performances lorsqu’on exécute la même opération sur plusieurs données
→ Cela est lié aux opérations matricielles
→ Mais le SIMD est intégré au CPU comme l’ALU ou la FPU, tandis qu’un coprocesseur est externe
→ Autrefois, le 8087 d’Intel (FPU) avait plus de transistors encore que le 8086, ce qui rendait leur intégration difficile à l’époque. Avec les progrès technologiques, le nombre de transistors a augmenté, les FPU ont été intégrées au CPU, et ce type de coprocesseur a disparu
- On ne sait pas clairement pourquoi AMX n’a pas été intégré au cœur Firestorm
→ Il était probablement plus simple de le séparer afin qu’il puisse travailler en parallèle du CPU,
→ et Apple souhaitait peut-être aussi garder à l’extérieur ce qui ne relève pas du standard ARM.
- Alors pourquoi AMX a-t-il été caché ?
→ AMX n’apparaît pas dans la documentation officielle, alors comment cela a-t-il été découvert ?
→ Dougal Johnson l’a mis au jour par rétro-ingénierie
→ Apple fournit diverses fonctions via Accelerate, son framework pour les opérations matricielles
⇨ vImage : traitement d’image de haut niveau, conversion de formats et manipulation d’images
⇨ BLAS : algèbre linéaire (opérations sur matrices et vecteurs)
⇨ BNNS : réseaux de neurones et apprentissage
⇨ vDSP : traitement numérique du signal, comme la transformée de Fourier, et opérations mathématiques pour l’image ou l’audio
⇨ LAPACK : fonctions d’algèbre linéaire de haut niveau, équations linéaires, etc.
→ Cette bibliothèque Accelerate accélère les calculs en utilisant AMX
→ Si Apple avait rendu ces instructions publiques, l’écosystème ARM se serait fragmenté (ce que ni ARM ni Apple ne souhaitent)
→ Apple ne les publie pas, mais les expose via un framework, ce qui permet d’offrir de hautes performances tout en gardant la possibilité de modifier le jeu d’instructions à tout moment
⇨ C’est possible parce qu’Apple contrôle à la fois le matériel et le logiciel
⇨ Les développeurs n’ont qu’à passer par Accelerate et bénéficient ainsi automatiquement des améliorations futures
- Quels sont les avantages de l’Apple Matrix Coprocessor ?
→ Selon une comparaison de Nod Labs avec NEON, le jeu d’instructions SIMD standard d’ARMv8.6, AMX est plus de deux fois plus rapide
→ Cela ne signifie pas qu’AMX est supérieur en tout, mais au moins en machine learning et en calcul haute performance (HPC), AMX semble avoir l’avantage
2 commentaires
Avec la disparition d'OpenCL et au-delà de l'accélération Metal, Apple n'a pas particulièrement mis en avant Accelerate,
mais la bibliothèque s'enrichissait chaque année, donc c'est surprenant d'apprendre qu'un coprocesseur dédié à l'accélération matérielle a été intégré.
Il s’agit d’un article de suivi de l’ingénieur qui a écrit les deux textes ci-dessous. Je vous recommande de les lire aussi.
→ Explication en vidéo sur YouTube : https://youtu.be/71LlixEBK0o
→ Explication en vidéo sur YouTube : https://youtu.be/F5sIQZvlJc8