# Dissipation de puissance du processeur

La dissipation de puissance ou dissipation énergétique est le processus dans lequel un processeur (ou CPU) consomme de l'énergie électrique, et la dissipe sous forme de chaleur à la fois par l'action de la commutation des circuits contenus dans le CPU (tels que les transistors ou historiquement les tubes à vide) et par la consommation due à l'impédance des circuits électroniques.

## Gestion de l'alimentation

La conception de processeurs qui exécutent des tâches de manière efficace, sans surchauffe est une problématique importante de presque tous les fabricants de processeurs à ce jour. Certaines implémentations de CPU utilisent très peu d'énergie ; par exemple, les processeurs dans les téléphones mobiles utilisent souvent juste quelques watts d'électricité, alors que certains microcontrôleurs utilisés dans les systèmes embarqués peuvent consommer seulement quelques milliwatts ou même quelques microwatts. En comparaison, les processeurs à usage général pour ordinateurs personnels, tels que les ordinateurs de bureau et ordinateurs portables, dissipent beaucoup plus de puissance en raison de leur plus grande complexité et vitesse. Ces composants peuvent consommer de la puissance de l'ordre de quelques watts à plusieurs centaines de watts. Historiquement, les premiers CPU mis en œuvre avec des tubes à vide consommaient plusieurs kilowatts d'énergie.
Les processeurs pour ordinateurs de bureau utilisent généralement une partie importante de l'énergie consommée par l'ordinateur. Les autres gros consommateurs sont les cartes graphiques, qui contiennent des unités de traitement graphique, les cartes mères et les blocs d'alimentation. Dans les ordinateurs portables, le rétroéclairage de l'écran LCD utilise également une partie importante de la puissance totale. Même si des fonctions d'économie d'énergie ont été mises en place dans les ordinateurs personnels lorsqu'ils sont en veille, la consommation globale des CPU haute performance d'aujourd'hui est considérable. Ceci est en fort contraste avec la très faible consommation d'énergie des processeurs conçus pour des appareils de faible puissance. Par exemple, l'Intel XScale, peut fonctionner à 600 MHz en consommant moins de 1 W de puissance, alors que les processeurs pour PC Intel x86 dans la même catégorie de performance utilisent plusieurs fois plus d'énergie.
Il y a des causes techniques à cette différence :
* Pour un composant donné, opérer à des fréquences plus élevé demande plus de puissance. Réduire la fréquence et/ou la tension réduit en général la consommation énergétique.
* De nouvelles fonctionnalités nécessitent plus de transistors, chacun utilisant de l'énergie. Éteindre des zones inutilisées économise de l'énergie, par exemple en appliquant un clock gating.
* Quand un modèle de processeur est perfectionné, de plus petits transistors, des structures à plus faible tension et l'amélioration de la conception peuvent réduire la consommation.
Les constructeurs de CPU publient en général deux valeurs concernant la consommation du CPU :
* La puissance thermique typique, qui est mesurée sous une charge de travail normale (par exemple, la puissance moyenne du CPU d'AMD).
* La puissance thermique maximale, qui est mesurée sous la charge de travail la plus importante possible.

## Sources de consommation

Plusieurs facteurs contribuent à la consommation d’énergie du processeur ; il s’agit notamment de la consommation d’énergie dynamique, de la consommation d’énergie par court-circuit et de la consommation d'énergie due aux courants de fuite des transistors :
    $P_{cpu}=P_{dyn}+P_{sc}+P_{leak}$
La consommation d’énergie dynamique provient du fonctionnement des portes logiques à l’intérieur d’un processeur. Lorsque les portes logiques basculent, l’énergie circule lorsque les condensateurs qu’elles contiennent sont chargés et déchargés. La puissance dynamique consommée par un processeur est approximativement proportionnelle à la fréquence du processeur et au carré de la tension du processeur :
    $P_{dyn}=f.C.V^{2}$
où C est la capacité de charge commutée, f est la fréquence, V est la tension.
Lorsque les portes logiques basculent, certains transistors à l’intérieur changent d’état. Comme cela prend un temps fini, il peut arriver que pendant un très court laps de temps, certains transistors conduisent simultanément. Un chemin direct entre la source et la terre entraîne alors une perte de puissance par court-circuit ($P_{sc}$). L’amplitude de cette puissance dépend du type de porte logique, et est assez complexe à modéliser à un niveau macro.
La consommation d’énergie due aux courants de fuite ($P_{leak}$) émane à un niveau microscopique dans les transistors. De petites quantités de courant circulent toujours entre les différentes parties dopées du transistor. L’amplitude de ces courants dépend de l’état du transistor, de ses dimensions, de ses propriétés physiques et parfois de sa température. La quantité totale de courants de fuite a tendance à augmenter en fonction de l’augmentation de la température et de la diminution de la taille des transistors.
La consommation d’énergie dynamique et par court-circuit dépend de la fréquence d’horloge, tandis que le courant de fuite dépend de la tension d’alimentation du processeur. Il a été démontré que la consommation d’énergie d’un programme présente un comportement énergétique convexe, ce qui signifie qu’il existe une fréquence CPU optimale à laquelle la consommation d’énergie est minimale pour le travail effectué.

## Réduction de la consommation

La consommation d’énergie peut être réduite de plusieurs façons, notamment les suivantes :
* Réduction de la tension – processeurs bi-tension, ajustement dynamique de la tension, sous-tension, etc.
* Réduction de la fréquence – underclocking, ajustement dynamique de la fréquence, etc.
* Réduction de la capacité – de plus en plus de circuits intégrés remplacent les pistes sur le PCB entre deux puces par une interconnexion métallique sur puce de capacité relativement plus faible entre deux sections d’une même puce ; diélectrique à faible κ (en), etc.
* Utilisation de techniques de contrôle de l'alimentation (en) telles que le déclenchement de l'horloge et le contrôle localement synchrone globalement asynchrone (en), qui peuvent être considérées comme une réduction de la capacité commutée à chaque tic-tac d’horloge, ou bien comme une réduction locale de la fréquence d’horloge dans certaines sections de la puce.
* Utilisation de diverses techniques pour réduire l’activité de commutation, c'est-à-dire le nombre de transitions que le processeur effectue sur les bus de données hors puce, telles que le bus d'adresses non multiplexé, ou l’encodage de bus (en) par des techniques telles que l'adressage à code de Gray ou l'encodage du cache de valeurs (en). Parfois, un « facteur d’activité » (A) est ajouté à l’équation ci-dessus pour refléter l’activité de commutation.
* Diminution de la densité de transistors pour atteindre des fréquences plus élevées.
* Superposition de zones de conduction thermique au sein du processeur (« Christmassing the Gate »).
* Recyclage d'au moins une partie de l’énergie stockée dans les condensateurs (plutôt que de la dissiper sous forme de chaleur dans les transistors) – circuit adiabatique (en), logique de récupération d’énergie, etc.
* Optimisation du code machine : en implémentant des optimisations du compilateur qui planifient des clusters d’instructions à l’aide de composants communs, la puissance du processeur utilisée pour exécuter une application peut être considérablement réduite.

## Fréquence d'horloge et conception de puces multi-cœurs

Historiquement, les fabricants de processeurs ont systématiquement augmenté les fréquences d’horloge et le parallélisme au niveau des instructions, de sorte que le code monothread s’exécutait plus rapidement sur les processeurs les plus récents sans modification. Plus récemment, afin de gérer la dissipation de la puissance du processeur, les fabricants de processeurs privilégient les conceptions de puces multicœurs, de sorte que les logiciels doivent être écrits de manière multi-thread ou multi-processus pour tirer pleinement parti de ce matériel. De nombreux paradigmes de développement multithread introduisent une surcharge et ne verront pas d’augmentation linéaire de la vitesse par rapport au nombre de processeurs. Cela est particulièrement vrai lors de l’accès à des ressources partagées ou dépendantes, en raison de la contention de verrou. Cet effet devient plus perceptible à mesure que le nombre de processeurs augmente.