Processeurs

publicité
Université de Nice – Sophia Antipolis
Licence 1 Sciences Fondamentales
Informatique Générale
Processeurs
Jacques Farré
(d'après Fabrice Huet, Wikipedia ... et bien d'autres)
[email protected]
http://deptinfo.unice.fr/~jf/InfoGene
© Jacques Farré 2013
Informatique générale - processeurs
1/46
Introduction

Un processeur exécute un programme


Composé d’instructions plus ou moins complexes
Certaines instructions peuvent nécessiter des
données




Localisées en mémoire
Chargées explicitement
Les instructions sont elles-mêmes
en mémoire
Pour travailler, le processus dispose
de registres



Zones de stockage temporaires dans le CPU
Extrêmement rapides mais en nombre limité
Certains ont un rôle particulier
(calculs en flottant, calcul d'adresses ...)
© Jacques Farré 2013
Informatique générale - processeurs
2/46
Exécution d'une
instruction
© Jacques Farré 2013
Informatique générale - processeurs
3/46
Cycle d’instruction

Traiter une instruction implique les
opérations suivantes





Lire l’instruction en mémoire :
fetch
Comprendre ce que fait
l’instruction (addition ?
multiplication ? …) : decode
Aller chercher les opérandes
si nécessaire (en mémoire
ou en registre) : read
Exécuter l’instruction : execute
Éventuellement écrire les résultats dans un registre
ou en mémoire : write back
© Jacques Farré 2013
Informatique générale - processeurs
4/46
Cycle d'exécution d'une
instruction (revoir TD n° 1)
À chaque signal de l'horloge :
fetch :





l'adresse i de
l'instruction
(par exemple 183)
est transférée de
CI vers RA
on augmente de
1 la valeur de CI
le contenu du mot
d'adresse mémoire
i va (via le bus de
données) dans RI
183
184
NB. on a en général
plusieurs registres,
pas uniquement
un seul accumulateur
decode : l'instruction est décodée (par exemple ici add 327,
c'est à dire ajouter le mot à l'adresse 327 à l'accumulateur)
© Jacques Farré 2013
Informatique générale - processeurs
5/46
Cycle d'exécution d'une
instruction (revoir TD n° 1)

Execute :




l'adresse de
56+14
la donnée
(ici 327)
est transférée
327
dans RA
le contenu
du mot
d'adresse 327
(ici 56)
est transféré
dans l'UAL, ainsi
que le contenu de l'accumulateur (ici 14) : read
les 2 valeurs sont additionnée : execute proprement dit
et le résultat est mis dans l'accumulateur : write back
© Jacques Farré 2013
Informatique générale - processeurs
6/46
Cycle d'exécution d'une
instruction et mémoire

Fetch 


c’est un accès mémoire, donc passe par un
cache ; l'instruction est le plus souvent dans le
cache L1
Les processeurs modernes ont un cache séparé
pour les instructions et pour les données
Decode/Execute/Write Back


L’instruction est une suite de bits (32, 64 … bits)
Le processeur doit décoder cette suite pour



savoir si des opérandes sont nécessaires
trouver les opérandes (en mémoire ou en registre)
configurer les circuits nécessaires pour l’exécution
© Jacques Farré 2013
Informatique générale - processeurs
7/46
Cycle d'exécution d'une
instruction et mémoire

Une instruction est en général divisée en
micro-instructions propres à chaque type
de processeur




L’exécution des micro-instructions est
effectuée par différentes parties du CPU
Arithmetic Logical Unit (ALU) pour les entiers
et le calcul d’adresses mémoires
Floating Point Unit (FPU) pour les flottants
Finalement le résultat est écrit dans un
registre, parfois en mémoire
© Jacques Farré 2013
Informatique générale - processeurs
8/46
Différences entre
architectures RISC et CISC
CISC (complex instr. set) ● opérations entre registres et
mémoire
● modes de calcul d'adresse
sophistiqués
RISC (reduced instr. set)
● opérations entre registres
uniquement
● modes de calcul d'adresse
élementaires
RISC/CISC
CISC
Risc : des
instructions
plus simples
© Jacques Farré 2013
Informatique générale - processeurs
9/46
Différents formats
d'instruction

Architecture RISC : format fixe, assez
facilement décodable, par exemple




128 codes instruction (27)
32 registres (25)
Résultat et 1er opérande obligatoirement en registre
2e opérande en registre ou valeur littérale entière sur 13
bits
© Jacques Farré 2013
Informatique générale - processeurs
10/46
Différents formats
d'instruction

Architecture CISC : format variable, plus
compliqué à décoder
© Jacques Farré 2013
Informatique générale - processeurs
11/46
Exécution en
pipeline
© Jacques Farré 2013
Informatique générale - processeurs
12/46
Pipeline

Chaque instruction passe par différentes
étapes


ces étapes n'utilisent pas les mêmes circuits
donc pas besoin d’attendre qu’une instruction
finisse pour en traiter une autre


comme pour une chaîne de montage (automobiles ...)
Pipeline


un pipeline est un ensemble d’éléments en
série chargés d'une partie de l'exécution d'une
instruction
le nombre d’éléments P est appelé profondeur
du pipeline
© Jacques Farré 2013
Informatique générale - processeurs
13/46
Pipeline

Pipeline basique à 5 étages dans une machine RISC






IF = Instruction Fetch,
ID = Instruction Decode,
EX = Execute,
MEM = Memory access,
WB = Register write back
on exécute donc N instructions en N + P - 1 cycles
(au lieu de N×P si pas de pipeline)
© Jacques Farré 2013
Informatique générale - processeurs
14/46
Limitations du pipeline

Une étape du pipeline s’exécute en général
en 1 cycle CPU


Le pipeline ne réduit pas le temps nécessaire
pour une instruction
Mais il augmente le nombre d’instructions par
cycle (à un moment donné, autant d'instructions
en cours d'exécution que la profondeur du
pipeline)



Donc amélioration des performances du processeur
Ok, donc il suffirait d’avoir un très long pipeline
pour avoir de meilleurs performances ?
Oui mais non
© Jacques Farré 2013
Informatique générale - processeurs
15/46
Limitations du pipeline

Il faut pouvoir découper une instruction
en étapes


Complexité du processeur
Le pipeline a un coût




Le passage d’une étape à une autre n’est
pas instantané
Une instruction « pipelinée » prendra un
temps plus long qu’une instruction classique
Linéaire en fonction du nombre d’étapes
Il augmente les accès mémoires
© Jacques Farré 2013
Informatique générale - processeurs
16/46
Structural Hazard


Deux étapes différentes du pipeline
peuvent nécessiter les même circuits du
processeur
Par exemple




Une instruction fait des calculs sur un entier
Elle sera découpée en micro-instructions,
dont une fera appel à l’ALU
Une autre instruction entre dans le pipeline :
quand elle accèdera à la mémoire elle aura
aussi besoin de l’ALU
C’est ce qu’on appelle un structural hazard
© Jacques Farré 2013
Informatique générale - processeurs
17/46
Structural Hazard


On a un Structural Hazard quand des
instructions dans le pipeline nécessitent au
même moment les même ressources
Dans cette situation, il faut bloquer le
pipeline

Stall (instruction bloquée dans sa progression)

C’est l’instruction la plus avancée qui a priorité


Toutes les instructions arrivées après elle dans
le pipeline sont bloquées
Celles arrivées avant peuvent continuer
© Jacques Farré 2013
Informatique générale - processeurs
18/46
Éviter les structural hazard

Comment empêcher les structural hazard



Il faut que toutes les ressources soient
suffisamment nombreuses pour les éviter
Autrement dit : quelle que soit la
combinaison d’instructions dans le pipeline, il
doit y a toujours suffisamment de ressources

Avoir plusieurs ALU

Avoir plusieurs bus d’accès mémoire

….
Très coûteux et complexe (mais en partie fait
dans les processeurs les plus modernes)
© Jacques Farré 2013
Informatique générale - processeurs
19/46
Data Hazard

Le pipeline change le timing d’exécution des
instructions



Deux instructions séquentielles peuvent avoir leur
exécution qui se recouvre partiellement
Exemple :
ADD R1, R2, R3 // R1 ← R2+R3
SUB R4, R1, R5 // R4 ← R1­R5
Dans une exécution avec pipeline, l’instruction 2 lira
la valeur de R1 avant qu’elle ne soit écrite !
IF


ID
MEM
EX
WB
IF
ID
MEM
EX
écriture dans R1
WB
lecture de R1
Calcul sur l’ancienne valeur de R1 ⇒ résultat faux !
Il faut donc bloquer le pipeline dans ce cas (stall)
© Jacques Farré 2013
Informatique générale - processeurs
20/46
Control Hazard

Le pire de tous les problèmes

Exemple : la boucle while
while (a < b) a := a + 1; 
En assembleur (fictif)
_w:
cmp a,b // compare a et b jge _e
// saut si a ≥ b
inc a // a := a+1
jmp _w // saut inconditionnel
_e:
© Jacques Farré 2013
Informatique générale - processeurs
21/46
Control Hazard

L’instruction jge entre dans le pipeline


On ne sait pas encore le résultat de la comparaison, donc
on ne sait pas s'il faut sauter (suivre une branche) à _e
ou s'il faut continuer dans la branche en séquence
Que fait-on en attendant ?
On peut bloquer le pipeline jusqu’à savoir : pas du tout efficace


L’instruction


jge doit fournir 2 informations
Savoir si oui ou non on doit sauter : quelle est l’adresse du
saut ?
Pour limiter l’attente dans le pipeline, il faut ces 2
informations le plus vite possible
 On doit donc modifier le pipeline pour les avoir le plus tôt
possible
 Limitera le nombre de cycles de blocage
 Mais pas suffisant, un programme a énormément de sauts
© Jacques Farré 2013
Informatique générale - processeurs
22/46
Prédiction de branchement

Au lieu d’attendre, pourquoi ne pas commencer
à exécuter l’instruction suivante ?


Si le saut n’a pas lieu, on n'a rien perdu !


On fait l’hypothèse que le saut n’aura pas lieu
Le pipeline n’a pas été bloqué, rien (registres,
mémoire) n'a encore été modifié par
l'instruction : performance optimale
Si le branchement a lieu



Tout ce qui est entré dans le pipeline après
l’instruction n’aurait pas dû y entrer
Il faut vider le pipeline : flush
Plus le pipeline est long plus c’est coûteux
© Jacques Farré 2013
Informatique générale - processeurs
23/46
Prédiction de branchement

On peut mieux faire que toujours
décider de ne pas suivre une branche




Partie du CPU dédiée à cette tâche (Branch
Processing Unit - BPU)
Permet d’obtenir un taux de succès élevé
Souvent basé sur l’historique d’exécution
 Si une branche n’a pas été prise
récemment, très probablement elle ne le
sera pas dans un futur proche
Taux de succès très élevé
 Par exemple 91% sur les Pentium 3 (1999)
© Jacques Farré 2013
Informatique générale - processeurs
24/46
Réordonnancement
d’instructions


Pourquoi ne pas traiter les problèmes en
amont, avant d’entrer dans le pipeline ?
Exemple : ADD R1, R2, R3 SUB R4, R1, R5 ADD R6, R7, R8
ADD R2, R3, R5


// R1 ← R2 + R3
// R4 ← R1 – R5
// R6 ← R7 + R8
// R2 ← R7 + R8
Dans cet ordre, il y a dépendance des données
(R1), donc blocage du pipeline
Mais si on fait les 3 ADD en premier, alors plus
de problème ADD R1, R2, R3 // R1 ← R2 + R3
ADD R6, R7, R8
// R6 ← R7 + R8
ADD R2, R3, R5
// R2 ← R3 + R5
SUB R4, R1, R5 // R4 ← R1 – R5
© Jacques Farré 2013
Informatique générale - processeurs
25/46
Réordonnancement
d’instructions

Le réordonnancement est décidé par le
processeur





Mécanisme appelé Scheduler
Nécessite de calculer les dépendances entre les
instructions
Travaille sur un sous ensemble d’instructions
appelé fenêtre
Plus la fenêtre est grande, plus il est possible de
faire des réordonnancement complexes
Mais il peut aussi être fait par le compilateur


peut travailler sur la totalité du code, et pas
seulement une fenêtre
peut employer des algorithmes plus sophistiqués
© Jacques Farré 2013
Informatique générale - processeurs
26/46
Processeurs
superscalaires,
multicœurs,
graphiques...
© Jacques Farré 2013
Informatique générale - processeurs
27/46
Architecture Superscalaire


Permet d’exécuter plusieurs instructions en
même temps (parallélisme)
Instructions indépendantes utilisant des
éléments différent s : flottant vs entier vs
graphique vs accès mémoire ...



ce qui n'est pas incompatible avec le pipeline
Ou multiplier certains éléments (plusieurs ALU)
Limitations
 degré limité de parallélisme des instructions
 complexité et coût en temps de l'aiguillage
des instructions
 les problèmes de branchement
© Jacques Farré 2013
Informatique générale - processeurs
28/46
Processeur G4 (Motorola)
Équipait les PowerMac
(1999 – 2005)
Pipeline à 7 étapes
Il peut y avoir jusqu’à
16 instructions en
cours de traitement
(car l'étape execute
peut prendre plusieurs
cycles selon l'unité
où elle est exécutée)
arstechnica.com
Pentium 4
2000 – 2007
Pipeline à 20 étages
Jusqu’à 126 instructions
en cours d’exécution
arstechnica.com
Architecture Multi-Cœur

On met plusieurs CPU sur une même puce




Chaque CPU peut être plus simple qu'un mono-cœur,
avec une fréquence d'horloge plus petite


chaque CPU est superscalaire
en général, chaque CPU a un cache L1 mais ils partagent
les caches L2 ou L3
tendance à augmenter le nombre de coeurs (Intel
Polaris, 80 coeurs, certains prototypes avec plusieurs
centaines, voire plusieurs milliers - Adapteva)
consommation électrique diminuée
Un mono-cœur doit se partager entre les différents
programmes actifs (multi-tâches), un multi-cœur peut
répartir ces tâches sur ces coeurs

Les programmes (notamment le système d'exploitation)
doivent être repensés (programmation parallèle)
© Jacques Farré 2013
Informatique générale - processeurs
31/46
Architecture Multi-Cœur
XLP 832
(Broadcom) :
0,5 – 1,5 GHz
8 cœurs
Sécurité réseaux
Cloud Computing
Compression de très
grosses données
...
© Jacques Farré 2013
Informatique générale - processeurs
32/46
Architecture Multi-Cœur
Cortex A9 (ARM) :
0,8 – 2 GHz
1 – 4 cœurs
Samsung Galaxy,
IPhone 4S,
PlayStation Vita,
...
© Jacques Farré 2013
Informatique générale - processeurs
33/46
Performances des
processeurs



Un processeur est extrêmement complexe
Deux processeurs de la même famille (ex :
x86) peuvent avoir un fonctionnement très
différent
Comment les comparer ?
 La fréquence d'horloge ne fait pas tout
 Pourquoi ne pas compter le nombre
d’opérations effectuées par secondes
 Ok, mais lesquelles?
 Entiers, flottants, un mélange… ?
© Jacques Farré 2013
Informatique générale - processeurs
34/46
Flops

Floating point operations per second



Mesure le nombre d’opérations sur des
flottants effectuées par seconde
Très utile dans le calcul scientifique (où on
peut avoir à exécuter un nombre énorme
d'opérations)
La mesure est effectuée grâce à un
programme appelé Benchmark (test de
performance)


Le benchmark doit être le même pour tous les
CPUs testés
En général LINPACK (résolution d’équations
linéaires)
© Jacques Farré 2013
Informatique générale - processeurs
35/46
Exemple de supercalculateurs


Le site du classement des super-calculateurs :
http://www.top500.org/
Classement novembre 2013





Tianhe-2 (NUDT, Chine) : 3 120 000 cœurs (Intel Xeon 2,2
GHz), 34 Pflops (1 peta = 1015, un million de milliards),
18 000 kW (consommation d'une ville de 10000 habitants)
Titan (Cray, USA) : 560 000 cœurs (18688 AMD Opteron
16 cœurs, 2,2 GHz et 18688 cartes graphiques Nvidia), 18
Pflops), 8200 kW
Sequoia (IBM, USA) : 1 572 864 cœurs (IBM Power BQC
16C 1.60 GHz), 17 Pflops, 7900 kW
...
en 14e, Pangea (Total, France) : 110 400 cœurs (Xeon
2.67 GHz), 2,1 Pflops, 2100 kW
© Jacques Farré 2013
Informatique générale - processeurs
36/46
Exemple de supercalculateurs
Le séquoia d'IBM
© Jacques Farré 2013
Informatique générale - processeurs
37/46
Exemple de supercalculateurs
Le premier actuellement : Tianhe-2 (Milky Way – Rivière céleste)
3 120 000 cœurs (Intel Xeon et Phi 2.20 GHz), mémoire 1 024 000 Go
34 Pflops (1 peta = 1015, 1 million de milliards),
consommation 17 808 kW
© Jacques Farré 2013
Informatique générale - processeurs
38/46
Graphics Processing Units
(GPU)

Processeurs spécialisés dans le rendu graphique


Produits d'abord pour l’industrie du jeu video
Très performants dans les calculs flottants

Mais très spécialisés (pas faciles à programmer
pour faire autre chose)
Graphics State
Application
CPU
© Jacques Farré 2013
Transform
& Light
Assemble
Primitives
Rasterize
GPU
Shade
Video
Memory
(Textures)
Render-to-texture
Informatique générale - processeurs
39/46
Exemple de supercalculateurs
Le premier en décembre 2012 : Titan XK 7 de Cray
18 688 AMD Opteron 6274 16-core et 18 688 Nvidia Tesla K20X
mémoire 693 000 Go
17 Pflops (1 peta = 1015, 1 million de milliards),
consommation 8 200 kW, occupation 400 m2
© Jacques Farré 2013
Informatique générale - processeurs
40/46
Performances comparées
processeur / carte graphique
© Jacques Farré 2013
Informatique générale - processeurs
41/46
SISD, SIMD, Stream
Processing




Un CPU est SISD (Single
Instruction Single Data)
Les GPU fonctionnent sur
le modèle SIMD (Single
Instruction Multiple Data)
Étendu et appelé Stream
Processing (Multiple
Instruction Multiple Data)
Le GPU charge un ensemble
d’instructions appelé kernel
et l’exécute sur une grosse
quantité de données
© Jacques Farré 2013
Informatique générale - processeurs
42/46
General Purpose GPU GPGPU

General Purpose computing GPU


Permet d’introduire du code programmé dans les
étapes de rendu
Utiliser des GPU pour faire d’autres calculs ?




Produits en grande quantité pour les consoles ⇒
moins coûteux qu'un processeur spécialisé
Mais il faut du code SIMD : langages de
programmation spécialisés
Très difficile avec les premiers GPU : il fallait
détourner les fonctions graphiques
Dernières générations flexibles, programmables
avec des kits logiciels (frameworks) comme
nVIDIA CUDA ou OpenCL
© Jacques Farré 2013
Informatique générale - processeurs
43/46
Un exemple : NVIDIA 8800

Stream Processor (SP)
 Processeur scalaire faisant du calcul flottant


Texture Filtering (TF)


Permet d’introduire du code programmé dans les
étapes de rendu
Mémoire Fully Buffered (FB)



Les SP sont regroupés par 16 dans un cœur
Permet des lectures et écritures en parallèle
Permet notamment de faire des corrections
d'erreurs
Le 8800 compte 8 cœurs, soit 128 SP


Les cœurs sont reliés entre eux
Un cœur peut utiliser le résultat d’un autre
© Jacques Farré 2013
Informatique générale - processeurs
44/46
Un exemple : NVIDIA 8800
© Jacques Farré 2013
Informatique générale - processeurs
45/46
Mais pourquoi sont ils si
rapides ?

Ils sont très spécialisés


Ils sont massivement
parallèles



Pas de calcul sur entier
par exemple 256 SP
sur les nVidia Geforce 280
Ils ne traitent bien qu’un type de programme
 SIMD/Stream
Pas de mécanismes compliqués comme la
prédiction de branchement ou la gestion de
la mémoire
© Jacques Farré 2013
Informatique générale - processeurs
46/46
Téléchargement