Stockage de charge, description et utilité de ces unités dans le CPU et le GPU

Magasin de chargement

L'un des éléments essentiels de toute architecture sont les unités Load-Store, qui sont chargées d'exécuter les instructions relatives à la mémoire sur les deux Processeur ainsi que GPU. Si vous voulez savoir quelle est la fonction et comment ces unités fonctionnent de manière simple et accessible, continuez à lire.

La communication du CPU avec la mémoire est importante, ici chez HardZone nous avons fait plusieurs articles pour expliquer les différents éléments et maintenant c'est au tour des unités Load-Store, qui sont essentielles et donc indispensables dans toute architecture à la fois CPU et GPU .

Que sont les unités Load-Store?

Unité de stockage de charge

C'est une unité d'exécution dans une CPU, les unités d'exécution sont celles utilisées pour résoudre une instruction une fois qu'elle a été décodée. Rappelons au passage qu'il existe les autres types d'unités d'exécution:

  • ALU: sont différents types d'unités qui sont responsables de l'exécution de différents types d'opérations arithmétiques. Ils peuvent travailler avec un seul nombre, une chaîne de nombres ou même dans une matrice.
  • Unité de saut: ces unités prennent les instructions de saut dans le code, c'est-à-dire que l'exécution se déplace vers une autre partie de la mémoire.

Les unités Load / Store, quant à elles, sont chargées d'exécuter les instructions relatives à l'accès au RAM mémoire du système, en lecture ou en écriture. Il n'y a pas d'unité L / S, mais il existe deux types d'unités qui fonctionnent en parallèle et qui gèrent l'accès aux données.

La description la plus simple de son fonctionnement est la suivante: une unité de chargement est chargée de stocker les informations de la mémoire RAM vers les registres et une unité de stockage le fait dans la direction opposée. Pour fonctionner, ils ont leur propre mémoire pour ce type d'unité, où ils stockent les demandes de mémoire pour chaque instruction.

Où sont situées les unités Load-Store?

Localisation du magasin de chargement

La première chose à laquelle nous pouvons penser est que les unités de chargement / stockage sont aussi proches que possible du processeur, mais malgré le fait que leur travail consiste à déplacer les données de la RAM vers les registres, elles n'ont pas d'accès direct à la RAM. , mais plutôt qu'un autre mécanisme dont nous avons déjà parlé dans: » C'est ainsi que le CPU accède si rapidement à la mémoire RAM »Est en charge, où nous parlons de la communication de l'interface mémoire du CPU avec la RAM.

Dans sa conception la plus simple, les unités de chargement / stockage communiquent avec les interfaces qui communiquent le processeur avec la mémoire RAM, en particulier avec les registres MAR et MDR, et sont les seules unités autorisées à manipuler lesdits registres, ainsi qu'à transférer les données. aux différents registres pour l'exécution de certaines instructions.

Par conséquent, les unités de chargement / stockage ne sont pas situées dans la partie la plus proche de la mémoire, mais sont situées à mi-chemin entre les registres des registres des différentes unités d'exécution et l'interface mémoire utilisée dans chaque processeur. trouvé dans le périmètre.

Ajout d'une hiérarchie de cache

Cache amorce Nivel Spllit

Le cache n'est rien de plus que la mémoire interne du processeur qui copie les données les plus proches de l'endroit où se déroule l'exécution du code à ce moment. Chaque nouveau niveau de la hiérarchie a une plus grande capacité de stockage, mais en même temps il est plus lent et a une latence plus élevée. Au lieu de cela, dans le sens inverse, chaque niveau de cache ne contient qu'une partie du précédent, mais il est plus rapide et avec une latence plus faible.

Dans les processeurs actuels, tous les niveaux contiennent des informations sur les instructions et les données dans la même mémoire, à l'exception d'un niveau, qui est le cache de niveau le plus bas. Où il y a un cache pour les instructions et un autre pour les données. Les unités de chargement / stockage n'interagissent jamais avec le cache d'instructions, mais avec le cache de données.

Cache de données LSU

Lorsque les unités de chargement de chaque noyau ont besoin de données, la première chose qu'elles font est de «demander» au cache de données si elles contiennent les informations pour une certaine adresse mémoire. L'opération est en lecture seule, donc s'ils la trouvent, ils la copieront du cache vers le registre correspondant. Si dans un niveau de cache il ne le trouve pas, il descendra niveau par niveau. Considérez-le comme quelqu'un qui recherche un document dans un immeuble de bureaux pyramidal, où chaque niveau a plus de fichiers à rechercher.

Par contre, les unités Store sont un peu plus complexes, elles recherchent également une adresse mémoire dans le cache, mais à partir du moment où l'on parle de modifier les données qu'elles hébergent il faut qu'il y ait un système de cohérence qui change le référence à cette adresse mémoire dans toute la hiérarchie du cache et dans la RAM elle-même.

RISC = magasin de chargement?

RISC contre CISC

Une fois que nous avons appris ce que font les unités de chargement / stockage, nous devons leur donner un contexte historique et c'est qu'elles ne sont pas le seul moyen par lequel un processeur peut accéder à la RAM du système pour charger et stocker des données.

Le concept Load-Store est lié à des ensembles de registres et d'instructions de type RISC, où l'ensemble d'instructions est réduit et une façon de le faire est de séparer le processus d'accès à la mémoire des différentes instructions dans une autre instruction, telle que plusieurs instructions. ils auront un processus d'accès mémoire similaire qui utilise des unités de chargement / stockage pour effectuer cette partie.

Les conséquences nous sont déjà connues, le code binaire des programmes pour les jeux d'instructions CISC finit par avoir un binaire plus compact et plus petit, tandis que les unités RISC l'ont plus grand. Gardez à l'esprit qu'au début de l'informatique, la RAM était très chère et rare et qu'il était important de garder le code binaire aussi petit que possible. Aujourd'hui, tous les processeurs x86 sont post-RISC, car lors du décodage des instructions x86, ils le font dans une série de micro-instructions qui permettent au processeur de fonctionner comme s'il s'agissait d'un processeur RISC.

LSU sur GPU

GPU NVIDIA

Oui, les GPU ont également des unités de chargement / stockage, qui se trouvent dans les unités de calcul et sont chargées de rechercher les données que les ALU doivent exécuter. Il ne faut pas oublier que les unités de calcul de AMD, Sous-tranches de Intel ou les multiprocesseurs Stream de NVIDIA en arrière-plan se trouvent différents signifiants pour la même chose, les cœurs GPU où s'exécutent leurs programmes, connus familièrement sous le nom de shaders.

Les différentes ALU d'une unité de calcul ont tendance à fonctionner au niveau des registres la plupart du temps, cela signifie que l'instruction est livrée avec les données pour fonctionner directement, mais certaines instructions se réfèrent à des données qui ne se trouvent pas dans les registres, il est donc nécessaire pour les rechercher dans les caches.

Le système de recherche de données est le même que dans les processeurs, il examine d'abord le cache de données de chaque unité de calcul et fonctionne jusqu'à ce qu'il atteigne la fin de la hiérarchie de la mémoire dans la mesure où le GPU peut accéder. Ceci est essentiel lors de l'accès à des données volumineuses telles que des cartes de texture.

Fonctionnalité fixe sur les GPU et les disques Load-Store

Esquema SM Nvidia Turing

Certaines des unités situées dans les unités de calcul utilisent les unités de stockage de charge pour communiquer avec le GPU, ces unités ne sont pas des ALU, mais des unités indépendantes de fonction fixe ou d'accélérateurs. Aujourd'hui, il existe deux types d'unités qui utilisent les unités de chargement / stockage dans un GPU:

  • Unités de filtrage de texture
  • L'unité en charge du calcul de l'intersection des rayons en Ray Tracing

Étant donné que ces unités doivent accéder au cache de données pour obtenir la même chose en tant que paramètres d'entrée pour remplir leur fonction. Le nombre d'unités de chargement / stockage dans une unité de calcul est variable, mais il est généralement égal ou supérieur à 16, car nous avons 4 unités de texture qui nécessitent 4 données pour effectuer le filtre bilinéaire.

De la même manière, les données des nœuds des arbres BVH sont stockées dans les différents niveaux de cache. Dans certains cas spécifiques, tels que les GPU NVIDIA, les unités de Ray Tracing ont un LSU interne qui lit à partir du cache L0 du RT Core.