• Aucun résultat trouvé

Architectures des ordinateurs Caches et mémoire virtuelle. Daniel Etiemble

N/A
N/A
Protected

Academic year: 2022

Partager "Architectures des ordinateurs Caches et mémoire virtuelle. Daniel Etiemble"

Copied!
52
0
0

Texte intégral

(1)

Architectures des ordinateurs Caches et mémoire virtuelle

Daniel Etiemble

[email protected]

(2)

Capacité mémoire

1K 10K 100K 1M 10M 100M

1978 1981 1984 1987 1990 1993 1996

DRAM

SRAM (bits)

Date d’apparition X 4 tous les trois ans

L B L B

L M

Q Q

Point mémoire SRAM (6 transistors) Point mémoire DRAM

(1,5 transistors)

≈ 0.5 T

Surface SRAM/DRAM = 4

Coût bit SRAM/DRAM = 10

(3)

Caractéristiques temporelles des DRAM

année

1980 1983 1986 1989 1992

50 100 150 200 250

Temps de cycle

Temps d’accès ligne

lent rapide Temps d’accès colonne

64 Ko 256 Ko 1 Mo 4 Mo 16 Mo

ns

(4)

Le “gap” des performances mémoire

1 10 100 1000 10000

CPU DRAM

Croissance besoins CPU : 50 à 60%/an

Décroissance latence DRAM : 8 à 10%/an

(5)

Evolution des hiérarchies mémoire (1985-2000)

CPU L1

cache MM

System bus a)

CPU +

L1 caches L2 MM

cache System bus

b) System bus

L2 cache Superscalar

CPU + L1 caches

Special bus

MM d)

L2 MM cache Superscalar

CPU + L1 caches c)

System bus

System bus Superscalar

CPU + L1 caches

Special bus

MM RDRAM e)

L2 CACHE

Pentium Pro Pentium

PentiumII

Pentium 4

(6)

Principe des caches

• Fondés sur le principe de localité

• Mémoires de taille et vitesse différentes

• Organisation

– Découpage en lignes (blocs) – Mécanisme de correspondance

• Placement des lignes dans le cache

• Détection succès ou échec – Gestion de la cohérence

CPU

Cache Mémoire principale

Ligne

(7)

Principe de localité

• Localité spatiale

– Si on accède à une case mémoire, on accédera à une case proche

• Localité temporelle

– si on accède à une case mémoire, on y accédera

probablement très bientôt (ou dans très longtemps ou

jamais !)

(8)

Mécanismes de correspondance

01234567 01234567

0 1 2 3 01234567

ADRESSE LIGNE Mémoire principale

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

OU PLACER UNE LIGNE DE LA MP DANS LE CACHE ?

Correspondance directe Totalement associatif Associatif deux voies

(9)

Correspondance directe

= ?

Bits de contrôle

5 ETIQUETTE INDEX Adresse Octet

dans le Bloc

j

ETIQUETTE

i/NB 0

NB - 1

OUI : Succès NON : Echec

J (cache) = i (MP) mod NB, avec NB = nombre de lignes du cache

(10)

Associativité totale

Bits de contrôle

5

ETIQUETTE Adresse Octet dans le Bloc

j

ETIQUETTE

0

NB - 1

=

=

= NB

comparaisons

1 égalité = Succès 0 égalité = Echec

Ligne i(MP) dans n’importe quelle ligne j du cache.

Etiquette = i, et NB comparateurs pour détecter succès ou échec

(11)

Associativité par ensemble

= ?

Bits de contrôle

5

ETIQUETTE INDEX Ensemble Adresse Octet dans le Bloc

j

ETIQUETTE

i/NE 0

NE - 1

OUI : Succès

NON Echec j

ETIQUETTE

i/NE

0

NE - 1

= ?

Bits de contrôle

N (2, 4, 8) lignes par ensemble. Correspondance directe pour les ensembles et associativité à l’intérieur d’un ensemble.

N comparateurs.

(12)

Les causes d’échec cache

• Échecs de démarrage

– Premiers accès à une donnée ou une instruction : elle est en mémoire principale.

• Échecs de capacité

– Le cache est trop “petit” par rapport aux besoins du programme (instructions et/ou données)

• Échecs de conflit

– Le mécanisme de correspondance utilisé (correspondance directe ou

associativité par ensemble remplace des lignes déjà présentes dans le

cache (alors que d’autres lignes peuvent être non utilisées)

(13)

Les 3C

• Echecs de démarrage

• Echecs de capacité

• Echecs de conflit

0 0,02 0,04 0,06 0,08 0,1 0,12 0,14

1 bloc 2 blocs 4 blocs 8 blocs

Obligatoire Capacité Conflit

0 0,001 0,002 0,003 0,004 0,005 0,006 0,007 0,008 0,009 0,01

1 bloc 2 blocs 4 blocs 8 blocs

Obligatoire Capacité Conflit

SPEC92

Lignes de 32 octets - LRU

DECStation5000

(14)

Politique en écriture

WRITE THROUGH (Ecriture simultanée)

CPU

L1 L2

Write

Write Buffer

WRITE BACK (Réécriture)

Write CPU

L1 L2

x

Bit “modifié”

Ecriture mémoire quand une ligne modifiée est remplacée

L2 CPU

L1 x Read

Miss 1

2 Write back 3 Load

Cohérence au plus tôt

Réécriture

Cohérence au plus tard

(15)

Politiques de remplacement

• Ligne à remplacer ?

– La plus anciennement utilisée (LRU) – Au hasard

– La moins fréquemment utilisée (LFU)

(16)

CPI Mémoire

CPU

Cache

Mémoire principale

Bloc

ma: accès mémoire/instruction m: taux d’échec

p : pénalité d’échec (cycles d’horloge)

CPImémoire = ma x m x p

(17)

Améliorer les performances des caches

• Diminuer le taux d’échec

• Taille (cache, ligne) et associativité

• Optimisations du compilateur

• Préchargement

• Diminuer le temps d’accès réussi (hit)

• Petits caches

• Eviter les traductions d’adresse

• Diminuer la pénalité d’échec

• Caches non bloquants

• Caches de second niveau

(18)

Taux d’échec (Taille de ligne)

0,00%

5,00%

10,00%

15,00%

20,00%

25,00%

16 32 64 128 256

1K

4K

16K

64K

256K

(19)

Temps d’accès (taille de ligne)

0 2 4 6 8 10 12 14 16 18

16/42 32/44 64/48 128/56 256/72 1K

4K 16K 64K 256K

Taille de ligne /

Temps d’accès moyen (cycles)

Hypothèse

40 cycles de démarrage,

puis 16 octets tous les 2

cycles

(20)

Taux d’échecs (associativité)

Cache 8 Ko ; n voies

T au x d ’é ch ec

0 1 2 3 4 5 6 7 8 10 9

go gc c lis p co m pr es s m gr id ap pl u w av e hy dr o

1 2 4

Le taux d’échec décroît quand l’associativité croit, mais les

lectures “optimistes” ne peuvent plus être utilisées (nécessité

de prédicteurs d’ensemble)

(21)

Caches non bloquants

Succès pendant échecs : le cache continue à fournir les données des accès réussis pendant qu’il traite un échec.

CPU L1 L2 ou MP

Echec / Succès

Rapport moyen entre les temps de suspension d’un cache non bloquant/cache bloquant

0%

10% 20%

30%

40% 50%

60%

70% 80%

90%

100%

sw m 25 6 to m ca tv fp pp p su c2 co r hy dr o2 d m dl js p2 na sa 7 do du c w av e5 ea r m dl jd p2 al vi nn sp ic e2 g6 or a xl is p es pr es so co m pr es s eq nt ot t

Succès pendant 1 échec

Succès pendant 2 échecs

Succès pendant 2 échecs

(22)

Plusieurs niveaux de cache

• Options: caches instructions et données séparés ou cache unifié

Taille : Vitesse

€/Moctet : Taille ligne :

200 o

<1 ns 8 o

8-64 Ko

<1 ns 32 o

DRAM 128 Mo 60 ns

1.50€/Mo 8 Ko

30 Go 8 ms

0.05€/Mo Plus gros, plus lent, moins cher

Mémoire Mémoire

cache D - L1 Regs

Cache L2 unifié Cache

L2 unifié

Processeur

SRAM 1-4Mo 6 ns

100 €/Mo 32 o

cache I – L1

disque

disque

(23)

Caches inclusifs ou exclusifs

• Caches inclusifs

– L1 L2  MP

• Caches exclusifs

– L1  L2

– Fonctionnement

• Echec L1 : bloc de MP dans L1

– Si remplacement, bloc remplacé dans L2 et bloc demandé dans L1

• Echec L1 et Succès L2

– Remplacement d’un bloc dans L1 (copié dans L2) et bloc demandé de L2 dans L1

• Nécessité d’un tampon des victimes

– Lors d’un remplacement, le bloc remplacé

est placé dans un tampon pour ne pas

retarder le transfert L2 vers L1

(24)

Caches données des processeurs Intel

CACHE PRIMAIRE

Taille Assoc. Lignes Latence Ecriture Pentium Pro 8 Ko 2 voies 32 oct 3 Réécriture Pentium III 16 Ko 4 voies 32 oct 3 Réécriture Pentium 4 8 Ko 4 voies 64 oct 2/6 Simultanée

CACHE SECONDAIRE (UNIFIE)

Taille Assoc. Lignes Latence Ecriture

Pentium Pro 512 Ko 4 voies 32 oct Réécriture

Pentium III* 256 Ko 8 voies 32 oct 6 Réécriture

Pentium 4 256 Ko 8 voies 128 oct 7/7 Réécriture

(25)

Amélioration des performances cache

• Réduire le taux d’échec

– Taille de cache, de ligne et degré d’associativité – Optimisations du compilateur

– Préchargement

• Réduire le temps de l’accès réussi

– Prédiction d’ensemble

– Eviter les traductions d’adresse

• Réduire la pénalité d’échec

– Caches non bloquants – Caches de second niveau

HW SW

HW SW

HW HW

HW

HW

(26)

L’allocation mémoire des tableaux C

• Les tableaux C sont alloués dans l’ordre ligne d’abord

– Ligne dans des cases mémoires contiguës

• Balayage à travers les colonnes dans une ligne :

– for (i = 0; i < N; i++)

sum += a[0][i];

– Accède aux éléments successifs

– Si la taille de bloc (B) > 4 octets, exploite la localité spatiale

• Taux d’échecs obligatoires = 4 octets / B

• Balayage à travers les lignes dans une colonne :

– for (i = 0; i < n; i++)

sum += a[i][0];

– Accèdent à des éléments distants – Aucune localité spatiale !

• Taux d’échecs obligatoires = 1 (i.e. 100%)

(27)

Multiplication de matrices (ijk)

/* ijk */

for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0;

for (k=0; k<n; k++)

sum += a[i][k] * b[k][j];

c[i][j] = sum;

} }

/* ijk */

for (i=0; i<n; i++) { for (j=0; j<n; j++) { sum = 0.0;

for (k=0; k<n; k++)

sum += a[i][k] * b[k][j];

c[i][j] = sum;

} }

A B C

(i,*)

(*,j)

(i,j) Boucle interne :

Par colonne

Par ligne Fixé

• Echecs par itération de la boucle interne:

A B C

0,25 1,0 0,0

PRODUIT SCALAIRE

(28)

Multiplication de matrices (ikj)

/* ikj */

for (i=0; i<n; i++) { for (k=0; k<n; k++) { r = a[i][k];

for (j=0; j<n; j++)

c[i][j] += r * b[k][j];

} }

/* ikj */

for (i=0; i<n; i++) { for (k=0; k<n; k++) { r = a[i][k];

for (j=0; j<n; j++)

c[i][j] += r * b[k][j];

} }

A B C

(i,*)

(i,k) (k,*)

Boucle interne :

Par ligne Par ligne Fixé

• Echecs par itération de la boucle interne:

A B C

0,0 0,25 0,25

SAXPY/DAXPY

(29)

Améliorer la localité temporelle par blocage

• Exemple : multiplication de matrices avec blocage

– “bloc” (dans ce contexte) ne signifie pas “bloc de cache”.

– C’est un sous bloc de la matrice.

– Exemple: N = 8; taille de sous bloc = 4

C

11

= A

11

B

11

+ A

12

B

21

C

12

= A

11

B

12

+ A

12

B

22

C

21

= A

21

B

11

+ A

22

B

21

C

22

= A

21

B

12

+ A

22

B

22

A

11

A

12

A

21

A

22

B

11

B

12

B

21

B

22

X =

C

11

C

12

C

21

C

22

Idée de base : Un sous bloc (i.e., A

xy

) peut être traité comme un scalaire.

(30)

Optimisations du compilateur

FUSION DE TABLEAUX

int val[SIZE];

int key[SIZE];

struc merge { int val;

int key; }

struc merge merge-array [SIZE];

;

Améliore la localité spatiale

!

ECHANGE DE BOUCLES

for (j=0; j<100; j++)

for (i=0; i<5000; i++) x[i][j] = 2*x[i][j];

for (i=0; i<5000; i++)

for (j=0; j<100; j++)

x[i][j] = 2*x[i][j];

(31)

Optimisations du compilateur

FUSION DE BOUCLES

for (i=0; i<N; i++)

for (j=0; j<N; j++)

a[i][j] = 1/b[i][j]*c[i][j];

for (i=0; i<N; i++)

for (j=0; j<N; j++)

d[i][j] = a[i][j]+c[i][j];

for (i=0; i<N; i++) for (j=0; j<N; j++) {

a[i][j] = 1/b[i][j]*c[i][j];

d[i][j] = a[i][j]+c[i][j];

}

Améliore la localité temporelle

(32)

Optimisations du compilateur

BLOCAGE

for (i=0; i<N; i++) for (j=0; j<N; j++)

{r=0;

for (k=0; k<N; k++) r+=y[i][k]*z[k][j];

x[i][j]=r;}

for (jj=0; jj<N; jj+=B) for (kk=0; kk<N; kk+=B) for (i=0; i<N; i++)

for (j=jj; j<(min(jj+B-1,N); j++) {r=0;

for (k=kk; j<(min(kk+B-1,N); k+

+)

r+=y[i][k]*z[k][j];

x[i][j]+=r;}

AMELIORE LA LOCALITE TEMPORELLE

B : facteur de blocage

(33)

Préchargement matériel

• Précharger les instructions ou les données avant qu’elles ne soient nécessaires (charger une ligne avant un échec cache)

• Quelle ligne ?

– La suivante (préchargement séquentiel selon la localité spatiale) – Une ligne prédite

• Quand ?

– Toujours – Sur un échec

– Sur un échec et lorsqu’on accède une donnée préchargée

• Où ?

– Dans le cache (pollution potentielle)

– Dans un tampon

(34)

Préchargement logiciel

• Instructions de préchargement (IA-32)

– PREFETCHT0 m8 : tous les niveaux de cache – PREFETCHT1 m8: tous les niveaux sauf L0

– PREFETCHT2 m8: tous les niveaux sauf L0 et L1

– PREFETCHNTA m8: préchargement dans une structure non temporelle

• Indications de préchargement

– Dépendent des implémentations

(35)

Liaison cache-mémoire principale

CPU

Cache

Mémoire 1 mot

1 mot

CPU

MUX

Cache

Mémoire 1 mot

m mots

Mémoire large

CPU

Cache

Banc 0

Banc 1

Banc 2

Banc 3 1 mot

1 mot

Mémoire entrelacée m bancs

(36)

Entrelacement mémoire

Adresse -

Adresses

=

0 mod 4

Récupé ration donnée Donnée

entrée

Donnée sortie Selon les

2 bits de poids faible de

l’adresse

Cycle bus

Cycle mémoire 0

1 2

3 0

1 2

3 Module accédé

Temps Adresses

=

1 mod 4 Adresses

=

2 mod 4 Adresses

=

3 mod 4

Modules

indépendants

(37)

Mémoire virtuelle

• Beaucoup de programmes se partagent la mémoire DRAM

• On peut écrire des programmes sans tenir compte de la taille de la mémoire principale

• Relocation : des parties de programme peuvent être placés à différents endroits mémoire

• Mémoire virtuelle

– La mémoire DRAM contient plusieurs programmes s’exécutant en même temps (processus)

– On utilise la mémoire DRAM comme une sorte de “cache” pour le

disque

(38)

Transferts de données dans une hiérarchie mémoire

Plan d’ensemble de la hiérarchie mémoire

Pages Lignes

Mots Registres

Mémoire principale Cache

Mémoire virtuelle

(transferts explicites par Instructions Mémoire)

(transferts automatiques lors des défauts de cache)

(transferts

automatiques

lors des défauts

de page)

(39)

Mappage mémoire virtuelle sur mémoire physique

• La mémoire est divisée en “blocs” de même taille (par exemple 4 Ko)

• Un bloc de la mémoire virtuelle est affecté à un bloc quelconque de la mémoire physique (page)

Un processus

Mémoire physique

Mémoire virtuelle

Heap 64 Mo

Pile

Heap

Static

Code

(40)

Gestion des défauts de page

• Un défaut de page est comme un échec cache

– On doit trouver la page dans le niveau inférieur de la hiérarchie

• Si le bit « valide » est à 0, le numéro de page physique pointe vers une page sur disque

• Quand le système d’exploitation démarre un nouveau

processus, il crée de l’espace sur disque pour toutes les pages du processus, positionne tous les bits « valide » dans la table des pages à 0 et les numéros de pages physiques pour qu’ils pointent sur le disque

– Les pages du processus sont chargés depuis le disque uniquement

quand elles sont nécessaires (pagination à la demande)

(41)

Comparaison Cache - Mémoire virtuelle

Cache Mémoire virtuelle

Elément transféré Bloc ou ligne Page

Echec Echec cache Défaut de page

Taille transfert Bloc : 32-64 octets Page : 4 ko-16 ko Placement Correspondance directe

Associativité N voies

Associativité totale

Remplacement LRU ou hasard Approximation LRU

Ecriture Simultanée ou réécriture Réécriture

Gestion Matériel OS (matériel+logiciel

(42)

Traduction adresse virtuelle en adresse physique

Adresse physique

Numéro page virtuelle Adresse dans page

Adresse dans page

Numéro page physique Traduction

31 30 29 28 27 .……….12 11 10

29 28 27 .……….12 11 10

9 8 ……..…3 2 1 0

Adresse virtuelle

9 8 ……..…3 2 1 0

Page 1 ko

(43)

Traduction d’adresse

• Associativité totale pour le placement des pages

• Une table des pages est une structure de données qui contient le mappage des pages virtuelles sur les pages physiques

– Différentes techniques

• Chaque processus en cours d’exécution a sa propre

table des pages

(44)

Traduction d’adresse : Table des pages

Adresse virtuelle

N° page virtuelle Déplacement

Registre table pages

La table des pages est en mémoire physique

Index vers Table pages

+

Adresse mémoire physique

Droits accès : aucun, Lect. seule, Lect./Ecrit., Exécutable

Table page

Val ide

Droits

Accès N° page physique

V D.A. N.P.P

0 D.A.

V D.A. N.P.P.

...

...

(45)

Protection et partage en mémoire virtuelle

La mémoire virtuelle facilite le partage et la protection mémoire

Table page pour processus 1

Mémoire principale

Bits autorisation

Pointeur Drapeaux

Table des pages pour processus 2

vers disque

Accès lecture seulement Accès lecture et écriture

(46)

Table des pages directes à 2 niveaux

+

+

+

R e g i s t r e d e b a s e d u r é p e r t o i r e

R é p e r t o i r e

T a b l e d e s p a g e s

O p é r a n d e D é p l a c e m e n t

E n t r é e t a b l e E n t r é e r é p e r t .

0 1 1

1 2 2 1

2 2 3 1

4 K

4 K

M E M O I R E P H Y S I Q U E

A D R E S S E V I R T U E L L E

(47)

Table des pages inverses

d é p l a c e m e n t N u m é r o d e p a g e v i r t u e l l e

F o n c t i o n d e h a c h a g e

T a b l e d e p o i n t e u r s

T a b l e d e s p a g e s i n v e r s é e

N u m é r o p a g e v i r t u e l l e p o i n t e u r

N u m é r o p a g e v i r t u e l l e f i n d e c h a î n e

A d r e s s e v i r t u e l l e

N u m é r o p a g e v i r t u e l l e

p o i n t e u r

(48)

Traduction rapide : TLB

• Problème : la mémoire virtuelle demande 2 (3) accès mémoire

– 1 (2) pour traduire l’adresse virtuelle en adresse physique (accès à la table des pages)

– 1 pour l’accès à la donnée réelle (succès cache)

– La table des pages étant en mémoire physique, il y a donc 2 (3) accès mémoire

• Observation comme il y a de la localité dans les pages de données, il doit y en avoir dans les adresses virtuelles de ces pages

• Créer un cache de traduction des adresses virtuelles en adresses physiques

• Un tel cache de « table des pages » est appelé TLB

(Translation Lookaside Buffer)

(49)

Format TLB

• Modifié : indique si la page a été ou non modifiée en écriture

• Référence : utilisée pour calculer le LRU

• Droits d’accès : lecture/écriture/exécution sur les pages

N° page virtuelle

N° page physique

Valide Référence Modifié Droits

d’accès

(50)

Fonctionnement du TLB

Processeur TLB Cache Mémoire

principale

échec succès

Données

succès échec

Disque

Gestionnaire Défaut page

Table des pages

Données

Adresse

virtuelle Adresse physique

Partie « mémoire virtuelle »

(51)

Cache et TLB

Cache physique

TLB Cache L1

Adresses logiques

Adresses physiques

Cache virtuel

Cache L1 TLB

Adresses

logiques Adresses

physiques

Synonymes

(52)

Cache et TLB

Caches avec index virtuels et adresses physiques

TLB et cache sont accédés en parallèle

Avec la correspondance directe, taille du cache = taille de page

Dépl. dans la page

Numéro page virtuelle

Index

TLB =?

N° page physique

Etiquettes

Cache L1

N° page physique

Références

Documents relatifs

In this paper, we have presented Zero Content Augmented Cache, a feasible design for storing null data blocks in an adjunct ZC cache associated with a main conventional cache. The

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

Créateur de l'éther, ceint de constellations, Invité par la terre en pleine ébullition, Enlace la déesse et féconde la belle, Laissant avec adresse, la ronde éternelle.. Gardienne

Dépile et place dans le registre la valeur située en Dépile et place dans le registre la valeur située en sommet de pile. sommet

Connecte des blocs fonctionnels prédéfinis au Connecte des blocs fonctionnels prédéfinis au moyen de fonctions logiques combinatoires. moyen de fonctions

Due to the effect of multi-core hardware, such as local caches and shared hardware resources, the timing behavior of tasks are strongly influenced by their execution context

Celle-ci peut résulter d’une hausse de la quantité de facteurs de production utilisés (croissance extensive) ou du progrès technique (croissance intensive).. 2.1 Les facteurs