20XX-XX.cours.02.ado2016-11-07 09:27250 KB

publicité
Architecture des Ordinateurs
La mémoire :
• organisation;
• adressage;
• performances et astuces : les caches
Organisation
Soit une mémoire d'une capacité C donnée en octets ou ko.
Plusieurs manières de l'organiser;
N
2
.M
piqûre de rappel : C 
8
avec
N : taille du bus d'adresse
M : taille du bus de données (en bits)
8 : coefficient entre bits et octets
Organisation
1 valeur de C  plusieurs couples (M,N)
exemple : C = 256 Mo
M (bits)
N
8
32
28
26
25
22
64
Meilleure répartition ?
Organisation
Plusieurs critères :
•
nombre de pistes : nombre minimal pour N maximal
• performance de débit : rapatrier plus de données en un
échange
• traitement des octets : taille utilisée par beaucoup
d'applications : ne correspond pas au bus ni à la cellule mémoire
Performance de débit mise en avant :
augmenter :
taille de cellule mémoire,
taille de bus de données
et le bus d'adresse ?
Traitement des octets
Transferts de données de 32 ou 64 bits (voire plus).
Comment traiter un octet (mot de 16 bits)?
Utilité de traiter un octet ?
Typage de langages (char en C)
fichiers texte : suite d'octets
comment ranger un octet dans un mot mémoire ?
2 possibilités : petit-boutisme (little endian)
gros-boutisme(big-endian)
Petit boutisme et gros boutisme
Numéroter les octets à l'intérieur d'un mot mémoire
 numéroter les bits à l'intérieur d'un octet !!!!
Ex : mot mémoire de 32 bits= 4 octets
Gros boutisme :
0
32 bits
1
3
1
0
32 bits
Petit boutisme :
3
2
2
Gros boutisme
32 bits
Adresse
0
0
1
2
3
1
4
5
6
7
2
8
9
10
11
3
12
13
14
15
Petit boutisme
32 bits
Adresse
0
3
2
1
0
1
7
6
5
4
2
11
10
9
8
3
15
14
13
12
Exemples de stockage de données
À partir du langage C
type : long int : 4 octets = 1 mot mémoire. Valeur à stocker = 7.
Sur 4 octets : (on indique le contenu)
00
00
00
07
Stockage direct dans un mot mémoire : pas de problème de petit ou
gros boutisme.
Exemples de stockage de données
À partir du langage C
type : char : 1 octet. Valeur à stocker = 18.
Sur 1 octets : (on indique le contenu)
18
Stockage dans un octet : problème de petit ou gros boutisme !
Ne sera pas stocké au même endroit du mot mémoire
Exemples de stockage de données
À partir du langage C
type : char : 1 octet. Valeur à stocker = 18.
18
Gros boutisme
18
??
Petit boutisme
??
??
??
Idem pour chaîne de caractères, suite d'octets.
??
??
18
Exemples de stockage de données
À partir du langage C
type : char []. Valeurs à stocker = 'B' 'o' 'n' 'j' 'o' 'u' 'r'
Gros boutisme
'B'
'o'
'o'
'u'
Petit boutisme
'n'
'r'
'j'
??
'j'
??
Rangement dans l'ordre des numéros d'octets
'n'
'r'
'o'
'u'
'B'
'o'
Exemples de stockage de données
Types de taille intermédiaire (exemple, short int occupant 16 bits).
Gros boutisme
1ère donnée
16 bits
2ème donnée
16 bits
Petit boutisme
2ème donnée
16 bits
1ère donnée
16 bits
Exemples de stockage de données
À partir du langage C
type : complexe, contenant des données de types différents (char et
long int par exemple).
Stockage cohérent dans une machine, mais problème de transmission
!
Transmettre des octets : problème d'ordre pour les données occupant
plus d'un octet en mémoire
Transmettre des mots mémoire : les machines ont-elles des tailles de
cellule mémoire équivalent ? Problème d'ordre pour les octets !
Chaque machine doit connaître le type de représentation de l'autre !
Alignement
Transfert de données de différentes tailles possibles (compatibilité C
et autres langages)
Culture générale
RAM : Random Access Memory, a accès aléatoire (non séquentiel)
SRAM : Static RAM
DRAM : Dynamic RAM
FPM RAM : Fast Page Mode : lecture en mode bloc
EDO RAM (Extended Data Out) : moins de rafraîchissements
BEDO RAM : Burst ou Block EDO
SDRAM : Synchronous DRAM : entrelacée
DDR SDRAM: Dual Data Rate SDRAM
QDR SDRAM : Quad Data Rate SDRAM
http://www.webreference.com/graphics/column14/index.html
Hiérarchie de la mémoire
Différents types de mémoire :
performances différentes
caractéristiques différentes
mais constat général :
Plus une mémoire est rapide; plus elle est chère !
Plus une mémoire est volumineuse, plus elle est lente, donc
plus elle est économique (prix au ko)
Pyramide de la mémoire
qqs octets
économique
rapide
registres
512 Mo
80 Go
10 Go
RAM
Disques durs
CD / DVD
300 Go
Bande magnétique (DAT,DLT)
100 To
Systèmes complets d'archivage (robots)
volatile
Persistante
RAM / CPU
RAM rapide, mais pas assez pour le processeur !
Ex : processeur à 2 GHz : peut traiter une donnée tous les : 0,5 ns !
Mémoire répond en quelques nanosecondes, le plus souvent 20 ns :
facteur 40 !
Comment accélérer le traitement ? Utiliser les registres le plus
possible ?
Oui, en assembleur, mais aucune maîtrise sinon (compilateur).
Utiliser une mémoire plus rapide ? Plus cher, mais pourquoi ?
Rapidité  proximité
proximité  intégration !
RAM / CPU
A propos de proximité :
en 0,5 ns, quelle distance l peut être parcourue par un signal ?
Au plus rapide : vitesse de la lumière c = 3.108 m.s-1
t = 0,5 ns = 5.10-10 s
l = c. t = 0,15 m
idéal : intégrer la RAM au support de processeur
trop cher car soucis d'intégration !
Compromis : mémoire moyennement rapide et moyennement proche
du CPU : mémoire cache.
Pyramide de la mémoire
qqs octets
économique
rapide
registres
512 ko
512 Mo
80 Go
10 Go
CACHE
RAM
Disques durs
CD / DVD
300 Go
Bande magnétique (DAT,DLT)
100 To
Systèmes complets d'archivage (robots)
Principe du cache
Objectif : améliorer les performances de la machine.
Notations :
tglob = temps d'accès à une donnée
tm = temps d'accès à la mémoire
tc = temps d'accès au cache
Cm = capacité de la mémoire
Cc = capacité du cache
sans utiliser de cache, on a : tglob
= tm
(on ne traite que la mémoire physique, pas la virtuelle)
Principe du cache
Comment utiliser le cache ?
a) comme de la mémoire supplémentaire ?
Dans ce cas, que vaut tglob?
La capacité totale de la mémoire accessible (cache+RAM) est de
Cc+Cm. Statistiquement, sur un grand nombre d'accès mémoire :
répartition au hasard.
En pourcentage :
Pc = Cc/(Cc+Cm) d'accès au cache
Pm =Cm/(Cc+Cm) d'accès à la RAM
Principe du cache
D'où
tglob = Pc.tc+Pm.tm
Aucun intérêt !
Application numérique
Cm = 256 Mo, tm = 40 ns
Cc= 256 ko, tc = 8 ns
on a alors Pc = 9,7.10-4 et Pm = 0,999
d'où
tglob = 39,97 ns.
Gain = 0,03 ns...
CACHE
CPU
RAM
Principe du cache
b) comme de la mémoire 'simulant' la RAM
le processeur adresse une certaine quantité de mémoire Cm, mais ce
n'est pas forcément la mémoire qui possède cette information.
Le cache peut en avoir une copie, auquel cas il répond à la place de
la mémoire. Beaucoup plus intéressant !
RAM
CPU
CACHE
Principe du cache
Illusion d'une mémoire très rapide de grande capacité.
Quelle information va transmettre le CPU pour accéder à une donnée
en RAM ?
son ADRESSE.
Cette adresse va d'abord être présentée au cache :
• s'il possède la donnée correspondante : il la transmet au CPU
SUCCES ou CACHE HIT
• sinon : la donnée est en mémoire, il faut la faire transiter depuis
la RAM
ECHEC ou CACHE MISS
Principe du cache
Le contenu du cache est dynamique : comment évolue-t-il ?
Cas possibles : action demandée, réponse du cache
demande de lecture, HIT :
pas de mise à jour.
demande de lecture, MISS : donnée cherchée en RAM,
recopiée dans le cache,
éventuellement remplacement
d'une donnée plus ancienne.
Principe du cache
demande d'écriture, c'est le CPU qui fournit la valeur :
attention à la cohérence entre le cache et la RAM !
La RAM reste la référence : écriture en RAM de la valeur
comportement du cache :
écriture de cette valeur ? Intéressant si la donnée se trouve
déjà dans le cache !
Plus simple : invalider la donnée si elle se trouve dans le
cache (ne nécessite pas de mettre à jour le cache)
Illustration
Analogie avec un libraire et un fournisseur.
Un passionné de lecture veut obtenir un nouveau livre : il peut
s'adresser à un fournisseur qui les possède quasiment tous, mais il faut
dans ce cas faire une commande, le délai est d'une semaine.
A côté de chez lui se trouve une (petite) librairie, qui contient des
livres que l'on trouve aussi chez le fournisseur.
Le passionné de lecture

CPU
Le fournisseur

RAM
La librairie

cache
Illustration
Le passionné se rend systématiquement à la librairie pour obtenir un
livre :
si la librairie dispose du livre : elle en donne une copie
sinon :
la librairie passe commande auprès du fournisseur
elle reçoit le livre au bout du délai normal
mais elle ne peut stocker qu'un nombre limité de livres
donc il faut libérer une place en 'jetant' un autre livre.
De même pour le lecteur : il ne dispose que de peu de place : il doit
libérer de la place dans sa bibliothèque au fur et à mesure
Performance du cache
Efficacité ?
On peut calculer tglob 2 deux manières :
1)
lorsqu'il y a HIT, le temps d'accès à la donnée est tc.
Lorsqu'il y a MISS, le temps d'accès est : tc+tm
HIT ou MISS ? : accès au cache !
Soit h le taux de HIT : 0  h  1 (h = nombre de HITS/nombre d'accès
total)
le taux de MISS est alors : 1-h
tglob = h.tc+(1-h)(tc+tm)
Performance du cache
2)
Dans tous les cas, un accès au cache (temps tc) est fait, puis :
s'il y a HIT : on ne fait rien
s'il y a MISS : on doit accéder à la mémoire : temps tm avec un taux 1h.
d'où
tglob = tc + (1-h).tm
quelle est la meilleure formule ?
Calcul de performance
Illustration avec données numériques
données précédentes :
tm = 40 ns, tc = 8 ns, Cm = 256 Mo, Cc=256 ko.
Comment évaluer h ? Même hypothèse que pour le cas a) : le cache
contient des données aléatoires.
Dans ce cas, quel est le taux h de réponse par un HIT à une demande
quelconque du CPU ?
h = Cc/Cm=1/1024
1-h = 1023/1024
on considère que h=0
Calcul de performance
D'où le résultat : tglob = tm+tc = 48 ns > tm !!!
Ajouter un cache diminue les performances du système !
Performance liée à la valeur de h, qu'il faut rendre maximum !
Comment améliorer h ?
optimiser h  maximiser le nombre de HIT lors des demandes
Donc : ne pas remplir le cache au hasard !
Anticiper les accès.
Calcul de performance
Utiliser des règles de remplacement de valeurs ou de mise à jour du
cache :
règles empiriques et non purement théoriques : amélioration des
performances non prévisible au mieux, mais en moyenne.
Exemple de telles règles :
localité spatiale : lorsqu'un programme accède à une certaine adresse,
il est probable qu'il accède à des adresses proches de celle-ci :
transfert de plusieurs données dans le cache lors d'un MISS
localité temporelle : lorsqu'un programme accède à une certaine
adresse, il est probable qu'il y accède de nouveau peu de temps après :
éliminer les données les plus anciennes d'abord (LRU)
Implémentation des caches
2 grandes familles :
les caches associatifs : chaque emplacement du cache contient une
association adresse/donnée
les caches à correspondance directe : chaque emplacement du cache ne
correspond qu'à un nombre restreint d'adresses
en réalité, on utilise un compromis entre les deux !
Cache associatif
Comparable à un tableau indexé : illustration
V
V
V
adresse
adresse
adresse
donnée
donnée
donnée
V
V
adresse
adresse
donnée
donnée
Cache
(N emplacements)
1 emplacement
de cache
Mise en œuvre
lecture, @$1000
CPU
0
0
0
$0
$0
$0
????????
????????
????????
0
0
$0
$0
????????
????????
bus d'@
MISS
Mise en œuvre
On suppose qu'en RAM, à l'@ $1000, on trouve la valeur $12345678
lecture, @$1000
CPU
1
0
0
$1000
$0
$0
$12345678
????????
????????
0
0
$0
$0
????????
????????
bus d'@
$12345678
RAM
Mise en œuvre
Politique de remplacement des valeurs :
exemple précédent : tous les emplacements équivalents (cache vide)
problème lorsque le cache est rempli de données valides !
Choisir la donnée à effacer; car en cas de MISS sur une lecture, on
copie systématiquement la donnée provenant de la RAM dans le
cache (principe de localité temporelle).
Technique LRU : "vieillissement" des emplacements lorsqu'ils ne
sont plus utilisées : comptage du nombre d'accès ne les concernant
pas.
Lors du remplacement : suppression d'un emplacement "le moins
récemment utilisé" : LRU (Least Recently Used)
Autres exemples (I)
Mise en œuvre avec des lectures
?
$C08
?
?
0
1
1
$AF0084
$86E2
$01005A
$00FF00A5
$1FA4C502
$00000000
bus d'@
CPU
!
MISS
0
1
$C08
$20000
$FFFFFFFF
$65636700
Autres exemples (II)
Mise en œuvre
HIT
?
$86E2
!
0
1
1
$AF0084
$86E2
$01005A
$00FF00A5
$1FA4C502
$00000000
bus d'@
CPU
0
1
$C08
$20000
$FFFFFFFF
$65636700
Autres exemples (III)
Mise en œuvre
?
$020E
?
?
0
1
1
$AF0084
$86E2
$01005A
$00FF00A5
$1FA4C502
$00000000
bus d'@
CPU
?
0
1
?
$C08
$20000
$FFFFFFFF
$65636700
MISS
Cache à correspondance directe
Problème de recherche, les adresses ne sont pas classées !
"classement" des adresses : à une adresse ne peut correspondre qu'un
emplacement précis du cache; bien évidemment, à un emplacement
précis du cache peuvent correspondre plusieurs adresses.
Technique : utiliser une partie de l'adresse (codée sur p bits) fournie
par le CPU pour déterminer l'emplacement du cache à tester.
Utilisation de q bits de poids faible de l'adresse.
Cache à correspondance directe
Soit un cache comportant N emplacements et tel que N soit une
puissance entière de 2 :  q  N / N=2q. (ce cas est toujours vérifié
en pratique).
Les q derniers bits d'une adresse codée sur p bits indiquent le
numéro de l'emplacement du cache correspondant à l'adresse
demandée.
adresse codée sur p=16 bits
0110101011000110
CPU
bus d'@
000
001
010
011
100
101
110
111
cache à 8=23 emplacements
Cache à correspondance directe
Toute adresse demandée se terminant par '110' indiquera le même
emplacement du cache.
Combien de telles adresses ? 2(p-q)
traiter les informations dans le cache :
s'assurer la donnée présente à cet emplacement correspond à
celle qui se trouve en RAM à l'adresse demandée.
Ne pas consulter la RAM !
La valeur des p-q bits de poids fort forment un TAG
(empreinte).
Cache à correspondance directe
TAG stocké dans le cache et utilisé pour comparaison avec l'adresse
demandée.
Structure de cache :
V
TAG
DATA
1 emplacement de cache à correspondance directe
V : bit de validité
TAG : p-q bits de l'adresse correspondant à la donnée stockée
dans la zone DATA.
Mise en œuvre
Cache initialement vide, p=16, q=4 (d'où N=16)
0
0
0
lecture, @ 101000111010 1110
CPU
N=2q
bus d'@
0
0
0
1) déterminer l'emplacement
=
2) comparer le TAG stocké dans le cache et le reste de l'adresse
Mise en œuvre
Cache initialement vide, p=16, q=4 (d'où N=16)
0
0
0
lecture, @ 101000111010 1110
CPU
N=2q
bus d'@
0
0
0
=
3) si les TAGS sont égaux : HIT si le bit V est à 1, MISS sinon
HIT/MISS
Mise en œuvre
On obtient forcément MISS puisque le cache est vide ! On suppose
de plus qu'à l'adresse demandée se trouve la donnée $9ABCDEF0.
lecture, @ 101000111010 1110
CPU
bus d'@
0
0
0
$9ABCDEF0
RAM
0
1
0
101000111010
$9ABCDEF0
Phénomène de ping-pong
Accès alternés à deux adresses ayant les mêmes q bits de poids faible
: même emplacement dans le cache !
Ex :
adresses
1000 1101 1011 0111
et
0100 1000 1110 0111
lecture à la première adresse : MISS, donc chargement en cache de
cette donnée et du TAG.
Lecture à la deuxième adresse : consultation du cache à
l'emplacement précédent : MISS, donc chargement en cache de
donnée et TAG;
et ainsi de suite
Alors qu'il peut y avoir N-1 emplacements libres !
Lignes de cache
Comment profiter de la localité spatiale des données ?
Transfert de plusieurs données lors d'une écriture en cache
pas dans plusieurs emplacements : trop long !
Un emplacement comporte plus qu'une donnée : une ligne de cache
stockage du contenu de 4 ou 8 adresses consécutives, et adressage à
l'intérieur de cette ligne
Lignes de cache
Illustration avec cache à correspondance directe :
nouveau découpage de l'adresse pour accéder à la donnée. On
suppose que l'adresse fournie par le CPU est codée sur p bits.
(p-q-r) bits
q bits
r bits
index SHAM
TAG
p bits
Index : indique l'emplacement du cache à consulter
SHAM : SHift AMount : indique le numéro de la donnée dans la
ligne de cache.
Mise en œuvre
Structure du cache (avec une ligne de cache de 4 données):
V
V
V
TAG
TAG
TAG
DATA 0
DATA 0
DATA 0
DATA 1
DATA 1
DATA 1
DATA 2
DATA 2
DATA 2
DATA 3
DATA 3
DATA 3
V
V
V
TAG
TAG
TAG
DATA 0
DATA 0
DATA 0
DATA 1
DATA 1
DATA 1
DATA 2
DATA 2
DATA 2
DATA 3
DATA 3
DATA 3
N
emplacements
Contient 4.N données
Mise en œuvre
Exemple : p = 12 , q = 4, r = 2. N = 24 = 16 emplacements de cache;
r = 2  4 données par ligne.
Le CPU fait deux demandes :
lecture, @ $FE0
lecture, @ $FE2
(en binaire 111111 1000 00)
(en binaire 111111 1000 10)
TAG
index
SHAM
Première demande : MISS, chargement du TAG (111111) et de 4
données à l'emplacement 1000 du cache.
Deuxième demande : même emplacement, même TAG  HIT
Mise en œuvre
État après : lecture, @ $FE0. Demande : lecture, @ $FE2
111111 1000 11
V
V
V
TAG
TAG
TAG
DATA 0
DATA 0
DATA 0
DATA 1
DATA 1
DATA 1
DATA 2
DATA 2
DATA 2
DATA 3
DATA 3
DATA 3
1
V
V
111111
TAG
TAG
données
DATA 0
DATA 0
données
DATA 1
DATA 1
données
DATA 2
DATA 2
données
DATA 3
DATA 3
=
1
HIT
MUX
Cache associatif par 2/4/8
Avantages et inconvénients des types de cache :
cache associatif
temps de recherche de l'adresse
une donnée peut être placée n'importe où
cache à correspondance directe
pas de recherche de l'emplacement
une donnée est stockée à un endroit précis : effet ping-pong
Cache associatif par 2/4/8
Profiter des avantages des deux types de cache :
utiliser plusieurs caches à correspondance directe (2,4 ou 8) lors
d'une demande :
obtention de plusieurs données, mais la donnée correcte est la seule
accompagnée d'un HIT de la part du cache à correspondance directe
associé.
Rapide, efficace, effet ping-pong maîtrisé (effet tournant sur 3,5 ou 9
adresses au lieu de 2)
Caches à plusieurs niveaux
Compromis coût/performances : plus le cache a une capacité élevée,
plus il est efficace, plus il est cher…même problème qu'avec la
RAM : plusieurs niveaux
ex des caches L1 et L2
séparation cache de données / caches d'instruction pour augmenter
l'efficacité :
Inutile de consulter un cache global : le découpage
instructions/données enfreint le principe de localité spatiale, valable
localement pour les donnée ou pour les instructions.
Cache L1 ou interne : petite capacité, très rapide
Cache L2 ou externe : capacité moyenne, éloigné de la puce
Adressage : matrices
Facilité d'intégration : utilisation sous la forme d'une matrice
comportant lignes et colonnes : 1 bit (ou une cellule mémoire)
associée à un numéro de ligne (ROW) et un numéro de colonne
(COLumn).
L'adresse envoyée sur le bus d'adresse est en fait constituée de deux
parties : une partie CAS (Column Address Strobe) et une partie RAS
(Row Address Strobe).
Possibilité de lecture par bloc en précisant la valeur de RAS puis en
envoyant des valeurs successives de CAS !
Plusieurs manières de réaliser cela.
Adressage : matrices
On présente volontiers la mémoire sous forme 'linéaire' (cf l'excellent
cours d'archi des microprocesseurs  ).
Représentée sous forme de bascules : vrai pour les mémoires dites
statiques (SRAM).
Mais en réalité, plus sophistiqué :
bascule : dispositif complexe par rapport aux échelles d'intégration
actuelles (gravures en 0,1 micron soit 10-7 m, 1000 fois le  d'un
atome)
on préfère un seul transistor ou condensateur : mémoire dynamique
DRAM moins chère mais doit être rafraîchie : ralentissement.
Téléchargement