I. Introduction▲
Vous devez sûrement savoir que nos processeurs sont fabriqués avec des composants électroniques que l'on appelle des transistors, reliés pour former des circuits plus ou moins compliqués. Afin d'expliquer pourquoi notre processeur chauffe et comment diminuer sa consommation énergétique, il va falloir expliquer comment fonctionnent ces transistors utilisés dans nos ordinateurs. Eh oui, la grande partie des pertes énergétiques à l'intérieur d'un processeur a lieu dans ces transistors. De plus, une grande partie des astuces des fabricants repose justement sur les propriétés des transistors utilisés dans nos ordinateurs.
II. Rappels sur le transistor CMOS▲
Petite précision pour commencer : il existe différents types de transistors, chacun avec ses particularités, ses avantages et ses inconvénients. On ne va pas en parler plus que ça, mais il faut préciser que les transistors utilisés dans nos ordinateurs sont des transistors à effet de champ à technologie CMOS. Si vous ne comprenez pas ce que ça signifie, ce n'est pas grave, c'est un simple détail.
Mais qu'est-ce qu'un transistor CMOS ?
Il s'agit simplement d'un composant relié au reste du circuit électronique par trois morceaux de fil conducteur que l'on appelle broches. Nous allons appliquer de force une tension électrique sur ces broches (attention à ne pas la confondre avec le courant électrique), et cette tension représentera soit 0 soit 1 en fonction du transistor utilisé.
Ces trois broches ont des utilités différentes et on leur a donné un nom pour mieux les repérer :
- la grille ;
- le drain ;
- la source.
Dans les processeurs, on utilise notre transistor comme un interrupteur qui réagit en fonction de sa grille : suivant la valeur de la tension qui est appliquée sur la grille, le transistor conduira ou ne conduira pas le courant entre la source et le drain. En clair, appliquez la tension adéquate et la liaison entre la source et le drain se comportera comme un interrupteur fermé et conduira le courant : le transistor sera alors dit dans l'état passant. Par contre, si vous appliquez une autre tension adéquate sur la grille, cette liaison se comportera comme un interrupteur ouvert et le courant ne passera pas : le transistor sera dit dans l'état bloqué.
Il existe deux types de transistors CMOS, qui différent entre autres par la tension qu'il faut mettre sur la grille pour les ouvrir/fermer :
- les transistors NMOS qui s'ouvrent lorsqu'on place une tension égale à zéro sur la grille et se ferment si la tension placée sur cette même grille représente un 1 ;
- les PMOS pour qui c'est l'inverse : ils se ferment lorsque la tension sur la grille est nulle, et s'ouvrent si celle-ci représente un 1.
II-A. Anatomie d'un CMOS▲
Voyons maintenant ce que notre transistor a dans le ventre.
À l'intérieur du transistor, on trouve simplement une plaque en métal reliée à la grille appelée l'armature, un bout de semi-conducteur entre la source et le drain, et un morceau d'isolant entre les deux.
II-B. Comment ça marche ?▲
Premier cas : on laisse la grille tranquille, la plaque de métal reliée à la grille est vide d'électrons. Si on place une tension entre la source et le drain, un courant électrique va passer et des électrons vont circuler de la source vers le drain : un courant va s'établir.
Maintenant, si on place une tension sur la grille, des électrons vont s'accumuler dans la plaque de métal de la grille jusqu'à un certain point. Au bout d'un certain temps, la grille sera remplie. Ces électrons chargés négativement vont donc repousser tous les autres électrons qui circulent entre la source et le drain, ce qui va les gêner et faire circuler ceux-ci plus difficilement : le courant va diminuer.
À partir d'une certaine tension, les électrons stockés dans la grille vont tellement repousser les électrons de la source que ceux-ci ne traverseront plus du tout la liaison entre la source et le drain : le courant ne passe plus.
III. Consommation dynamique▲
Il y a plusieurs raisons qui font que nos transistors vont consommer du courant. Nos transistors peuvent consommer quand on les fait changer d'état, ou consommer sans que l'on fasse quoi que ce soit dessus. On doit ainsi faire la différence entre consommation statique et consommation dynamique. Commençons par cette dernière. Cette consommation dynamique correspond à la consommation énergétique du processeur due au fait que nos transistors changent d'état.
Pourquoi ?
La première cause d'échauffement dans un transistor est l'accumulation ou la fuite des électrons de la grille lorsque notre transistor change d'état. Pour cela, il faut que la tension de la grille varie de façon à faire passer la plaque de métal de l'état vide à l'état rempli, ou inversement. En vue d'expliquer pourquoi, il faut d'abord remarquer quelque chose : si vous regardez bien, notre transistor est composé de deux morceaux de conducteurs (la grille et la liaison drain-source) séparés par un isolant, c'est une sorte de condensateur. Un condensateur est un composant capable d'accumuler des charges électriques (ici, des électrons).
Pour accumuler des charges dans ce condensateur (sur l'armature de la grille), il faut fournir de l'énergie qui sera donc consommée. De même, lorsque l'armature se vide, l'énergie stockée dans cette dernière va se dissiper sous forme de chaleur. L'énergie accumulée par un condensateur est de kitxmlcodeinlinelatexdvp\frac {1} {2} \times C \times U^2finkitxmlcodeinlinelatexdvp, avec kitxmlcodeinlinelatexdvpUfinkitxmlcodeinlinelatexdvp la tension appliquée sur l'armature, et kitxmlcodeinlinelatexdvpCfinkitxmlcodeinlinelatexdvp un paramètre du condensateur nommé sa capacité. Donc, à chaque fois qu'un transistor doit changer d'état, il va pomper une énergie proportionnelle à kitxmlcodeinlinelatexdvpU^2finkitxmlcodeinlinelatexdvp.
III-A. Fréquence▲
Nos processeurs actuels sont cadencés par ce que l'on appelle une horloge : il s'agit d'une tension cyclique qui sert à synchroniser les circuits présents dans notre processeur. Cette tension change de valeur plusieurs fois par seconde. Le nombre exact de changements de valeur de l'horloge qui ont lieu durant une seconde s'appelle la fréquence du processeur. Cette fréquence se mesure dans une unité : le hertz.
Cette fréquence définit le nombre maximal de changements d'état qu'un transistor peut subir en une seconde : pour une fréquence de 50 hertz, un transistor peut changer d'état 50 fois par seconde maximum. Mais ça ne veut pas dire forcément qu'il le fera : il peut ne pas changer d'état si le circuit dont il fait partie ne fait pas de calculs, il ne dissipera ni ne consommera d'énergie. En effet, dans un circuit qui n'effectue pas de calculs et qui ne fait donc rien, il n'y a aucune raison que les transistors changent d'état. Enfin presque, tout circuit est relié à l'horloge et donc certains transistors du circuit devront tout de même changer d'état, mais nous reviendrons sur cela plus tard.
III-B. Consommation dynamique▲
Une partie des pertes énergétiques vient du fait que nos transistors consomment de l'énergie en changeant d'état : on appelle cette perte la consommation dynamique. C'est cette consommation qui intervient pour une grande part dans la consommation énergétique d'un processeur. Les fabricants ont donc cherché un moyen d'estimer celle-ci de façon à pouvoir la diminuer le plus possible. Comme on le voit, suivant la charge de travail que l'on donnera à un processeur, celui-ci chauffera plus ou moins. Difficile donc d'évaluer la quantité de chaleur dissipée et l'énergie consommée sans faire d'approximations. Pour évaluer la quantité de chaleur dissipée en une seconde par notre processeur, on va poser une petite hypothèse : nos transistors n'arrêtent pas de changer d'état et sont exploités au mieux ! Donc, pour un processeur de fréquence kitxmlcodeinlinelatexdvpffinkitxmlcodeinlinelatexdvp, nos transistors vont changer d'état kitxmlcodeinlinelatexdvpffinkitxmlcodeinlinelatexdvp fois par seconde.
Pour un seul transistor, l'énergie dissipée en une seconde est donc calculable de la sorte :
kitxmlcodelatexdvp\frac {1} {2} \times C \times U^2 \times ffinkitxmlcodelatexdvpPour obtenir la consommation d'énergie totale de notre processeur, il suffit de multiplier celle d'un transistor par le nombre total de transistors de notre processeur (on peut faire ça parce que ces transistors sont tous identiques). En notant le nombre total de transistors du processeur kitxmlcodeinlinelatexdvpnfinkitxmlcodeinlinelatexdvp, on a alors :
kitxmlcodelatexdvp\frac {1} {2} \times n \times C \times U^2 \times ffinkitxmlcodelatexdvpOn peut donc en déduire quelque chose : plus un processeur a de transistors, plus celui-ci consommera et chauffera. On peut aussi en déduire qu'un processeur consommera d'autant plus que sa fréquence et/ou sa tension d'alimentation sont élevées.
Vu que kitxmlcodeinlinelatexdvpnfinkitxmlcodeinlinelatexdvp, et kitxmlcodeinlinelatexdvpCfinkitxmlcodeinlinelatexdvp dépendent du processeur et de sa conception, on peut décider de les passer sous le tapis pour obtenir un résultat un peu indépendant de la conception du processeur, en posant :
kitxmlcodelatexdvp\frac {C \times n} {2} = KfinkitxmlcodelatexdvpOn obtient la formule nous permettant de déduire la consommation d'un processeur en fonction de sa fréquence et de sa tension d'alimentation :
kitxmlcodelatexdvpK \times f \times U^2finkitxmlcodelatexdvpIII-C. Solutions▲
On voit donc plusieurs solutions simples pour diminuer la consommation énergétique d'un processeur :
- diminuer le nombre de transistors ;
- diminuer la capacité résiduelle de ces transistors ;
- diminuer la fréquence ;
- diminuer la tension d'alimentation du processeur.
On remarque quand même que diminuer la tension d'alimentation est la solution la plus efficace : la consommation énergétique est proportionnelle au carré de la tension, et non à la tension elle-même. Logiquement, les efforts devraient se concentrer sur une diminution de la tension. C'est en pratique ce que font les fabricants de processeurs : ils améliorent leurs transistors de façon à pouvoir diminuer au maximum la tension minimale qui leur permet de fonctionner normalement. En diminuant certains paramètres du transistor, comme la longueur de son armature, l'épaisseur de l'isolant, ou la longueur de la tranche de semi-conducteur, on peut diminuer la tension nécessaire pour faire fonctionner notre transistor. Et cela, sans toucher à la fréquence.
Eh oui, car la fréquence et la tension sont reliées d'une façon qui pose problème quand on souhaite diminuer la tension. Plus la tension d'alimentation d'un transistor est élevée, plus la grille se remplit et se vide vite, plus on peut faire changer d'état le transistor rapidement et donc on peut augmenter la fréquence. Avec les processeurs actuels, la fréquence est devenue tellement démesurée qu'il est difficile de diminuer la tension sans sacrifier en fréquence et donc perdre en performance. Difficile à faire, cependant des solutions techniques existent. Quant au nombre de transistors, nos processeurs actuels embarquent de plus en plus de circuits pour gagner en performance et diminuer le nombre de transistors semble être un vœu pieux, irréalisable.
III-D. Dynamic frequency scaling▲
Cependant, les fabricants de CPU sont pleins d'astuces. Ils ont eu l'idée de faire varier la tension et la fréquence en fonction de ce que l'on demande au processeur. Rien ne sert d'avoir un processeur qui tourne à 200 gigahertz pendant que l'on regarde ses mails. Par contre, avoir un processeur à cette fréquence peut être utile lorsque l'on joue à un jeu vidéo dernier cri qui a besoin d'une quantité énorme de ressources. Dans ce cas, pourquoi ne pas adapter la fréquence suivant l'utilisation qui est faite du processeur ? C'est l'idée qui est derrière le Dynamic Frequency Scaling, aussi appelé DFS. Pour cela, il faut inclure dans les circuits du processeur une petite unité dédiée à la gestion de l'énergie. Cette unité estimera en permanence l'utilisation et la charge de travail imposée au processeur et en déduira s'il faut réduire la fréquence du processeur (et de combien) ou la laisser à son niveau maximal. Cette unité utilise différents algorithmes câblés sous forme de circuits qui analysent et adaptent la fréquence.
III-D-1. Implémentation▲
Voyons maintenant comment est implémentée cette technique. Tout d'abord, il faut savoir qu'il existe plusieurs horloges dans notre ordinateur. Ainsi, la mémoire ne travaille pas à la même fréquence que le processeur. Toutes ces horloges sont dérivées d'une horloge de base qui est « transformée » en plusieurs horloges dans notre ordinateur. On peut parfaitement transformer un signal d'horloge en un autre, ayant une période deux fois plus grande ou plus petite, grâce à des montages électroniques spécialisés. Cela peut se faire avec des composants appelés des PLL ou encore avec des montages à portes logiques un peu particuliers, qu'on n'abordera pas ici.
La fréquence du processeur est un multiple de cette fréquence de base : on obtient la fréquence du processeur en multipliant celle-ci par un coefficient multiplicateur. Pour effectuer cette multiplication de fréquence, l'horloge va passer par un circuit avant d'être distribuée à travers tout le processeur. Ce circuit est ce qu'on appelle une Phase Locked Loop, ou PLL. Le Dynamic Frequency Scaling consiste simplement à utiliser une PLL dont le coefficient multiplicateur est programmable, et de la commander suivant les besoins.
III-D-2. Efficacité▲
Cette technologie est en soi assez peu efficace. Et cela pour plusieurs raisons : la consommation énergétique varie proportionnellement à la fréquence, ce qui a moins d'impact qu'une baisse de la tension d'alimentation. De plus, cela n'aura d'impact que sur les circuits qui changent d'état, à savoir les circuits qui font des calculs ou ceux qui sont reliés à l'horloge pour qu'ils se synchronisent avec elle. Diminuer la fréquence lorsque l'on a besoin de calculs serait inutile : on observerait une baisse des performances assez flagrante et peu de personnes seraient prêtes à l'accepter ; diminuer la fréquence quand peu de circuits changent d'état est peu efficace.
III-E. Dynamic Voltage Scaling▲
Mais la technologie du Dynamic frenquency Scaling a un effet de bord. Comme on l'a vu plus haut, les circuits de nos processeurs ont besoin d'une tension d'autant plus élevée qu'ils doivent avoir une fréquence élevée. Le truc, c'est que la réciproque est vraie : diminuer la fréquence d'un circuit permet de diminuer sa tension d'alimentation. Ainsi, en utilisant la technique du DFS, on peut utiliser une autre technologie qui permettra de diminuer, non seulement la fréquence, mais aussi la tension d'alimentation du processeur. La technologie consistant à diminuer la tension d'alimentation s'appelle le Dynamic Voltage Scaling, de son petit nom : DVS. Là encore, c'est l'unité de gestion de l'énergie intégrée au processeur qui se charge de gérer les tensions d'alimentation : quand les diminuer et de combien.
Avec cette technologie, on sort l'artillerie lourde ! En effet, ce procédé a un impact important sur la consommation énergétique du processeur : si vous vous souvenez des équations vues plus haut, vous savez que l'énergie dissipée durant une seconde est proportionnelle au carré de la tension. En clair, diviser la tension par 2 correspond à diviser par 4 l'énergie dépensée. Dans la réalité, on n'arrive jamais à diviser par deux la tension d'alimentation déjà très basse. Mais les gains sont quand même conséquents. Les technologies DVS et DFS ont toutes les deux été intégrées dans les processeurs modernes sous des noms de marketing assez exotiques : cool and quiet pour AMD et SpeedStep pour Intel. Néanmoins, ni AMD ni Intel ne sont les inventeurs des principes du DVS ou du DFS.
III-F. Clock gating▲
Comme je l'ai dit plus haut, dans un circuit électronique fait de transistors CMOS, ce sont les changements d'état qui seront à l'origine de la majorité de la consommation d'énergie du processeur. Or, certains circuits sont reliés à l'horloge du processeur et vont, pour prendre en compte celle-ci et garder la synchronisation avec les autres composants, devoir changer d'état à chaque fois que l'horloge change de valeur. Notre horloge est, rappelons-le, une tension qui varie cycliquement dans le temps. Elle est distribuée à tous les circuits électroniques du processeur par un réseau électrique interne au CPU, nommé l'arbre d'horloge. Une grande part des pertes en énergie a lieu dans cet arbre d'horloge. On estime que ces pertes peuvent varier de 20 à 35 %. Une grande partie des pertes vient des composants reliés à l'horloge qui doivent continuer à changer d'état tant que l'horloge est présente, et ce, même quand ils sont inutilisés.
III-F-1. Implémentation▲
La solution est ne pas envoyer le signal d'horloge en entrée des différents circuits inutilisés : on appelle cela le clock gating. Pour implémenter cette technique, on est obligé de découper notre processeur en sous-circuits, tous reliés à l'horloge. L'ensemble de ces circuits formera un tout du point de vue de l'horloge : on pourra tous les déconnecter de l'horloge d'un coup.
Pour implémenter le Clock Gating, on dispose entre l'arbre d'horloge et le circuit un circuit qui inhibera l'horloge au besoin. Ce circuit d'inhibition de l'horloge, qui s'appelle une Clock Gate, est relié à la fameuse unité de gestion de l'énergie intégrée dans le processeur qui se charge de le commander.
Comme on le voit sur le schéma du dessus, ces Clock Gates sont commandées par un signal spécial. Ce signal est un simple bit, qui vaut zéro ou un, et dont la valeur ordonne à la Clock Gate de propager ou non l'horloge jusqu'au circuit. Ce signal est généré par une unité spéciale dans notre processeur.
III-G. Capacité▲
Une dernière idée pour diminuer la consommation dynamique du processeur pourrait être de diminuer la capacité de chaque transistor. Il faut savoir que le condensateur formé par la grille, l'isolant et le morceau de semi-conducteur est ce que l'on appelle un condensateur plan. La capacité de ce type de condensateur dépend de la surface de la plaque de métal (la grille), du matériau utilisé comme isolant (en fait, de sa permittivité), et de la distance entre la grille et le semi-conducteur. On peut calculer cette capacité comme suit :
kitxmlcodelatexdvpC = \frac {S \times \epsilon} {d}finkitxmlcodelatexdvpavec kitxmlcodeinlinelatexdvpSfinkitxmlcodeinlinelatexdvp la surface de la grille, kitxmlcodeinlinelatexdvp\epsilonfinkitxmlcodeinlinelatexdvp un paramètre qui dépend de l'isolant utilisé et kitxmlcodeinlinelatexdvpdfinkitxmlcodeinlinelatexdvp la distance entre le semi-conducteur et la grille (l'épaisseur de l'isolant, quoi).
Trois solutions s'offrent à nous :
- diminuer kitxmlcodeinlinelatexdvpSfinkitxmlcodeinlinelatexdvp (la surface de la grille) ;
- augmenter kitxmlcodeinlinelatexdvpdfinkitxmlcodeinlinelatexdvp (la distance entre le semi-conducteur et la grille) ;
- modifier kitxmlcodeinlinelatexdvp\epsilonfinkitxmlcodeinlinelatexdvp (le coefficient de l'isolant).
Tout d'abord, la variable kitxmlcodeinlinelatexdvpdfinkitxmlcodeinlinelatexdvp n'a jamais été augmentée : avec la nécessité de miniaturiser nos transistors pour en faire tenir le plus possible, on a dû réduire au maximum l'épaisseur de l'isolant, au point que ça pose des problèmes.
Pour modifier kitxmlcodeinlinelatexdvp\epsilonfinkitxmlcodeinlinelatexdvp, il a fallu trouver des matériaux ayant un coefficient faible, ce qui n'a pas été une mince affaire. Le dioxyde de silicium pur a longtemps été utilisé, celui-ci ayant une permittivité de 4,2, mais il ne suffit plus de nos jours. De nombreux matériaux sont maintenant utilisés, notamment des terres rares. Sans elles, nos processeurs n'auraient pas pu être miniaturisés et voir leurs courants de fuite diminuer. Leur raréfaction laisse planer quelques jours sombres pour l'industrie des processeurs et de la microélectronique en général.
IV. Consommation statique▲
Dans ce qu'on abordé plus haut, on a vu les solutions et les causes de la consommation dynamique d'un processeur. Cette consommation dynamique correspond à la consommation énergétique du processeur due au fait que nos transistors changent d'état. Mais nous n'avons pas parlé de la consommation statique, celle qui existe même quand nos transistors restent dans le même état. Celle-ci devient de plus en plus importante depuis ces dernières années, et une grande partie (pouvant aller jusqu'à 50 %) de la consommation énergétique d'un processeur passe dans cette consommation dynamique.
Mais d'où vient-elle ?
Logiquement, la grille et le semi-conducteur d'un transistor sont censés être séparés par un isolant et donc aucun courant ne devrait la traverser. Du moins, c'est la théorie, et la réalité est tout autre : l'isolant est loin de jouer son rôle d'isolant suffisamment bien dans les processeurs actuels. Pourquoi ? À force de vouloir miniaturiser au maximum pour intégrer de nombreux transistors sur le même processeur, la couche d'isolant ne fait guère plus de quelques dizaines atomes d'épaisseur ! Inutile de vous dire que celle-ci est loin d'être étanche et que de nombreux électrons quittent la grille pour rejoindre la zone de semi-conducteur, dissipant une partie de l'énergie emmagasinée dans la grille. De plus, ces électrons perdus, il faut alors les remplacer et gaspiller de l'énergie pour remplir à nouveau la grille.
Ces fuites d'électrons à travers l'isolant s'appellent des courants de fuite. Ces pertes par courants de fuite ont lieu en permanence dès que la grille est chargée, que le transistor change d'état ou non. Une faible partie de la consommation énergétique de nos processeurs est due à ces courants de fuite, mais elle devient de moins en moins négligeable au fil du temps, au fur et à mesure que les processeurs diminuent leur consommation dynamique. De nos jours, on estime que 30 à 50 % de la consommation d'un processeur passe dans ces courants de fuite. Autant dire que les diminuer devient assez important.
On peut limiter ces courants de fuite en utilisant des matériaux avec un kitxmlcodeinlinelatexdvp\epsilonfinkitxmlcodeinlinelatexdvp faible, mais avec une distance grille — semi-conducteur si faible, il ne faut pas espérer des miracles. On peut aussi influer sur les courants de fuite en manipulant la tension d'alimentation. Plus la tension d'alimentation est faible, plus les courants de fuite seront faibles. C'est aussi simple que cela, les deux étant reliés. Nous avons donc une solution pour nos courants de fuite : diminuer la tension d'alimentation de notre circuit.
IV-A. Power gating▲
Pour limiter les courants de fuite, une autre solution existe. Son principe est simple : diminuer la tension d'alimentation diminue aussi les courants de fuite. Et quand un circuit n'est plus alimenté, ces courants de fuite s'annulent. Alors pourquoi ne pas couper la tension en entrée des circuits inutilisés pour supprimer les courants de fuite ? Eh bien, ceci existe et s'appelle le power gating ! Cette technique est très efficace, surtout pour couper l'alimentation du cache du processeur.
Elle s'implémente en utilisant des transistors, qui se chargeront de déconnecter le circuit de la tension d'alimentation quand ceux-ci sont inutilisés. Ces transistors sont appelés des Sleep Transistors, ou encore des Power Gates.
IV-B. Tensions d'alimentation multiples▲
Comme vous l'avez deviné, la fréquence d'horloge du processeur cadence l'intégralité de celui-ci. Elle permet à tous les circuits du processeur d'aller à la même vitesse. Or, certaines portions du processeur sont naturellement plus rapides que d'autres. Il faut dire que certains circuits du processeur sont très simples et donc très rapides, tandis que d'autres sont très complexes et sont plus lents. Si on veut faire aller tous ces circuits à la même vitesse, on doit se limiter au plus petit dénominateur commun, et donc s'aligner sur le circuit le plus lent. Ainsi, certains circuits du processeur sont trop rapides comparés aux autres. Or, vous vous souvenez de la relation entre fréquence et tension. Si ces circuits fonctionnent à une fréquence inférieure à ce qu'ils peuvent, alors pourquoi ne pas baisser leur tension juste ce qu'il faut pour les faire aller à la bonne vitesse ? On économise alors de la tension gratuitement.
Mais dans ce cas, baisser cette tension ne devrait toucher que ces circuits trop rapides. Pour ce faire, on doit utiliser plusieurs tensions d'alimentation pour un seul processeur. Ainsi, certaines portions du processeur seront alimentées par une tension plus faible, tandis que d'autres seront alimentées par des tensions plus élevées.
V. Conclusion▲
Et voilà, vous connaissez maintenant quelques-unes des technologies implémentées dans nos processeurs pour maîtriser leur consommation énergétique. Bien sûr, ce ne sont pas les seules, et il en existe d'autres, mais vous connaissez au moins quelques procédés généralistes présents dans tous les processeurs grand public actuels.