Time - LIRIS

publicité
!
INSA-3IF
Architecture des
Ordinateurs!
Séance 4!
Christian Wolf,!
INSA-Lyon, Dép. IF!
# 1 C. Wolf
Au Menu!
CM1! ISA : Introduction. Jeux d’instructions,
assembleur.!
TD!
La « Micromachine » : réalisation d’un processeur
simple sur papier!
CM2! ISA : Encodage; Histoire!
TP!
Réalisation de la micromachine sous Logicworks!
CM3! Chemin de données d’un CPU RISC.!
Parallélisme des instructions!
CM4! CPU super-scalaires, multi-threading!
Retour sur les ISA/architectures!
CM5! Hiérarchie mémoire!
TP!
(Florent De Dinechin)!
Prise en main du contrôleur MSP 430
CM6! Les GPU !
TD!
Micromachine sur papier : les interruptions
TP!
MSP 430 : pile, timer, interruptions
# 2 C. Wolf
Sommaire de la séance!
Simultaneous Multithreading
Time
Processeurs multi-scalaires, multithreads!
!
Maximum utilization of function units by independent operations
!
ARM : architecture!
!
!
!
X86 : ISA + architecture!
!
# 3 C. Wolf
Après le parallélisme des instructions!
Question : comment obtenir encore plus de performance
pour un seule et unique thread, c.à.d. avec un seul cœur?!
!
!
Pipeline classique (« processeur scalaire ») :!
Une instruction peut terminer par cycle d’horloge (dans le
meilleur des cas).!
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
# 4
C. Wolf
Processeur super-scalaire!
Plusieurs instructions peuvent terminer par cycle d’horloge
(dans le meilleur des cas).!
Pour x86 : depuis 1993 (Intel Pentium P5)!
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
# 5 C. Wolf
Processeur super-scalaire!
Attention :!
-  Il s’agit toujours d’un seul cœur!!
-  Il s’agit toujours d’un seul thread!!
-  Les instructions sont lues de manière séquentielle!
-  Le CPU vérifie les dépendances entre instructions!
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
# 6 C. Wolf
Les figures en bleu sont pris de :
EV8: The Post-Ultimate Alpha
Dr. Joel Emer
Intel Fellow
Intel Architecture Group
Intel Corporation
# 7
C. Wolf
Processeur super-scalaire!
Instruction Issue
Time
Reduced function unit utilization due to dependencies
# 8 C. Wolf
Processeur super-scalaire!
Superscalar Issue
Time
Superscalar leads to more performance, but lower utilization
# 9 C. Wolf
Processeur multi-cœur!
Chip Multiprocessor
Time
Limited utilization when only running one thread
# 10
C. Wolf
Exécution dans le désordre!
Objectif : changer l’ordre d’exécution des instructions pour
maximiser l’utilisation des unités de calcul (et donc le
débit)!
Phases:!
-  Instruction Fetch!
-  Ajout des instruction dans une file d’attente!
-  Une instruction attend que les opérants sont
disponibles. Elle peut partir plus tôt que son ordre
« compilé ».!
-  Envoi vers une unité de calcul!
-  Ajout des résultats dans une file d’attente!
-  Ecriture des registres …. dans le bon ordre!!
# 11
C. Wolf
Exécution dans le désordre!
-  Chaque unité de calcul dispose de stations de réservations (SR)
contenant !
–  les instructions!
–  Les dépendances vers registres …. ou vers des résultats d’autres SR!
Instruc7on
Instruc7on
Instruc7on
Unitédecalcul
Instruc7on
Instruc7on
Instruc7on
Instruc7on
Unitédecalcul
Instruc7on
# 12
C. Wolf
Basic Out-of-order Pipeline
Fetch
Decode/
Map
Queue
Reg
Read
Execute
Dcache/
Store
Buffer
Reg
Write
Retire
PC
Register
Map
Regs
Dcache
Regs
Icache
Thread-blind
# 13
C. Wolf
Exécution dans le désordre!
Gain de performances :!
-  Quand les pipelines sont profonds!
-  Quand les différences entre fréquence horloge et délai
mémoire sont grandes (>100 cycle à l’heure actuelle!)!
Les attentes sont « masquées » par l’exécution d’autres
instructions.!
!
File d’attente des résultats : nécessaire pour !
-  Garder la cohérence des résultats!
-  Pour gérer la précision des interruptions!
# 14
C. Wolf
Exécution de plusieurs threads!
Variante classique : 1 cœur, 1 thread exécuté dans un
instant.!
Si l’OS exécute plusieurs threads, le processeur doit
maintenir une « illusion » que chaque thread dispose d’un
processeur entier à lui tout seul.!
Notion du changement de contexte (basculement d’un
thread à un autre) :!
-  Sauvegarde du contexte (registres, PC, pointeur pile
etc.)!
-  Chargement du contexte du nouveau thread!
!
Lent!!
!
# 15
C. Wolf
Simultaneous multithreading!
Support dans le processeur pour plusieurs threads
(toujours dans un seul cœur!)!
A chaque instant, le pipeline peut contenir des instructions
de plusieurs threads.!
Nécessite de garder le support matériel pour plusieurs
threads :!
-  PC!
-  Banc de registres!
-  Pointeurs pile !
-  Etc.!
Terminologie Intel-x86 : « Hyper-threading ».!
!
# 16
C. Wolf
Simultaneous Multithreading
Time
Maximum utilization of function units by independent operations
# 17
C. Wolf
SMT Pipeline
Fetch
Decode/
Map
Queue
Reg
Read
Execute
Dcache/
Store
Buffer
Reg
Write
Retire
PC
Register
Map
Regs
Dcache
Regs
Icache
# 18
C. Wolf
Processeurs multi-coeur!
Chaque cœur est indépendant. !
Chaque cœur peut être réalisé de manière super-scalaire avec SMT
(symmetric multi-threading).!
Caches peuvent être partagés …. ou pas!
!
Intel i7!
IBM Power 8 (2014)!
# 19
C. Wolf
Processeurs hyper-cœur !
Intel Xeon-Phi!
# 20
C. Wolf
Xeon-Phi!
# 21
C. Wolf
Sommaire de la séance!
Simultaneous Multithreading
Time
Processeurs multi-scalaires, multithreads!
!
Maximum utilization of function units by independent operations
!
ARM : architecture!
!
!
!
X86 : ISA + architecture!
!
# 22
C. Wolf
ARM A8!
-  Processeur super-scalaire : 2 instructions par cycle
d’horloge.!
-  Exécution dans l’ordre!
-  Pipeline de 13 cycles!
-  Prédiction dynamique de branchements par deux
buffers (512 entrées + 4k).!
-  Prédiction incorrecte : bulle de 13 cycles (pipeline
entier)!
# 23
C. Wolf
averages 0.99 and 1.07, respectively (using the harmonic mean). Recall that anything above 1.0 for
indicates that the feature reduces execution time by more than it increases average power. Two of
marks experience little speedup and have significant negative energy efficiency because of this.
in all cases. These data were collected and analyzed by Esmaeilzadeh et al. [2011] using the Oracle
ild 16.3-b01 Java 1.6.0 Virtual Machine and the gcc v4.4.1 native compiler.
ARM-A8 : pipeline!
F0
F1
F2
D0
D1
D2
D3
Branch mispredict
penalty =13 cycles
AGU
RAM
+
TLB
BTB
GHB
RS
12-entry
fetch
queue
Instruction decode
E0
E1
E2
E3
E4
E5
Instruction execute and load/store
Architectural register file
Instruction
fetch
D4
BP
ALU/MUL pipe 0 update
ALU pipe 1
BP
update
LS pipe 0 or 1
BP
update
Figure 3.36 The basic structure of the A8 pipeline is 13 stages. Three cycles are used
for instruction fetch and four for instruction decode, in addition to a five-cycle integer
pipeline. This yields a 13-cycle branch misprediction penalty. The instruction fetch unit
tries to keep the 12-entry instruction queue filled.
# 24
C. Wolf
ARM-A8 : instruction decode!
Chapter Three Instruction-Level Parallelism and Its Exploitation
D0
D1
D2
D3
D4
Score board
+
issue logic
RegFile
ID remap
Instruction decode
Early
Dec
Dec/seq
Dec queue
read/write
Early
Dec
Dec
Figure 3.37 The five-stage instruction decode of the A8. In the first stage, a PC produced by the fetch unit (either from the branch target buffer or the PC incrementer) is
used to retrieve an 8-byte block from the cache. Up to two instructions are decoded
and placed into the decode queue; if neither instruction is a branch, the PC is incremented for the next fetch. Once in the decode queue, the scoreboard logic decides
when the instructions can issue. In the issue, the register operands are read; recall that
in a simple scoreboard, the operands always come from the registers. The register operands and opcode are sent to the instruction execution portion of the pipeline.
E0
E1
E2
E3
E4
Instruction execute
Integer register write back
E5
# 25
C. Wolf
line delays rather than memory stalls are the major contributor to the CPI. This
result is partially due to the effect that Minnespec has a smaller cache footprint
than full SPEC or other large programs.
ARM-A8 : performance!
6
L2 stalls/instruction
L1 stalls/instruction
Pipeline stalls/instruction
5
Ideal CPI
Cycles per instruction
4
3
2
1
0
gzip
vpr
gcc
mcf
crafty
parser
eon
perlbmk
gap
vortex
bzip2
# 26
C. Wolf
Sommaire de la séance!
Simultaneous Multithreading
Time
Processeurs multi-scalaires, multithreads!
!
Maximum utilization of function units by independent operations
!
ARM : architecture!
!
!
!
X86 : ISA + architecture!
!
# 27
C. Wolf
L’Architecture x86!
La complexité du x86 n’est pas un obstacle infranchissable … La plus
grande faiblesse du jeu d’instructions x86 est le manque de registres
combiné avec un dispositif d’adressage extrêmement pénible.!
!
(Mike Johnson, responsable de la conception du 80x86 chez AMD,!
Microprocessor report (1994)!
# 28
C. Wolf
x86 : registres 8 bit, 16 bit, 32 bit !
8 bit et 16 bit (1979)
32 bit (1986)!
Intel 80386
# 29
C. Wolf
X86-64 : registres 64 bit!
64 bit (2003)!
AMD Opteron
# 30
C. Wolf
X86-64 : tous les registres …!
# 31
C. Wolf
X86 : mémoire!
Chaque adresse linéaire est spécifiée par une paire d’adresses :
(segment + déplacement)!
Déplacement!
Segment!
16
16
Déplacement!
Segment!
16
16
+
20
24
+
24
Au début, 8086!
A partir du 80286 (en 1982)!
# 32
C. Wolf
x86 : encodage !
Imaginez votre pire cauchemar, et c’est la version 32 bit que vous admirez
ici …!
# 33
C. Wolf
Intel i7!
- 
- 
- 
- 
Processeur super-scalaire !
Exécution dans le désordre!
Pipeline de 14 cycles!
Prédiction dynamique de branchements par plusieurs
méthodes en parallèle!
-  Décodage difficile : instructions longues, plusieurs
octets doivent être lus avant de connaître la longueur.!
# 34
C. Wolf
Instructions vs. mu-Ops!
-  Depuis le pentium Pro (1997) :!
–  Cœur « RISC » !
–  Jeu d’instruction « CISC » compatible avec les prédécesseurs !
Mémoire & Caches!
Décodeur!
d’instructions !
complexes!
Décodeur!
d’instructions !
simples!
Décodeur!
d’instructions !
simples!
Générateur de séquences μ-op!
File de μ-op !
Out-of-order!
Fusion!
Optimisation
Unité d’exécution RISC!
# 35
C. Wolf
i7 : CISC / RISC!
-  Les opérations complexes (CISC!) x86 peuvent contenir
des boucles!
-  Le Générateurs de μ-op peut générer 4 μ-op par clock,
jusqu’à ce que l’instruction CISC est terminé.!
-  Le cœur RISC est super-scalaire : 6 μ-op peuvent être
dispatchées par clock !
!
# 36
C. Wolf
i7 : boucles!
-  Les boucles sont détectées par une logique dédiée!
-  Objectif : ne pas décoder les mêmes instructions. Les μop sont directement récupérées d’un cache dédié.!
-  Fonctionne si !
–  < 28 instructions!
–  < 256 octets!
# 37
C. Wolf
i7 : Mémoire!
-  Cout des cache-miss :!
–  L1 : 10 cycles!
–  L2 : ~30 cycles!
–  L3 : 130-135 cycles!
-  Rappel : jusqu’à un certain point, les latences sont
« masquées » par :!
–  L’exécution en désordre (single-thread)!
–  La nature super-scalaire (single-thread)!
–  Le SMT (multi-thread)!
# 38
C. Wolf
dard deviation). MCF and OMNETPP are the major outliers, both having a CPI
over 2.0 while most other benchmarks are close to, or less than, 1.0 (gcc, the next
highest, is 1.23). This variance derives from differences in the accuracy of branch
i7 : (CPI moyenne)!
3
2.5
CPI
2
1.5
1
0.5
il
N c
am
d
D
ea
So lii
pl
Po ex
vr
ay
Lb
Sp m
hi
nx
3
M
Bz
ip
2
G
cc
M
G cf
ob
m
H k
m
m
e
Li S r
bq je
ua ng
nt
H um
26
4r
O
m ef
ne
tp
p
Xa A
la sta
nc r
bm
k
Pe
r
lb
en
ch
0
gure 3.43 The CPI for the 19 SPECCPU2006 benchmarks shows an average CPI for 0.83 for both the FP and
39 C.
Wolf0.44
eger benchmarks, although the behavior is quite different. In the integer case, the CPI values #range
from
to
x86 vs. ARM!
Appears in the 19th IEEE International Symposium on High Performance Computer Architecture (HPCA 2013)
3
Table 1. Summary of RISC and CISC Trends.
Operands
Fixed length instructions
Relatively simple encoding
ARM: 4B, THUMB(2B, optional)
Simple, single function operations
Single cycle
Operands: registers, immediates
Few addressing modes
ARM: 16 general purpose registers
Variable length instructions
Common insts shorter/simpler
Special insts longer/complex
x86: from 1B to 16B long
Complex, multi-cycle instructions
Transcendentals
Encryption
String manipulation
Operands: memory, registers, immediates
Many addressing modes
x86: 8 32b & 6 16b registers
CISC decode latency prevents pipelining
CISC decoders slower/more area
Code density: RISC < CISC
Even w/ µcode, pipelining hard
CISC latency may be longer than
compiler’s RISC equivalent
CISC decoder complexity higher
CISC has more per inst work, longer cycles
Static code size: RISC > CISC
µ-op cache minimizes decoding overheads
x86 decode optimized for common insts
I-cache minimizes code density impact
CISC insts split into RISC-like micro-ops;
optimizations eliminated inefficiencies
Modern compilers pick mostly RISC insts;
µ-op counts similar for ARM and x86
x86 decode optimized for common insts
CISC insts split into RISC-like micro-ops;
x86 and ARM µ-op latencies similar
Number of data cache accesses similar
How much variance in x86 inst length?
Low variance ) common insts optimized
Are ARM and x86 code densities similar?
Similar density ) No ISA effect
What are instruction cache miss rates?
Low ) caches hide low code densities
Are macro-op counts similar?
Similar ) RISC-like on both
Are complex instructions used by x86 ISA?
Few complex ) Compiler picks RISC-like
Are µ-op counts similar?
Similar ) CISC split into RISC-like µ-ops
Number of data accesses similar?
Similar ) no data access inefficiencies
Empirical
Questions
Convergence Historical
Trends
Contrasts
RISC /
ARM
Operations
CISC /
x86
Format
all performance and power differences by using measured metrics to quantify the root cause of differences and whether or not
ISA differences contribute. The remainder of this paper is centered around these empirical questions framed by the intuition
Reproduit de : Blem et al., 2013
presented as the convergence trends.
Although whether an ISA is RISC or CISC seems irrelevant,
did not find implementations that met all of our criteria: same
technology node across the different ISAs, identical or similar
microarchitecture, development board that supported necessary
measurements, a well-supported operating system, and similar
I/O and memory subsystems. We ultimately picked the Beagleboard (Cortex-A8), Pandaboard (Cortex-A9),# and
board,
40 Atom
C. Wolf
x86 vs. ARM : tailles!
-  x86 cible la performance, et
aussi la performance. !
-  ARM cible (historiquement) le
rapport entre performance et
consommation!
-  Les stratégies sont en évolution
….!
# 41
C. Wolf
Interruptions!
-  Réactions sur des évènements !
–  internes (exceptions mathématiques, accès mémoire interdite) !
–  externes (matériel, changement de tâche etc.)!
-  Le programme actuel est interrompu, suivi par l’appel
d’une sous-routine!
-  Problème d’atomicité des opérations call, push, pop etc.!
-  ARM : solution différente !
–  Instruction bl (branch and link) sauvegarde le PC dans R14,
suivi par le saut!
–  Les routines d’intérruptions dispose d’une autre version du R14
(comme le SP/R13)!
# 42
C. Wolf
A.8
Crosscutting Issues: The Role of Compilers
Le rôle du compilateur!
Dependencies
Language dependent;
machine independent
Front end per
language
■
A-25
Function
Transform language to
common intermediate form
Intermediate
representation
Somewhat language
dependent; largely machine
independent
Small language dependencies;
machine dependencies slight
(e.g., register counts/types)
Highly machine dependent;
language independent
High-level
optimizations
Global
optimizer
Code generator
For example, loop
transformations and
procedure inlining
(also called
procedure integration)
Including global and local
optimizations + register
allocation
Detailed instruction selection
and machine-dependent
optimizations; may include
or be followed by assembler
Reproduit
: Hennessy
et Patterson
Figurede
A.19
Compilers
typically consist of two to four passes, with more# highly
opti43 C. Wolf
Téléchargement