Coprocesseur secret Apple M1: qu'est-ce que c'est, pourquoi et comment ça marche



Il existe déjà pas mal de publications sur le coprocesseur Apple Matrix (AMX). Mais la plupart ne sont pas trÚs clairs pour tout le monde. Je vais essayer d'expliquer les nuances du coprocesseur dans un langage compréhensible.



Pourquoi Apple ne parle-t-il pas trop de ce coprocesseur? Qu'y a-t-il de si secret? Et si vous avez lu sur le Neural Engine dans SoC M1, vous aurez peut-ĂȘtre du mal Ă  comprendre ce qui est si inhabituel Ă  propos d'AMX.



Mais d'abord, rappelons-nous les choses de base ( si vous savez bien ce que sont les matrices, et je suis sûr qu'il y a la plupart de ces lecteurs sur Habré, alors vous pouvez sauter la premiÚre section, - environ Transl. ).



Qu'est-ce qu'une matrice?



Pour faire simple, c'est un tableau avec des nombres. Si vous avez travaillĂ© dans Microsoft Excel, cela signifie que vous avez traitĂ© de la similitude des matrices. La principale diffĂ©rence entre les matrices et les tables ordinaires avec des nombres rĂ©side dans les opĂ©rations qui peuvent ĂȘtre effectuĂ©es avec elles, ainsi que dans leur essence spĂ©cifique. La matrice peut ĂȘtre considĂ©rĂ©e sous de nombreuses formes diffĂ©rentes. Par exemple, sous forme de chaĂźnes, il s'agit d'un vecteur de ligne. Ou comme colonne, alors c'est, tout Ă  fait logiquement, un vecteur colonne.





Nous pouvons ajouter, soustraire, mettre à l'échelle et multiplier des matrices. L'addition est l'opération la plus simple. Vous ajoutez simplement chaque élément séparément. La multiplication est un peu plus délicate. Voici un exemple simple.





Comme pour les autres opérations avec des matrices, vous pouvez en savoir plus ici .



Pourquoi parle-t-on mĂȘme de matrices?



Le fait est qu'ils sont largement utilisés dans:



‱ Le traitement d'images.

‱ Apprentissage automatique.

‱ Écriture manuscrite et reconnaissance vocale.

‱ Compression.

‱ Travaillez avec l'audio et la vidĂ©o.



En matiĂšre d'apprentissage automatique, cette technologie nĂ©cessite des processeurs puissants. Et simplement ajouter quelques cƓurs Ă  la puce n'est pas une option. DĂ©sormais, les noyaux sont "affinĂ©s" pour certaines tĂąches.





Le nombre de transistors dans le processeur est limitĂ©, de sorte que le nombre de tĂąches / modules qui peuvent ĂȘtre ajoutĂ©s Ă  la puce est Ă©galement limitĂ©. En gĂ©nĂ©ral, vous pouvez simplement ajouter plus de cƓurs au processeur, mais cela ne fera qu'accĂ©lĂ©rer les calculs standard qui sont dĂ©jĂ  rapides. Apple a donc dĂ©cidĂ© d'emprunter une voie diffĂ©rente et de mettre en Ă©vidence les modules pour le traitement d'image, le dĂ©codage vidĂ©o et les tĂąches d'apprentissage automatique. Ces modules sont des coprocesseurs et des accĂ©lĂ©rateurs.



Quelle est la différence entre le coprocesseur Apple Matrix et le Neural Engine?



Si vous Ă©tiez intĂ©ressĂ© par le Neural Engine, vous savez probablement qu'il effectue Ă©galement des opĂ©rations matricielles pour travailler avec des problĂšmes d'apprentissage automatique. Mais si oui, pourquoi avez-vous Ă©galement besoin du coprocesseur Matrix? C'est peut-ĂȘtre la mĂȘme chose? Suis-je dĂ©routant quelque chose? Permettez-moi de clarifier la situation et de vous dire quelle est la diffĂ©rence, en expliquant pourquoi les deux technologies sont nĂ©cessaires.





L'unité de traitement principale (CPU), les coprocesseurs et les accélérateurs peuvent généralement communiquer sur un bus de données commun. Le processeur contrÎle généralement l'accÚs à la mémoire, tandis qu'un accélérateur tel qu'un GPU a souvent sa propre mémoire dédiée.



J'avoue que dans mes articles prĂ©cĂ©dents, j'ai utilisĂ© les termes «coprocesseur» et «accĂ©lĂ©rateurs» de maniĂšre interchangeable, bien qu'ils ne soient pas la mĂȘme chose. Ainsi, GPU et Neural Engine sont diffĂ©rents types d'accĂ©lĂ©rateurs.



Dans les deux cas, vous disposez de zones spéciales de mémoire que la CPU doit remplir avec les données qu'elle souhaite traiter, plus une autre zone de mémoire que la CPU remplit avec une liste d'instructions que l'accélérateur doit exécuter. Le processeur prend du temps pour effectuer ces tùches. Vous devez coordonner tout cela, remplir les données, puis attendre que les résultats soient reçus.



Et un tel mécanisme convient aux tùches à grande échelle, mais pour les petites tùches, c'est exagéré.





C'est l'avantage des coprocesseurs par rapport aux accélérateurs. Les coprocesseurs s'assoient et surveillent le flux des instructions de code machine qui viennent de la mémoire (ou en particulier du cache) vers le processeur. Le coprocesseur est obligé de répondre aux instructions spécifiques qu'il a été forcé de traiter. Pendant ce temps, le CPU ignore généralement ces instructions ou aide à les rendre plus faciles à gérer par le coprocesseur.



L'avantage est que les instructions exĂ©cutĂ©es par le coprocesseur peuvent ĂȘtre incluses dans du code normal. Dans le cas du GPU, tout est diffĂ©rent - les programmes de shader sont placĂ©s dans des tampons de mĂ©moire sĂ©parĂ©s, qui doivent ensuite ĂȘtre transfĂ©rĂ©s explicitement vers le GPU. Vous ne pourrez pas utiliser le code normal pour cela. Et c'est pourquoi AMX est idĂ©al pour les tĂąches simples de traitement matriciel.



L'astuce ici est que vous devez définir des instructions dans l'architecture du jeu d'instructions (ISA) de votre microprocesseur. Ainsi, lors de l'utilisation d'un coprocesseur, l'intégration avec le processeur est plus étroite que lors de l'utilisation d'un accélérateur.



Soit dit en passant, les créateurs d'ARM ont longtemps résisté à l'ajout d'instructions personnalisées à ISA. Et c'est l'un des avantages du RISC-V. Mais en 2019, les développeurs ont abandonné, cependant, déclarant ce qui suit: «Les nouvelles instructions sont combinées avec les instructions ARM standard. Pour éviter la fragmentation des logiciels et maintenir un environnement de développement logiciel cohérent, ARM s'attend à ce que les clients utilisent des instructions personnalisées principalement dans les appels de bibliothÚque. "



Cela pourrait ĂȘtre une bonne explication du manque de description des instructions AMX dans la documentation officielle. ARM s'attend simplement Ă  ce qu'Apple inclue des instructions dans les bibliothĂšques fournies par le client (dans ce cas, Apple).



Quelle est la différence entre un coprocesseur matriciel et un SIMD vectoriel?



En général, il n'est pas si difficile de confondre un coprocesseur matriciel avec la technologie vectorielle SIMD, que l'on trouve dans la plupart des processeurs modernes, y compris ARM. SIMD signifie Single Instruction Multiple Data.





SIMD vous permet d'augmenter les performances du systĂšme lorsque vous devez effectuer la mĂȘme opĂ©ration sur plusieurs Ă©lĂ©ments, ce qui est Ă©troitement liĂ© aux matrices. En gĂ©nĂ©ral, les instructions SIMD, y compris les instructions ARM Neon ou Intel x86 SSE ou AVX, sont souvent utilisĂ©es pour accĂ©lĂ©rer la multiplication de la matrice.



Mais le moteur vectoriel SIMD fait partie du cƓur du microprocesseur, tout comme ALU (Arithmetic Logic Unit) et FPU (Floating Point Unit) font partie du CPU. Eh bien, dĂ©jĂ  le dĂ©codeur d'instructions dans le microprocesseur "dĂ©cide" quel bloc fonctionnel activer.





Mais le coprocesseur est un module physique distinct et ne fait pas partie du cƓur du microprocesseur. Auparavant, par exemple, le 8087 d'Intel Ă©tait une puce distincte destinĂ©e Ă  accĂ©lĂ©rer les opĂ©rations en virgule flottante.





Vous pourriez trouver étrange que quelqu'un développe un systÚme aussi complexe, avec une puce distincte qui traite les données allant de la mémoire au processeur afin de détecter une instruction en virgule flottante.



Mais le coffre s'ouvre simplement. Le fait est que le processeur 8086 d'origine ne comptait que 29 000 transistors. Les 8087 en comptaient déjà 45 000. Au final, les technologies ont permis d'intégrer des FPU dans la puce principale, de se débarrasser des coprocesseurs.



Mais pourquoi AMX ne fait pas partie du noyau M1 Firestorm n'est pas tout Ă  fait clair. Peut-ĂȘtre qu'Apple a simplement dĂ©cidĂ© de dĂ©placer des Ă©lĂ©ments ARM non standard en dehors du processeur principal.



Mais pourquoi on ne parle pas beaucoup d'AMX?



Si AMX n'est pas dĂ©crit dans la documentation officielle, comment pourrions-nous mĂȘme le savoir? Merci au dĂ©veloppeur Dougall Johnson, qui a fait une merveilleuse rĂ©tro-ingĂ©nierie du M1 et dĂ©couvert le coprocesseur. Son travail est dĂ©crit ici . En fait, Apple a crĂ©Ă© des bibliothĂšques et / ou des frameworks spĂ©cialisĂ©s comme Accelerate pour les opĂ©rations mathĂ©matiques liĂ©es aux matrices . Tout cela comprend les Ă©lĂ©ments suivants:



‱ vImage - traitement d'image de niveau supĂ©rieur, tel que la conversion entre les formats, la manipulation d'images.

‱ BLASEst une sorte de standard de l'industrie pour l'algĂšbre linĂ©aire (ce que nous appelons les mathĂ©matiques traitant des matrices et des vecteurs).

‱ BNNS - utilisĂ© pour faire fonctionner des rĂ©seaux neuronaux et s'entraĂźner.

‱ vDSP - traitement numĂ©rique du signal. TransformĂ©e de Fourier, convolution. Ce sont des opĂ©rations mathĂ©matiques effectuĂ©es lors du traitement d'une image ou de tout signal contenant du son.

‱ LAPACK - Fonctions d'algĂšbre linĂ©aire de niveau supĂ©rieur , telles que la rĂ©solution d'Ă©quations linĂ©aires.



Johnson a compris que ces bibliothÚques utiliseraient le coprocesseur AMX pour accélérer les calculs. Par conséquent, il a développé un logiciel spécialisé pour l'analyse et le suivi des actions de la bibliothÚque. En fin de compte, il a pu localiser des instructions de code machine AMX non documentées.



Et Apple ne documente pas tout cela car ARM LTD. essaie de ne pas publier trop d'informations. Le fait est que si les fonctions personnalisées sont vraiment largement utilisées, cela peut conduire à la fragmentation de l'écosystÚme ARM, comme indiqué ci-dessus.



Apple a la possibilitĂ©, sans vraiment annoncer tout cela, de modifier ultĂ©rieurement le fonctionnement des systĂšmes si nĂ©cessaire - par exemple, supprimer ou ajouter des instructions AMX. Pour les dĂ©veloppeurs, la plateforme Accelerate suffit, le systĂšme fera le reste lui-mĂȘme. En consĂ©quence, Apple peut contrĂŽler Ă  la fois le matĂ©riel et les logiciels.



Avantages du coprocesseur Apple Matrix



Il y a beaucoup de choses ici, un excellent aperçu des capacités de l'élément a été fait par Nod Labs, spécialisé dans l'apprentissage automatique, l'intelligence et la perception. En particulier, ils ont réalisé des tests de performances comparatifs entre AMX2 et NEON.



En fait, AMX effectue les opérations nécessaires pour effectuer des opérations avec des matrices deux fois plus rapidement. Cela ne signifie pas, bien sûr, que AMX est le meilleur, mais pour l'apprentissage automatique et le calcul haute performance - oui.



L'essentiel est que le coprocesseur d'Apple est une technologie impressionnante qui donne Ă  Apple ARM un avantage en matiĂšre d'apprentissage automatique et de calcul haute performance.






All Articles