Table of Contents
Les accélérateurs matériels sont devenus indispensables pour les charges de travail modernes en intelligence artificielle, de la formation de réseaux neuronaux massifs à l'exécution en temps réel d'inférences sur les périphériques de bord. Ces puces spécialisées permettent d'améliorer les performances et l'efficacité énergétique des processeurs à usage général en adaptant leurs chemins de données et leur logique de contrôle aux modèles mathématiques communs en AI, principalement la multiplication des matrices, les convolutions et les opérations vectorielles.
Les registres sont les éléments de mémoire les plus petits et les plus rapides d'un processeur ou d'un accélérateur. Ils sont situés directement à l'intérieur des unités de traitement, fournissant un accès instantané aux données qui sont manipulées activement. Sans hiérarchie de registres conçue de manière efficace, même l'accélérateur le plus sophistiqué serait encerclé par la latence de mémoire, incapable de nourrir ses unités de calcul au rythme requis.
Comprendre les registres dans les systèmes numériques
Avant de plonger dans des utilisations spécifiques à l'IA, il est utile d'établir quels sont les registres et comment ils diffèrent des autres technologies de mémoire. Un registre est un élément de stockage binaire, généralement implémenté avec des tongs ou des verrous, qui peut contenir un ou plusieurs bits de données. Les registres sont regroupés en fichiers de registres – des jeux de registres qui peuvent être lus à partir ou écrits en parallèle.
Ce qui distingue les registres des caches ou de la mémoire principale, c'est leur vitesse d'accès. Parce que les registres sont physiquement intégrés dans la même puce que les unités logiques arithmétiques (UAL) et sont généralement construits avec une logique CMOS statique entièrement personnalisée, ils peuvent être lus dans un cycle d'horloge unique – souvent en moins d'une nanoseconde. Cette vitesse est à un coût: les registres nécessitent une zone de dé et consomment de la puissance statique.
Les registres remplissent plusieurs fonctions de base dans n'importe quel processeur ou accélérateur:
- Stockage d'opérande:[ Ils détiennent les valeurs de source qui alimentent les unités arithmétiques pendant une instruction.
- Result buffering:[ Ils capturent temporairement la sortie d'un calcul avant qu'il ne soit réécrit à la mémoire ou transmis à une autre unité.
- État de contrôle: Ils stockent les bits de configuration, les paramètres de mode et les signaux de contrôle de pipeline qui déterminent le comportement du chemin de données.
- État architectural:[ Dans un noyau à usage général, les registres programmateurs visibles définissent l'état de la machine (p. ex., compteur de programmes, pointeur de cheminée).
Dans le contexte des accélérateurs d'IA, le dernier point est souvent moins pertinent car les accélérateurs ne sont généralement pas directement programmables par un développeur d'applications.
Le rôle des registres dans les accélérateurs de matériel d'IA
Les accélérateurs d'IA, qu'il s'agisse d'unités de traitement graphique (GPU), d'unités de traitement tensor (TPU), de tableaux de portiques programmables sur le terrain (FPGA), ou de circuits intégrés personnalisés (ASIC) pour une application spécifique, doivent répondre à une exigence commune : ils doivent traiter des volumes énormes de données avec un latence minimale.
Pipelines à fine couche
Les accélérateurs modernes d'IA mettent en œuvre des architectures en pipelines profonds, où un seul calcul (comme une multi-accumulation) est divisé en plusieurs étapes : récupérer les opérandes, multiplier, accumuler et écrire en arrière. Les registres sont placés entre chaque étape pour tenir des résultats intermédiaires. Cette technique, appelée pipeline, permet à l'accélérateur de commencer une nouvelle opération à chaque cycle même si chaque opération individuelle prend plusieurs cycles à compléter. Les registres agissent comme des tampons qui découplent les étapes, assurant que les données circulent sans attendre l'étape la plus lente.
Alimentation de données à grande largeur de bande
Par exemple, une couche convolutionnelle peut lire un filtre 3×3 et un patch d'une carte de fonctionnalité d'entrée, puis calculer une somme de produits. Le nombre d'opérations par octet de données récupérées est relativement faible, ce qui signifie que l'accélérateur doit fournir des données à une bande passante extrêmement élevée pour garder ses multiplicateurs occupés. Les registres – disposés dans des fichiers de registres multiportés de grande taille – servent de cache de données de premier niveau pour les unités de calcul. Ils peuvent être conçus pour fournir plusieurs opérandes par cycle, directement aux entrées ALU, sans traduction d'adresses ou recherche de tags. Ce chemin dédié, à faible latence est essentiel pour soutenir les cibles tera-opérations-par-seconde (TOPS) des accélérateurs modernes.
Configuration et contrôle flexibles
Les accélérateurs doivent supporter de nombreuses architectures réseau neuronales différentes : tailles de couches variables, types de données, fonctions d'activation et stratégies de titrage. Plutôt que de les faire tourner dur, les concepteurs les stockent dans des registres de contrôle. Un registre de configuration peut spécifier les dimensions d'un noyau de convolution, la strate, le mode de rembourrage ou le nombre d'itérations dans une boucle. En réécrivant ces registres (souvent via un petit microcontrôleur intégré ou un moteur DMA), le même datapath matériel peut être réutilisé pour différents modèles. Cette programmabilité est vitale parce que les modèles d'IA évoluent rapidement; un système de contrôle basé sur les registres permet à l'accélérateur de rester utile à travers des générations d'algorithmes.
Architecte des fichiers de registre pour les accélérateurs d'IA
La conception d'un fichier de registre pour un accélérateur d'IA implique une foule de compromis. Contrairement à un fichier de registre CPU, qui doit prendre en charge un ensemble fixe de registres à usage général visibles par l'ISA, un fichier de registre accélérateur peut être adapté au flux de données de la charge de travail cible.
Fichiers d'enregistrement vectorielle
De nombreux accélérateurs adoptent un paradigme vectoriel ou SIMD (Instruction unique, données multiples), où une seule instruction fonctionne sur plusieurs éléments de données en parallèle.Ces conceptions utilisent des fichiers de registres vectoriels – de grands tableaux multi-banques qui détiennent des vecteurs entiers (p. ex. 128, 256 ou 512 éléments). Chaque banque peut être lue indépendamment, permettant à l'accélérateur de récupérer simultanément plusieurs éléments vectoriels. Le nombre de ports de lecture et d'écriture est un paramètre de conception majeur : plus de ports augmentent la bande passante mais aussi la surface et la puissance.
Scratchpad Memories vs. Enregistrer des fichiers
Une alternative commune à un fichier de registre géré par le matériel est une mémoire de scratchpad (SPM) gérée par logiciel. Dans certains accélérateurs, en particulier ceux qui ciblent une faible puissance, le programmeur déplace explicitement les données entre la mémoire principale et un scratchpad local. Les registres sont ensuite utilisés uniquement pour des résultats temporaires. Cependant, la ligne entre un grand fichier de registre et un petit scratchpad est floue. Les deux peuvent être multiportés et étroitement couplés pour calculer des unités. Le choix dépend du modèle de programmation: les scratchpads offrent plus de flexibilité dans la mise en page des données mais nécessitent une gestion explicite, tandis que les fichiers de registre sont implicitement gérés par le compilateur ou le planificateur matériel.
Inscription Renaming et support de danger
Dans les moteurs d'exécution hors-commande (communs dans les GPU haut de gamme et certains accélérateurs d'IA), le renomming des registres est utilisé pour éliminer les fausses dépendances. Le fichier de registre physique contient plus de registres que le jeu de registres architecturaux, permettant au matériel de cartographier les registres logiques vers différents registres physiques pour éviter les décrochages.
Considérations de conception : Vitesse, surface et puissance
Pour les accélérateurs AI, les cibles sont extrêmes. Un fichier de registre doit être assez rapide pour alimenter un tableau multiplicateur qui peut utiliser des dizaines de milliers de multiplicateurs, tous fonctionnant aux fréquences de gigahertz. Un bit de registre 32 bits typique mis en œuvre dans un processus moderne de 7 nm peut consommer environ 0,5 μm2 et tirer quelques microwatts de puissance statique lorsqu'il est actif. Multiplié par des milliers de registres, la surface et la puissance totales deviennent importantes – dominant parfois le budget de l'accélérateur.
Pour atténuer cette situation, les architectes utilisent plusieurs techniques :
- Réduction des banques et des ports:[ Au lieu de construire un seul fichier monolithique avec de nombreux ports de lecture/écriture, les concepteurs divisent le fichier en plusieurs banques, chacune avec moins de ports. Le planificateur assure que les accès simultanés tombent dans différentes banques, évitant les conflits bancaires.
- Fichier de registre hiérarchique: Certains modèles utilisent un petit fichier de registre ultra-rapide (comme un cache de registre) pour des valeurs fréquemment réutilisées, soutenues par un fichier de registre plus grand et plus lent.
- Gating de puissance:[ Les banques de registres inutilisées sont désactivées pour économiser la puissance de fuite, ce qui est particulièrement important dans les accélérateurs mobiles ou de bord.
- Intégration des données:[ Dans les conceptions de performance extrêmes, les registres sont fusionnés directement dans les cellules d'accumulateur multiplicateur (MAC). La cellule MAC elle-même comprend un registre de pipeline et un registre de rétroaction pour accumuler des sommes partielles.
Registres dans des architectures d'accélérateur spécifiques
Unités de mesure du système de mesure du bruit (NVIDIA, AMD)
Les GPU sont des accélérateurs très parallèles qui s'appuient sur des fichiers de registres massifs pour supporter des milliers de threads concurrents. Chaque multiprocesseur de streaming (SM) dans un GPU NVIDIA contient un fichier de registre avec des dizaines de milliers de registres 32 bits. Ces registres sont partitionnés entre les threads (ou les guêpes) dans un schéma de commutation de contexte qui permet le commutation de threads à coût zéro : lorsqu'une chaîne s'arrête sur un accès à la mémoire, une autre chaîne peut immédiatement commencer à exécuter en utilisant son propre jeu de registres. La taille du fichier de registre détermine directement le nombre maximum de threads par SM et, par conséquent, la capacité de masquer la la latence.
Unités de traitement de la tension (Google TPU)
Le TPU Google's adopte une approche différente : il utilise une hiérarchie à deux niveaux. Un grand scratch SRAM 8-MiB (ou plus grand) appelé le -Pamper -Height est stocké dans les poids du filtre, et un module -Systolic data setup , lit depuis le scratchpad et alimente les lignes de données dans le tableau systolique. A l'intérieur de chaque cellule systolique – une unité multi-accumulatrice – il y a des registres de pipelines pour les valeurs d'entrée et un registre d'accumulateurs dédié. Ces registres internes sont optimisés exclusivement pour le flux de données multi-accumulables.
Extensions vectorielles RISC-V (par exemple, renseignement SiFive, Esperanto)
L'extension vectoriel RISC-V (V) offre une longueur vectorelle flexible et définie par logiciel (VLEN). Les implémentations varient dans la façon dont elles cartographient les registres vectoriels architecturaux pour les entrées de fichiers de registres physiques. Certains utilisent un seul fichier vectoriel monolithique de bits VLEN par registre; d'autres le divisent en plusieurs voies. Les registres dans un accélérateur vectoriel sont essentiels pour stocker les opérandes vectoriels pendant la chaîne et pour tenir les registres de masques utilisés dans les opérations prédiguées. La conception de ces fichiers de registres doit permettre des longueurs vectoriels variables et de support pour les types de données emballés et non emballés (par exemple, entiers, flotteurs, bfloat16).
Accélérateurs basés sur le FPGA
Chaque bloc logique FPGA (LUT) est accompagné d'un flip-flop (registre). Dans un accélérateur AI mis en place sur un FPGA, le fichier de registre est synthétisé à partir de ces flip-flops. Comme le tissu est reprogrammable, la connectivité de registre peut être personnalisée selon la conception exacte de l'accélérateur. Cependant, l'efficacité de zone des registres FPGA est généralement inférieure à celle des registres ASIC, de sorte que les concepteurs doivent équilibrer le nombre de registres par rapport au nombre de LUT. De nombreux accélérateurs basés sur FPGA comptent sur la RAM de bloc (BRAM) pour le stockage et l'utilisation de registres plus importants uniquement pour les petits tampons critiques.
Tendances futures : quasi-mémoire et transformation en mémoire
Les modèles d'IA se développent en taille et en complexité, le coût de déplacement des données de la mémoire à l'accélérateur est devenu le goulot d'étranglement dominant. Une direction prometteuse est l'informatique à proximité de la mémoire, où le stockage de la mémoire est physiquement proche des banques de mémoire, souvent émergeant comme faisant partie de la mémoire à mémoire 3D (par exemple, HBM). Dans ces conceptions, le fichier de registre d'accélérateur peut être remplacé par un ensemble de petits tampons qui peuvent capturer les données en sortie de la pile de mémoire, réduisant ainsi les données de distance qui doivent voyager. Le traitement en mémoire (PIM) va plus loin en installant des unités de calcul à l'intérieur des puces de mémoire elles-mêmes, où les éléments de stockage (cellules DRAM) sont lus directement dans des processeurs bit-serial ou SIMD. Ici, les registres peuvent être éliminés entièrement en faveur de petits verrous locaux qui détiennent temporairement un ou deux opérandes pendant le calcul.
Une autre tendance est l'utilisation de la mémoire mapé-registre dans des accélérateurs étroitement couplés. Dans ce schéma, le processeur CPU ou hôte peut lire et écrire le fichier de registre accélérateurs comme s'il s'agissait d'une région mapée-mémoire, permettant une communication rapide sans interrompre les frais généraux.
Conclusion
Les registres constituent un élément fondamental des accélérateurs matériels d'IA. Ils fournissent le stockage rapide et à faible latence des données qui permet les pipelines profonds, les flux de données à large bande et le contrôle flexible nécessaire pour atteindre les performances exigées par les réseaux neuronaux modernes. Du petit accumulateur à l'intérieur de chaque cellule MAC aux fichiers de registre vectoriel massifs dans les GPU, chaque bit de registre représente un compromis technique entre la vitesse, la zone et la puissance.
Pour les lecteurs qui cherchent à approfondir leur compréhension technique, les ressources externes suivantes fournissent un contexte supplémentaire :