En surface, nous savons tous que les meilleurs processeurs sont ceux qui peuvent faire plus avec moins, en développant la plus grande vitesse possible sans faire exploser leur consommation d'énergie. Mais une fois que l'on franchit la barrière des spécifications de base, on découvre que les processeurs modernes cherchent en général à pré-calculer, anticiper et prédire tout ce qui les traverse. Le youtubeur Matt Godbolt décrit cela à travers cinq aspects très méconnus de l'utilisateur moyen, qui, malgré leur complexité technique, n'en sont pas moins fascinants.
L'une des premières choses dont on se souvient à propos des premiers processeurs Atom est qu'ils étaient lents comme des escargots. En substance, ce qu'Intel a fait, c'est privilégier la faible consommation au détriment des performances, en appliquant une nouvelle architecture basée sur d'anciens concepts. Et l'une des choses qui est restée en suspens est l'exécution hors ordre (out-of-order).
De quoi s'agit-il ? En termes simples, c'est l'un des nombreux trucs que les processeurs actuels ont à leur disposition pour accélérer l'exécution des instructions. Quiconque essaie de mieux comprendre ces astuces devra plonger dans l'étrange monde des architectures, en particulier celles développées par Intel. L'alternative est de regarder cette vidéo publiée par Matt Godbolt, qui en décrit cinq :
Cinq choses que fait un CPU
- Ils essaient de deviner comment vous accédez à vos données et de reconnaître des schémas, une forme de prefetching qui se traduit par une augmentation importante de la vitesse. Autrement dit, ils chargent des lignes de cache automatiquement avant que vous n'en ayez besoin, prenant ainsi une longueur d'avance sur le processus.
- Ils convertissent le CISC (« Complex » Instruction Set Computing) en RISC (« Reduced » Instruction Set Computing). Les opérations de la première architecture sont transformées en une série de « microcode » ou « micro-opérations » qui peuvent être programmées indépendamment, gagnant en simplicité et en efficacité.
- Ils réorganisent l'exécution du code. L'ordre dans lequel le code est écrit n'est pas l'ordre dans lequel il est exécuté par les processeurs. L'indépendance entre les blocs permet d'exécuter des instructions pendant qu'un autre groupe est en attente.
- Ils convertissent le code en SSA. Expliquer SSA de manière simple est un énorme défi, mais Godbolt le réduit à une série d'optimisations qui vérifient si le code est réellement indépendant (ce qui est essentiel pour les actions précédentes), et si ce n'est pas le cas, le réécrire pour qu'il acquière cette propriété. Dans son exemple, il utilise des registres « fictifs » comme EAX1 et EAX2.
- Ils prédisent l'avenir. C'est ici qu'intervient le fameux prédicteur de branche, qui, comme son nom l'indique, a pour tâche d'anticiper si un saut conditionnel se produira ou non, en classant les résultats comme spéculatifs. Si la prédiction échoue, ils sont rejetés. S'il a réussi, ils sont déjà chargés. Plus de vitesse.
En résumé : préchargement des données, conversion en microcode, exécution hors ordre, renommage des registres et prédiction de branche. Si tout cela vous rappelle ces vilains enfants appelés Spectre et Meltdown, c'est parce que d'une certaine manière, ils découlent de faiblesses dans ces tâches. La relation entre vitesse et sécurité nécessite un équilibre bien plus délicat que ce que l'on imagine...
https://old.neoteo.com/como-trabaja-un-cpu/