À un an d’intervalle, les Communications of the ACM (CACM) ont publié deux articles qui, à eux deux, offrent une synthèse très complète des progrès passés et attendus de l’industrie des microprocesseurs et des procédés qui les ont permis : en mai 2011 (vol. 54 n°5), The Future of Microprocessors, par Shekhar Borkar d’Intel et Andrew A. Chien de l’Université de Californie à San Diego, dressait un panorama des voies d’amélioration des performances des microprocesseurs, celles qui ont été empruntées par le passé et celles qui seront praticables à l’avenir, puisque ce ne seront pas forcément les mêmes ; en avril 2012 (vol. 55 n° 4), CPU DB : Recording Microprocessor History, par Andrew Danowitz, Kyle Kelley, James Mao, John P. Stevenson et Mark Horowitz, tous du VLSI Research Group de l’Université Stanford, décrit la constitution d’une base de données publique et ouverte qui recueille les données architecturales les plus détaillées possibles sur 790 microprocesseurs construits au cours des 40 dernières années par 17 industriels [1], et expose les premiers résultats obtenus par l’analyse de ces données. Ces approches éclairent d’un jour nouveau la loi de Moore, qui est une loi empirique, en cela qu’ils en recherchent les variables explicatives et qu’ils proposent des modèles dont ils déduisent la part de l’évolution globale qui est expliquée par chacune de ces variables.
Les améliorations de performance « classiques »
Shekhar Borkar et Andrew A. Chien identifient trois domaines principaux qui ont permis à ce jour l’amélioration des microprocesseurs :
- L’accélération de la commutation des transistors par la réduction de leur taille : tous les deux ans depuis 40 ans, la taille des transistors a diminué de 30%, ce qui a réduit leur surface de 50%, en d’autres termes doublé la densité du circuit. Cette réduction de la taille du circuit accroît les performances de 40%. Afin de maintenir un champ électrique constant, la tension est réduite de 30%, ce qui diminue l’énergie consommée de 65%, et la puissance de 50%. Chaque génération (deux ans) produit donc des processeurs 40% plus rapides, pour un budget énergétique équivalent.
- Le perfectionnement de la micro-architecture par des techniques telles que :
-
- le pipeline, qui consiste à décomposer les instructions en opérations plus élémentaires, ce qui permet de commencer à exécuter une instruction avant que les précédentes ne soient terminées [2] ;
-
- l’architecture super-scalaire, qui consiste à multiplier les unités d’exécutions pour les opérations les plus fréquentes, ce qui permet un certain parallélisme ;
-
- l’exécution spéculative et l’exécution « dans le désordre » (out of order), qui consistent à exécuter des instructions « à l’avance », alors que l’on n’est pas sûr qu’elles vont être utiles, mais qui procurent des gains de temps d’exécution significatifs si la prédiction est judicieuse.
- L’organisation de la mémoire-cache : le mot cache, curieux retour au français d’un emprunt anglais, suggère ici l’idée de cacher dans un coin (techniquement parlant, dans une zone de mémoire petite mais à accès très rapide) pour l’avoir sous la main une chose que l’on ne veut pas avoir à aller chercher à la cave ou au grenier (i.e., dans la mémoire centrale, vaste mais à accès lent par rapport à la vitesse du processeur), pour gagner du temps. Cette technique s’est développée parce que, si la capacité de la mémoire centrale a évolué parallèlement à la puissance des processeurs, sa vitesse a progressé moins vite. Si au début des années 1990 le temps d’accès à une position de mémoire se mesurait en dizaines de cycles de processeurs, vingt ans plus tard c’est en centaines de cycles : il a fallu trouver des procédés pour éviter que cette discordance croissante ne réduise à néant les bénéfices obtenus pas l’accélération des processeurs.
La technique du cache procure des augmentations de performances très spectaculaires, bien qu’aucun modèle général satisfaisant de son fonctionnement n’ait pu être proposé à ce jour. Une variante en est le TLB (Translation Lookaside Buffer), qui conserve « sous la main » les résultats les plus récents de traductions d’adresses virtuelles en adresses réelles, ce qui permet avec un très faible volume de données d’obtenir des accélérations spectaculaires [3].
Gisements d’amélioration en voie d’épuisement
Les voies classiques d’améliorations que nous venons de survoler continueront à être exploitées, mais depuis quelques années elles sont de moins en moins fructueuses, ne serait que parce qu’elles ont atteint certaines limites. Ainsi, la réduction de la taille des transistors approche de limites physiques : la géométrie des processeurs annoncés récemment (2012) repose sur des motifs de 22 nanomètres, c’est-à-dire que l’épaisseur du diélectrique des transistors est de quelques dizaines d’atomes. On ne pourra pas descendre beaucoup plus bas. De toute façon, après plus de trente ans de progrès exponentiels, la courbe des gains de performances en fonction de la taille des transistors a commencé à s’infléchir depuis cinq ou six ans. Par exemple, la tension d’alimentation diminue avec la taille des circuits, mais la diminution de la tension de seuil de commutation du transistor augmente le taux de fuite (le courant qui « passe » quand le transistor est dans l’état « non passant »), ce qui oblige à maintenir un seuil de tension de commutation moins bas, et ainsi à limiter le gain de performance espéré.
Mais le principal obtsacle auxquels les concepteurs de circuits se heurtent aujourd’hui est la consommation électrique : alors que pendant les trente premières années du microprocesseur on ne s’en souciait guère, c’est devenu une préoccupation essentielle, et pas uniquement pour des raisons écologiques. Que l’on songe au fait qu’une compagnie comme Google soit amenée à investir des centaines de millions de dollars dans l’énergie photovoltaïque et à installer ses fermes de serveurs au pied des centrales pour réduire la facture énergétique. Avec l’augmentation de la densité des composants et la réduction de la taille des machines, la dissipation calorique devient un problème crucial pour les datacenters, nouveaux noms des centres de calcul.
C’est en partie, mais pas seulement, pour des raisons de consommation électrique que le nombre d’étages des pipelines a commencé à diminuer. Le processeur Intel Pentium 4, par exemple, introduit en 2000, avait une géométrie de 65 nm et un pipeline de 31 étages, ce qui lui permettait d’afficher une fréquence d’horloge de 3,8 GHz. Cette fréquence élevée était en partie un élément de marketing, destiné à impressionner le public, parce que le gain marginal procuré par le dernier étage du pipeline est faible. Aujourd’hui les fréquences n’augmentent plus guère et on est revenu à des pipelines plus raisonnables, 16 étages pour l’architecture Nehalem à la base des processeurs Core i7 sortis en 2008.
Nouvelles orientations du progrès
Les processeurs les plus récents ont plus de deux milliards de transistors sur deux ou trois centimètres carrés : c’est plus qu’il n’en faut pour implanter toute la logique nécessaire, alors on fait des processeurs multi-cœurs, c’est-à-dire en fait des multi-processeurs (chaque cœur est un processeur simple), avec huit cœurs ou plus sur un même chip. Même ainsi, il reste plein de transistors disponibles : on les utilise pour installer de la mémoire, dont le temps d’accès sera ainsi excellent. On peut aussi embarquer à bord des fonctions qui étaient auparavant affectées à des composants séparés : décodage vidéo, cryptographie, réseau...
Mais la recherche s’oriente vers une utilisation plus subtile de cet énorme stock de transistors disponibles. Puisque qu’ils sont en abondance, et qu’en outre les utiliser tous ensemble à leur fréquence maximum entraînerait une consommation électrique et une dissipation thermique intolérables (l’extrapolation des tendances actuelles donnerait 500 W par centimètre carré en 2018), l’idée est, plutôt que de multiplier les cœurs généralistes identiques les uns aux autres, d’en mettre moins, qui seront associés à de la mémoire, moins consommatrice d’énergie, et aussi d’implanter des cœurs spécialisés pour certains traitements, qui ne serviront peut-être pas souvent, mais qui donneront de bons résultats quand on en aura besoin.
D’autres possibilités sont explorées : mieux organiser les accès à la mémoire de façon à placer les données le plus près possible des circuits qui doivent y accéder, hiérarchiser les lignes de communication (bus) entre les groupes de cœurs et optimiser le placement des tâches sur les cœurs en fonction des accès aux données, voire utiliser une partie du budget de transistors pour des circuits logiques programmables (Field-programmable Gate Array, FPGA), c’est à dire du matériel modifiable à la volée par l’utilisateur, ce qui existe déjà, mais avec des performances inférieures à celles des microprocesseurs actuels.
Décomposition en facteurs de la loi de Moore
La base de données publique et ouverte du VLSI Research Group de l’Université Stanford présente l’intérêt intrinsèque de regrouper toutes sortes de données techniques sur un grand nombre de microprocesseurs (on notera que Wikipédia en anglais est aussi une source très riche, et complémentaire, sur le même sujet) ; en outre, les auteurs de l’article ont profité de cet ensemble de données riches et normalisées pour se livrer à des analyses statistiques destinées à éclairer l’évolution des processeurs depuis quarante ans. Il est à noter que les lecteurs sont invités à contribuer à l’enrichissement de la base de données, qu’ils peuvent la télécharger intégralement pour leur usage personnel, et que les auteurs donnent le texte des procédures R qu’ils ont utilisées pour leurs analyses, ce qui facilitera grandement le travail de celui qui voudrait produire ses propres analyses.
La plupart des processeurs modernes peuvent adapter leur fréquence d’horloge et leur tension d’alimentation à la tâche qu’ils effectuent à un instant donné, ce qui complique l’étude de l’évolution de ces variables au fil des améliorations de la technologie.
Afin de pouvoir comparer raisonnablement les performances de processeurs de conception et de réalisation technique très différentes, à cause principalement des progrès des procédés de fabrication, nos auteurs ont dû mettre au point une méthodologie de normalisation de la technologie. Pour ce faire ils ont cherché à estimer le facteur d’échelle procuré par la technologie à la performance.
Il leur fallait définir une métrique pour la performance : ils se sont appuyés surtout sur les résultats de la suite de benchmark SPEC 2006, et pour les processeurs trop anciens, sur les versions antérieures de SPEC (1989, 1992, 1995 et 2000). Pour établir des abaques de passage d’une métrique à une autre ils se sont appuyés sur l’existence de processeurs pour lesquels étaient disponibles des résultats dans deux échelles successives.
Pour estimer la performance que procurerait un processeur ancien s’il était réalisé selon une technologie plus moderne, le facteur fréquence d’horloge est certes déterminant, mais il doit être pondéré par le temps d’accès à la mémoire, qui a progressé beaucoup moins rapidement. Pour calculer une puissance putative, les auteurs supposent que les constructeurs augmentent la taille de la mémoire cache "on-chip" afin de maintenir constant le taux de défauts de cache, c’est-à-dire la proportion des tentatives d’accès aux données qui ne sont pas satisfaites par le cache, et qui nécessitent un accès réel à la mémoire centrale, avec la mise en attente qui en résulte pour le processus concerné. Ils en déduisent la loi empirique selon laquelle la taille du cache doit croître comme le carré de la fréquence d’horloge.
Pour imputer une fréquence d’horloge putative à un processeur ancien s’il était réalisé selon une technologie plus moderne, il faut aussi connaître l’évolution des délais induits par les portes logiques et par les fils de liaison. Ces données sont heureusement sensiblement les mêmes pour tous les types de portes, et fréquemment disponibles, ce qui a permis aux auteurs d’établir une formule d’extrapolation.
Le rythme d’introduction de nouveaux procédés de fabrication, permettant une nouvelle géométrie des circuits, est de deux à trois ans, avec une certaine accélération dans la dernière décennie. Chaque génération divise la taille des transistors par √2.
Au cours des 25 ans écoulés depuis l’Intel 80386, la taille des transistors a été réduite selon un facteur 4 000 ; or le nombre de transistors par processeur a été multiplié par 16 000 : l’explication est l’augmentation de la surface des processeurs, 103 mm² pour le 80386, 296 mm² pour l’Intel Core i7 par exemple.
Si le seul facteur d’augmentation de la fréquence était la taille des transistors, les processeurs actuels tourneraient à 500 MHz, au lieu de 3 GHz et plus : un autre facteur est l’augmentation du nombre d’étages des pipelines, c’est-à-dire que chaque opération est décomposée en un plus grand nombre de micro-opérations. Le 80386 avait un pipeline à deux étages (une étape "Fetch", une étape "Execute"), 31 étages pour le Pentium IV, et un retour vers des valeurs plus raisonnables avec 16 étages pour le Core i7.
Si la puissance électrique avait crû comme la fréquence, le facteur aurait été plus important. Entre le 80386 (1986) et le Pentium 4 (2000), la taille des transistors a été divisée par 16, la tension d’alimentation divisée par 4, la fréquence d’horloge multipliée par 200. On aurait pu s’attendre à une multiplication de la puissance électrique nécessaire par 16 × 200 ⁄ 4² = 200. Or le facteur observé est seulement 32. Cette économie est essentiellement procurée par des optimisations de l’architecture, notamment dans la propagation des signaux d’horloge.
Conclusion : amélioration continue dans tous les compartiments
Depuis 2005, l’évolution est commandée par la recherche d’économie d’énergie, notamment par l’implantation sur un même chip de plusieurs cœurs, c’est-à-dire des processeurs élémentaires, ce qui autorise du traitement parallèle sur un seul chip. Mais néanmoins la performance unitaire des cœurs continue à augmenter, même indépendamment des apports de l’accroissement de la fréquence et de la taille du cache : ces gains proviennent de perfectionnements architecturaux tels que l’implantation sur le chip des contrôleurs d’accès à la mémoire et la multiplication des unités d’exécution (architecture super-scalaire). Il est toutefois difficile d’isoler ces progrès dûs au matériel de ceux dûs aux progrès des compilateurs, dont dépendent les résultats des benchmarks SPEC.
La base de données CPU DB permet désormais de quantifier les progrès incroyables réalisés en quarante ans par l’industrie des microprocesseurs, et offre les moyens d’en analyser les évolutions et les tendances par des méthodes scientifiques.