S1C3 - Le Processeur (CPU)

SIO > S1_Commun > S1C1_Materiel > S1C1_X1_CPU.md

Présentation

Processeur - wiki Le processeur est central dans une configuration et le choix de celui-ci est primordial, même s'il n'est pas le seul élément à observer. De même que le processeur n'est pas tout, sa caractéristique principale : la fréquence, n'est pas le seul critère à observer. De plus, les différentes appellations commerciales sont là pour brouiller les cartes et l'esprit de l'acheteur. Face à ces difficultés, il ne reste qu'une seule ligne de navigation à observer : l'usage final du poste. Pas besoin d'avoir une F1 pour acheter le pain le matin!

Liste des caractéristiques principales

Les principales sont :

  • La marque et le type (Intel (i3, i5, i7, FX Phenom, Athlon, Sempron, ...) / AMD (Axx, Ryzen),
  • Le numéro de génération et l'architecture des coeurs (même si certaines sont des recyclages d'anciennes versions ou un assemblage de plusieurs architectures),
  • Le nombre de cœurs physiques (attention aux doc commerciales qui confondent coeurs physiques et coeurs virtuels),
  • La fréquence (GHz) ou mieux : le nombre d'opérations par seconde (Mips, Flops),
  • Le TDP (Thermal Design Power), enveloppe thermique ou puissance consommée,
  • Le nombre de thread (aujour'hui toujours présent sauf pour les UC de l'IoT) et la virtualisation de cœurs (Obligatoire pour la virtuailisation de systèmes, VMWare, Virtualbox, ...),
  • Le volume et nombre de caches, leur architecture avec les cœurs (L1, L2, L3 ; L3=8Mo),
  • Les fonctionnalités supplémentaires embarquées dans le processeur central : une carte graphique, de la RAM pour les SOC des objets connectés (IoT).

Ces carctéristiques montrent l'âge du processeur, sa puissance de calcul, sa capacité de gestion des éléments de son environnement proche.

En cherchant plus loin, on trouve des caractéristiques secondaires qui expliquent parfois les différences de prix :

  • La largeur de bus de l'architecture (actuellement 64 et jusqu'à 128 bits) et du TLB (Translation Lookaside Buffers),
  • Le facteur de forme et le support de connexion (socket),
  • Le nombre de sortie PCI-Xpress sur le processeur,
  • Le débit vers l'I/O hub, composant principal de la carte mère,
  • Le volume maxi de RAM et la possibilité de faire du multi-channel,
  • Les jeux d'instructions (MMX, SSEx),
  • La taille et le nombre des pipelines,
  • La taille de gravure (32, 22nm), ...

1. Marque et flou commercial

Chaque "fondeur" (producteur de processeur central : AMD ou Intel) sort une palanquée de processeurs dont les noms, les codes, les dénominations sont très floues et imbriquées.
C'est volontaire pour flouter les caractéristiques et que les clients non professionnels de l'électronique informatique s'y perdent.

En gros, on peut dire : aller voir les spec sur les sites des constructeurs et des canards d'informatique.

Le plus important est de savoir que les processeurs sont souvent bridés, par du soft (on peut parfois le supprimer), logiquement (c'est difficile à contourner car souvent écrit dans le BIOS) ou physiquement (le processeur est amputé d'un ou 2 cœurs avec un rayon laser !! Imparable.).
Certains modèles sont des processeurs sans bridage mais simplement "ratés" qui souffrent partiellement de défaut de gravure.
Donc, il faut observer le détail des caractéristiques pour connaître vraiment son processeur.

2 La fréquence

Elle représente le nombre de micro instructions effectuées par le processeur en une seconde. Mais "micros instructions" n'est pas égal à "calculs" !!! (là, on parle de flop ou ips)

Il y a plusieurs raisons à ça :

  • une instruction élémentaire nécessite plusieurs micro instructions et un calcul nécessite souvent plusieurs instructions élémentaires (voir ci-dessous),
  • certains unités de calcul sont partagées entre plusieurs coeurs et l'exécution des instructions élémentaires ne suit pas forcément un ordre séquentiel.

En effet, un ordinateur n'est pas autre-chose qu'une calculatrice plus rapide et connectée à plus d'électronique :'(

== Exemple d'opération élémentaire == finctionnement du CPU Par exemple, effectuons un calcul simple (dans un processeur théorique simple) : l'addition entre deux nombres stockés en mémoire ...
Pour cela, on va :

  • chercher le premier nombre en mémoire et le placer dans le registre AX qui permet de faire le calcul,
  • ajouter le second nombre en mémoire au registre accumulateur (AX) et
  • remettre le résultat en mémoire.

Les adresses d'origine sont 294h et 2A4h, l'adresse de destination est 2B0h (c'est de l'hexadacimal) Pour cela, il faut trois instructions en assembleur (langage écrit en opérations élémentaires, appelé aussi langage machine) :

[asm]
	MOV  	AX, 192h  ; Charger AX avec la valeur mémoire à l'adresse hexa 192h (= adresse 402 en base 10)
	ADD 	AX, 2A4h  ; Ajouter la valeur mémoire à l'adresse hexa 2A4 au registre AX
	MOV  	2B0h, AX  ; Transférer le résultat du calcul dans AX vers la mémoire à l'adresse 2B0h.

L'exécution de ces trois commandes nécessitent de nombreuses micro instructions qui sont câblées dans le jeu d'instructions du processeur (SSEx).
Il faut, à partir du moment où l'adresse de l'instruction est en place dans le compteur ordinal :

  • première instruction :

    • Copier le compteur ordinal dans le pointeur d'adresse via le bus d'adresses
    • Charger l'instruction dans le pointeur de donnée (MOVE AX, 192h)
    • Copier le pointeur de donnée dans le registre d'instructions via le bus de données (192h)
    • Décoder l'instruction,
    • Mettre l'adresse de la 1ère donnée (192h) sur le pointeur d'adresse du bus d'adresses,
    • Copier la donnée de la mémoire (à l'adresse 192h) dans le pointeur de donnée,
    • Copier le pointeur de donnée vers le registre AX (base, utilisé pour les calculs),
    • L'instruction est terminée, incrémenter le pointeur ordinal

  • seconde instruction :

    • Copier le compteur ordinal dans le pointeur d'adresse
    • Charger l'instruction dans le pointeur de données (ADD AX, 2A4h)
    • Copier le pointeur de données dans le registre d'instructions
    • Décoder l'instruction,
    • Mettre l'adresse de la seconde donnée (2A4h) sur le pointeur d'adresse du bus d'adresses,
    • Copier la donnée de la mémoire (à l'adresse 2A4h) dans le pointeur de donnée,
    • Copier le pointeur de donnée vers le registre BX (base, utilisé pour les calculs),
    • Préparer le calcul en activant l'UAL
    • Effectuer le calcul qui prend AX et BX et les additionne dans l'UAL
    • Mettre le résultat de l'UAL dans AX (accumulateur)
    • L'instruction est terminée, incrémenter le pointeur ordinal

  • dernière instruction :

    • Copier le compteur ordinal dans le pointeur d'adresse
    • Charger l'instruction dans le pointeur de données
    • Copier le pointeur de données dans le registre d'instructions
    • Décoder l'instruction,
    • Mettre l'adresse 2B0h dans le pointeur d'adresse,
    • Mettre le registre AX sur le pointeur de données,
    • Copier la donnée pointeur de donnée vers la mémoire à l'adresse du pointeur d'adresse,
    • L'instruction est terminée, incrémenter le pointeur ordinal

Chaque ligne de la description précédente prend 1 ou plusieurs cycles d'horloge ! Si on a un ordinateur qui fonctionne à 10Hz (=10 micro instructions par seconde), il lui faudrait environ 3 secondes pour les 3 instructions de cette addition !!!!!!

  1. On voit bien ici l'importance de connaître le nombre d'instructions par secondes (Mips) ou le nombre de calculs en virgule flottante (Flops) plutôt que la fréquence, qui reste représentative mais imprécise sur la capacité de traitement d'un processeur,
  2. Heureusement que le jeu d'instructions des CPU est plus sophistiqué que les seules additions.
  3. En plus, le nombre de coeurs multiplie le nombre de micro instructions par secondes, mais pas par le nombre de coeurs car certaines unités de calcul sont partagées entre plusieurs coeurs.

SOUPIR !!!

En conclusion : plus la fréquence est haute, moins on sait si le processeur est bon. Il faut tenir compte du nombre de cœurs (1 cœur à 4GHz est moins bon que 2 à 1,7GHz)

3 Cœurs, hyperthreading, virtualisation, TDP et turbo

multicoeurs

Le nombre de cœurs détermine la capacité à traiter différents processus simultanément. Certaines données commerciales sont fausses et mélangent l'hyperthreading et le nombre de cœurs.

Hyperthreading, pipeline et virtualisation

Le CPU dispose de plusieurs unités de calcul intégrées qui permettent de faire des calculs spécialisés plus ou moins compliqués et gourmands en cycles d'horloge.
Architecture superscalaire
On peu citer les unités de clacul principales :

  • UAL : unité arithmétique et logique effectuant les opérations de calcul de base (+, -, / et ) et les opérations logiques (AND, OR, NOT, XOR) (Angl. ALU).
  • FPU (Floating Point Unit) : Unité de calcul avec virgule flottante, utilise des mantisses ("partie décimale d'un nombre) et exposant associé. Unité gourmande en temps définissant les FLOPs (Floating point operation per second)

En effet, l'hyperthreading consiste à traiter plusieurs processus simultanément en partageant les unités de calcul internes à un cœur entre plusieurs processus.
Cela consiste à simuler l'existence de plusieurs cœurs dans un même processeur.
Ce mécanisme est le premier nécessaire à la virtualisation du harware et donc de machines (technologie VT).

Cette technique (déjà ancienne) utilise les pipelines.
Un pipeline est une file d'attente d'opérations élémentaires. Les opérations sont executées quand une unité de calcul est disponible pour chacun.
Cependant, si on demande l'execution d'un test, celui-ci prenant souvent plus de temps que d'autres opérations, le processeur fait comme si ce test réussi, le temps d'effectuer le test et enchaine les opérations jusqu'à l'obtention du résultat du test. Si le test est OK, on a gagné du temps, sinon, on vide le pipeline et on le rempli des opérations à effectuer a l'échec du test. Globalement, on gange tout de même du temps.

A noter que les opérations des pipelines peuvent aussi être traitées dans un ordre non chronologique et partiellement "prédictif" pour accélérer encore le traitement des instructions élémentaires.
Ce partage peut être poussé au point de partager la mémoire cache des différents niveaux et de permettre de créer une virtualisation des processeurs (Intel VT).

La technologie de virtualisation (VT) est nécessaire pour utiliser des machines virtuelles. Pour en profiter, il faut aller dans le SETUP BIOS/UEFI et activer la fonction. Voir OS.

TDP : Thermal Design Pwer

Il est calculé en fonction de la puissance dissipée, alors que les offres commerciales affichent plus la puissance consommée de l'alimentation (200, 500 800W) qui intègre tous les éléments de l'ordinateur.
Pour réduire la consommation énergétique, il existe un dispositif qui consiste à éteindre électriquement, plus ou moins profondément, des unités de calcul lorsqu'elles ne sont pas utilisées.
Ce dispositif peut être bloqué et les unités toujours (inutilement?) allumées : le mode turbo.
Ce mode turbo est normalement automatique.

Mode turbo Intel ; pc-gamer.tech

Dans certains cas, il est même intéressant d'éteindre des cœurs entiers et certains modes turbo permettent l'utilisation de quelques unités de calcul d'un cœur par un autre, s'il est éteint.
Ceci, toujours dans le but de limiter la puissance dissipée/consommée.

4. Largeur de bus et architecture, caches et TLD

La largeur de bus définit l'architecture matérielle de la carte mère et du processseur. Elle indique combien de bits sont échangées avec les composants environnant simultanément.
Tous les processeurs modernes ont une architecture 64b (8octets). Il faut, d'ailleurs, des émulateurs et la virtualisation, pour faire tourner les anciens programmes 16 ou 32b.

Mais si les architectures ont 64, voire 128 ou 256b, cela ne signifie pas que le processeur est meilleur.

Il peut y avoir une différence de largeur de bus entre les bus internes (adresse, données, commande, …) et registres, et les bus d'E/S externes qui peuvent être plus petits.

Donc, si c'est une donnée convenue, elle peut cacher informations qui rendent des processeurs moins performants (i3, ATOM prévu : 64b en interne et 32bits en externe) Cette différence s'estompe, jusqu'à ce qu'on passe à une architecture 128b grand public.

Pour pallier à ceci, les constructeurs ajoutent souvent des niveaux de mémoires cache plus ou moins partagées entre les cœurs. La taille de ceux-ci est un critère de choix.

On trouve aussi des TLD, tampons d'adresse liés au cœurs qui permettent de faire la conversion des adresses entre les adresses 32b et 64b. La capacité de ceux-ci est une donnée difficile à trouver mais importante. On la confond souvent avec les caches (L1 ou L2)

Pour visualiser la notion de mémoire cache : Niveaux de cache comparés à une carte des données, image

Mémoire cache ou ou mémoire tampon ?

  • Un cache est une copie des données pour accélérer leur accès en lecture ou écriture.
  • Un buffer (tampon) est une file d'attente d'instructions ou de données à traiter par un processus.

Références et liens intéressants

Je ne vais pas réécrire tout ce qu'on trouve déjà bien fait sur le net et est suffisant pour acquérir de la culture ...
Donc, allez donc voir ces divers liens :