ads
Homepage > Comment fonctionnent les caches CPU L1 et L2 et pourquoi ils sont une partie essentielle des puces modernes

Comment fonctionnent les caches CPU L1 et L2 et pourquoi ils sont une partie essentielle des puces modernes

Le développement des caches et de la mise en cache est l’un des événements les plus importants de l’histoire de l’informatique. Pratiquement tous les cœurs de processeur modernes, des puces ultra-faible consommation comme l’ARM Cortex-A5 aux processeurs Intel Core i9 les plus haut de gamme, utilisent des caches. Même les microcontrôleurs haut de gamme ont souvent de petits caches ou les proposent en option – les avantages en termes de performances sont trop importants pour être ignorés, même dans les conceptions à très faible consommation.

La mise en cache a été inventée pour résoudre un problème important. Dans les premières décennies de l’informatique, la mémoire principale était extrêmement lente et incroyablement chère, mais les processeurs n’étaient pas particulièrement rapides non plus. À partir des années 1980, l’écart a commencé à se creuser rapidement. Les vitesses d’horloge des microprocesseurs ont décollé, mais les temps d’accès à la mémoire se sont améliorés de manière beaucoup moins spectaculaire. Au fur et à mesure que cet écart grandissait, il devenait de plus en plus clair qu’un nouveau type de mémoire rapide était nécessaire pour combler l’écart.

Horloges CPU vs DRAM

Alors qu’il ne fonctionne que jusqu’en 2000, les écarts croissants des années 1980 ont conduit au développement des premiers caches CPU.

Comment fonctionne la mise en cache

Les caches CPU sont de petits pools de mémoire qui stockent les informations dont le CPU aura probablement besoin ensuite. Les informations chargées dans le cache dépendent d’algorithmes sophistiqués et de certaines hypothèses concernant le code de programmation. L’objectif du système de cache est de s’assurer que le processeur a le prochain bit de données dont il aura besoin déjà chargé dans le cache au moment où il va le chercher (également appelé un coup de cache).

Un manque de cache, en revanche, signifie que le processeur doit partir en courant pour trouver les données ailleurs. C’est là que le cache L2 entre en jeu – bien qu’il soit plus lent, il est également beaucoup plus volumineux. Certains processeurs utilisent une conception de cache inclusif (ce qui signifie que les données stockées dans le cache L1 sont également dupliquées dans le cache L2) tandis que d’autres sont exclusifs (ce qui signifie que les deux caches ne partagent jamais de données). Si les données ne peuvent pas être trouvées dans le cache L2, le processeur continue la chaîne jusqu’à L3 (généralement toujours sur matrice), puis L4 (s’il existe) et la mémoire principale (DRAM).

L1-L2Solde

Ce graphique montre la relation entre un cache L1 avec un taux de réussite constant, mais un cache L2 plus grand. Notez que le taux de réussite total augmente fortement à mesure que la taille du L2 augmente. Un L2 plus grand, plus lent et moins cher peut offrir tous les avantages d’un grand L1, mais sans la taille de la matrice et la pénalité de consommation d’énergie. La plupart des taux de cache L1 modernes ont des taux de réussite bien supérieurs aux 50 % théoriques indiqués ici — Intel et AMD ont tous deux des taux de réussite de cache de terrain de 95 % ou plus.

Le prochain sujet important est l’associativité des ensembles. Chaque CPU contient un type spécifique de RAM appelé Tag RAM. L’étiquette RAM est un enregistrement de tous les emplacements de mémoire pouvant être mappés sur un bloc de cache donné. Si un cache est entièrement associatif, cela signifie que n’importe quel bloc de données RAM peut être stocké dans n’importe quel bloc de cache. L’avantage d’un tel système est que le taux de réussite est élevé, mais le temps de recherche est extrêmement long – le processeur doit parcourir tout son cache pour savoir si les données sont présentes avant de rechercher la mémoire principale.

À l’opposé du spectre, nous avons des caches mappés directement. Un cache mappé directement est un cache où chaque bloc de cache peut contenir un et un seul bloc de mémoire principale. Ce type de cache peut être recherché extrêmement rapidement, mais comme il mappe 1:1 aux emplacements de mémoire, il a un faible taux de réussite. Entre ces deux extrêmes se trouvent n-façon caches associatifs. Un cache associatif bidirectionnel (le L1 de Pileddriver est bidirectionnel) signifie que chaque bloc de mémoire principale peut être mappé à l’un des deux blocs de cache. Un cache associatif à huit voies signifie que chaque bloc de mémoire principale peut se trouver dans l’un des huit blocs de cache. Le cache d’instructions L1 de Ryzen est associatif à 4 voies, tandis que le cache de données L1 est associatif à 8 voies.

Les deux diapositives suivantes montrent comment le taux de réussite s’améliore avec l’associativité définie. Gardez à l’esprit que des éléments tels que le taux de réussite sont très particuliers : différentes applications auront des taux de réussite différents.

Taux d'accès au cache

Pourquoi les caches CPU ne cessent de s’agrandir

Alors pourquoi ajouter des caches toujours plus grands en premier lieu ? Parce que chaque pool de mémoire supplémentaire repousse le besoin d’accéder à la mémoire principale et peut améliorer les performances dans des cas spécifiques.

Crystalwell contre Core i7

Ce graphique de la revue Haswell d’Anandtech est utile car il illustre l’impact sur les performances de l’ajout d’un énorme cache L4 (128 Mo) ainsi que des structures L1/L2/L3 conventionnelles. Chaque marche d’escalier représente un nouveau niveau de cache. La ligne rouge est la puce avec un L4 – notez que pour les fichiers volumineux, elle est toujours presque deux fois plus rapide que les deux autres puces Intel.

Il peut donc sembler logique de consacrer d’énormes quantités de ressources sur la matrice au cache – mais il s’avère que le rendement marginal de le faire diminue. Les caches plus grands sont à la fois plus lents et plus chers. À six transistors par bit de SRAM (6T), le cache est également coûteux (en termes de taille de puce, et donc de coût en dollars). Passé un certain point, il est plus logique de dépenser le budget de puissance de la puce et le nombre de transistors sur plus d’unités d’exécution, une meilleure prédiction de branche ou des cœurs supplémentaires. En haut de l’histoire, vous pouvez voir une image de la puce Pentium M (Centrino/Dothan); tout le côté gauche du dé est dédié à un énorme cache L2. C’était le cas dans les derniers jours des processeurs à thread unique, maintenant que nous avons des puces multicœurs et des GPU sur matrice dans de nombreux cas, un pourcentage plus faible du processeur global est dédié au cache.

Impact de la conception du cache sur les performances

L’impact sur les performances de l’ajout d’un cache CPU est directement lié à son efficacité ou à son taux de réussite ; les échecs répétés du cache peuvent avoir un impact catastrophique sur les performances du processeur. L’exemple suivant est considérablement simplifié mais devrait servir à illustrer ce point.

Imaginez qu’un processeur doit charger les données du cache L1 100 fois de suite. Le cache L1 a une latence d’accès de 1 ns et un taux de réussite de 100 %. Il faut donc à notre CPU 100 nanosecondes pour effectuer cette opération.

Haswell-E die shot

Haswell-E die shot (cliquez pour zoomer). Les structures répétitives au milieu de la puce sont 20 Mo de cache L3 partagé.

Maintenant, supposons que le cache a un taux de réussite de 99%, mais que les données dont le processeur a réellement besoin pour son 100e accès se trouvent en L2, avec une latence d’accès de 10 cycles (10 ns). Cela signifie qu’il faut au processeur 99 nanosecondes pour effectuer les 99 premières lectures et 10 nanosecondes pour effectuer la 100e. Une réduction de 1 % du taux de réussite vient de ralentir le processeur de 10 %.

Dans le monde réel, un cache L1 a généralement un taux de réussite entre 95 et 97 pour cent, mais le performance l’impact de ces deux valeurs dans notre exemple simple n’est pas de 2 %, mais de 14 %. Gardez à l’esprit que nous supposons que les données manquées se trouvent toujours dans le cache L2. Si les données ont été expulsées du cache et se trouvent dans la mémoire principale, avec une latence d’accès de 80 à 120 ns, la différence de performances entre un taux de réussite de 95 et 97 % pourrait presque doubler le temps total nécessaire pour exécuter le code.

À l’époque où la famille Bulldozer d’AMD a été comparée aux processeurs d’Intel, le sujet de la conception du cache et de l’impact sur les performances a été beaucoup abordé. On ne sait pas dans quelle mesure les performances médiocres de Bulldozer pourraient être imputées à son sous-système de cache relativement lent – en plus d’avoir des latences relativement élevées, la famille Bulldozer a également souffert d’une grande quantité de cache contention. Chaque module Bulldozer/Piledriver/Steamroller partageait son cache d’instructions L1, comme indiqué ci-dessous :

Tableau des caches du Steamroller

Un cache est contesté lorsque deux threads différents écrivent et écrasent des données dans le même espace mémoire. Cela nuit aux performances des deux threads – chaque cœur est obligé de passer du temps à écrire ses propres données préférées dans le L1, uniquement pour que l’autre cœur écrase rapidement ces informations. L’ancien Steamroller d’AMD est toujours frappé par ce problème, même si AMD a augmenté le cache de code L1 à 96 Ko et l’a rendu associatif à trois voies au lieu de deux. Les processeurs Ryzen ultérieurs ne partagent pas le cache de cette manière et ne souffrent pas de ce problème.

Taux de réussite des Opteron et Xeon

Image par Anandtech

Ce graphique montre comment le taux de réussite de l’Opteron 6276 (un processeur Bulldozer original) a chuté lorsque les deux cœurs étaient actifs, au moins dans certains tests. De toute évidence, cependant, la contention de cache n’est pas le seul problème – le 6276 a historiquement eu du mal à surpasser le 6174 même lorsque les deux processeurs avaient des taux de réussite égaux.

Zen 2 n’a pas ce genre de faiblesses aujourd’hui, et les performances globales du cache et de la mémoire de Zen et Zen 2 sont bien meilleures que l’ancienne architecture Piledriver.

Des débuts initiaux d’AMD à Ryzen. Ryzen utilise un système de cache très différent des précédents processeurs AMD.

Les processeurs modernes ont également souvent un très petit cache « L0 », qui ne fait souvent que quelques Ko et est utilisé pour stocker les micro-opérations. AMD et Intel utilisent tous deux ce type de cache ; Zen avait un cache OP de 2 048, tandis que Zen 2 a un cache OP de 4 096. Ces petits pools de cache fonctionnent selon les mêmes principes généraux que L1 et L2, mais représentent un pool de mémoire encore plus petit auquel le processeur peut accéder à des latences encore plus faibles que L1. Souvent, les entreprises ajustent ces capacités les unes par rapport aux autres. Zen 1 et Zen+ (APU Ryzen 1xxx, 2xxx, 3xxx) ont un cache d’instructions L1 de 64 Ko qui est associatif à 4 voies et un cache de 2 048 OP L0. Zen 2 (processeurs de bureau Ryzen 3xxx, Ryzen Mobile 4xxx) possède un cache d’instructions L1 de 32 Ko qui est associatif à 8 voies et un cache OP de 4 096. Le doublement de l’associativité définie et de la taille du cache OP a permis à AMD de réduire de moitié la taille du cache L1. Ces types de compromis sont courants dans les conceptions de processeurs.

Innovations futures

Récemment, IBM a lancé son microprocesseur Telum avec une structure de cache intéressante et inhabituelle. Telum a les L1 et L2 habituels, mais au lieu d’un L3 physique, le CPU déploie un L3 virtuel. Au lieu d’expulser complètement les données L2 dont le processeur ne pense plus avoir besoin, le processeur de nouvelle génération les expulse dans le cache L2 d’un processeur différent sur la même tranche de silicium et les marque comme données L3. Chaque cœur a son propre L2 de 32 Mo et le L3 virtuel sur l’ensemble de la puce est de 256 Mo. IBM peut même partager cette capacité sur des systèmes multi-puces, créant un L4 virtuel avec un total de 8192 Mo de stockage de données.

Ce type de système de cache virtuel est quelque chose d’unique – il n’a pas d’équivalent du côté x86 de l’équation – et c’est un exemple intéressant de la façon dont les entreprises repoussent les limites de la conception de cache. Bien que le V-Cache d’AMD soit conçu pour fournir des L3 supplémentaires, pas L2, nous serions négligents de ne pas le mentionner du tout. La réalisation récente d’AMD et une capacité qui devrait apparaître sur les futurs processeurs Zen est un grand cache L3 monté verticalement au-dessus des puces existantes et connecté à eux via des vias en silicium intégrés. Le cache a peut-être 40 ans à ce stade, mais les fabricants et les concepteurs trouvent toujours des moyens de l’améliorer et d’étendre son utilité.

Mise en cache

La structure et la conception du cache sont encore en cours d’affinement alors que les chercheurs cherchent des moyens d’obtenir des performances plus élevées à partir de caches plus petits. Jusqu’à présent, des fabricants comme Intel et AMD n’ont pas encore poussé de manière spectaculaire à des caches plus grands ou à des conceptions allant jusqu’à un L4. Certains processeurs Intel avec EDRAM embarquée ont ce qui équivaut à un cache L4, mais cette approche est inhabituelle. C’est pourquoi nous avons utilisé l’exemple Haswell ci-dessus, même si ce processeur est plus ancien. Vraisemblablement, les avantages d’un grand cache L4 ne l’emportent pas encore sur les coûts pour la plupart des cas d’utilisation.

Quoi qu’il en soit, la conception du cache, la consommation d’énergie et les performances seront essentielles aux performances des futurs processeurs, et des améliorations substantielles des conceptions actuelles pourraient améliorer le statut de toute entreprise pouvant les mettre en œuvre.

Maintenant lis:

Consultez également notre série TechToSee’s Explains pour une couverture plus approfondie des sujets technologiques les plus en vogue d’aujourd’hui.

.
Similar Posts:

Leave A Reply

Please enter your comment!
Please enter your name here

Stay on Top - Get the daily news in your inbox

Recent Articles

Most Popurlar

Trending this Week

Similar Posts: