Cours Architecture Avancée
Cours Architecture Avancée
partie
(SWENG 213)
vendredi 8H-12H
Par Yves EYENGA
CHAPITRE 1 : Mémoire cache
I. DEFINITION
Plusieurs niveaux de mémoire dans un ordinateur
CHAPITRE 1 : LA MÉMOIRE CACHE
LES MEMOIRES
On rappelle que:
LA MÉMOIRE CACHE
Pour la lecture d’instructions et des données, le processeur a besoin d'un débit permanent
→ Ne pas être inactif pendant l’attente
Problème
La Mémoire centrale où se trouvent ces données et instruction est beaucoup trop lente pour assurer ce débit
Solution: Se server d’une mémoire intermédiaire entre la mémoire centrale et le processeur qui soit très rapide
→ Mémoire cache (ou cache tout court)
La mémoire cache (également appelée antémémoire ou mémoire tampon) est une mémoire rapide permettant de
réduire les délais d'attente des informations stockées en mémoire vive.
En effet, la mémoire centrale de l'ordinateur possède une vitesse bien moins importante que le processeur. Il existe
néanmoins des mémoires beaucoup plus rapides, mais dont le coût est très élevé. La solution consiste donc à inclure ce
type de mémoire rapide à proximité du processeur et d'y stocker temporairement les principales données devant être
traitées par le processeur
CHAPITRE 1 : LA MÉMOIRE CACHE
LA MÉMOIRE CACHE
CHAPITRE 1 : LA MÉMOIRE CACHE
LA MÉMOIRE CACHE
Le choix de cette approche ne peut se faire sans compromis
Problème
Pour être efficace en terme de débit, la mémoire cache doit être petite (quelques centaines de Ko à quelques dizaines
de Mo).
→ Elle ne peut par conséquent pas stocker tous les programmes en cours d’exécution, ainsi que les données y
afférentes
Solution
Mise en place d’algorithmes pour « anticiper » et mettre dans le cache les données/instructions avant que le CPU en
ait besoin
Rechercher le bon compromis entre tailles, types de cache (données/instructions), niveaux de cache, techniques
d'accès au cache ... pour de meilleures performances
CHAPITRE 1 : LA MÉMOIRE CACHE
La mémoire cache de premier niveau (appelée L1 Cache, pour Level 1 Cache) est directement intégrée dans le
processeur. Elle se subdivise en 2 parties :
• La première est le cache d'instructions, qui contient les instructions issues de la mémoire vive décodées lors du
passage dans les pipelines.
• La seconde est le cache de données, qui contient des données issues de la mémoire vive et les données
récemment utilisées lors des opérations du processeur.
Les caches du premier niveau sont très rapides d'accès. Leur délai d'accès tend à s'approcher de celui des registres
internes aux processeurs.
CHAPITRE 1 : LA MÉMOIRE CACHE
Tous ces niveaux de cache permettent de réduire les temps de latence des différentes mémoires lors du traitement et
du transfert des informations. Pendant que le processeur travaille, le contrôleur de cache de premier niveau peut
s'interfacer avec celui de second niveau pour faire des transferts d'informations sans bloquer le processeur. De même,
le cache de second niveau est interfacé avec celui du troisième niveau, pour permettre des transferts sans bloquer le
fonctionnement normal du processeur
CHAPITRE 1 : LA MÉMOIRE CACHE
PERFORMANCE
Lorsque l’on veut évaluer la performance d’une mémoire cache, l’on peut évaluer:
NB: Latences dépendent de la taille des niveaux et de l'organisation des données dans les niveaux
CHAPITRE 1 : LA MÉMOIRE CACHE
PERFORMANCE
La performance peut aussi être évaluée à partir de la taille du cache et du nombre de niveaux
LOCALITE ET PRE-FETCHING
Localité temporelle
• Une donnée référencée à un temps t aura de très fortes chances d'être référencée dans un futur proche
Localité spatiale
• Si une donnée est référencée à un temps t, alors il y a de très fortes chances que les données voisines le soient
dans un futur proche
LOCALITE ET PRE-FETCHING
Intérêt du write-back
Limitation des écritures en mémoire centrale
Inconvénient du write-back
Problème si d'autres éléments accèdent à la mémoire en écriture
• Périphériques en mode DMA (Direct Memory Access)
• Multi-processeurs avec mémoire commune
• Processeurs multi-cores
Nécessite alors des algorithmes supplémentaires pour gérer la cohérence
CHAPITRE 1 : LA MÉMOIRE CACHE
Trois méthodes pour gérer la correspondance entre une ligne dans le cache et une ligne de la mémoire centrale
Correspondance directe
Correspondance associative totale
Correspondance associative par ensemble
Exemples avec
Lignes de 32 octets
Mémoire cache de 512 Ko : 16384 lignes
Mémoire centrale de 128 Mo : doit être gérée via les 512 Ko de cache et ses 16384 lignes
CHAPITRE 1 : LA MÉMOIRE CACHE
INTRODUCTION
Fort impact des architectures multicœurs
→ de nombreux programmeurs cherchent à utiliser au mieux la puissance fournie par les processeurs modernes
• Ils possèdent des processeurs contenant plusieurs cœurs .
Architecture disponible sur le marché depuis quelques temps
→ Objectif: la performance
→ But: Exécuter des instructions indépendantes dans des processeurs séparés
→ Toutefois, coût relativement élevé
Le parallélisme est le mécanisme par lequel l’on repart des calculs sur plusieurs processeurs.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
NOTION DE PARALLELISME
Il existe plusieurs types de parallélisme.
Parallélisme de threads
exécuter des calculs indépendants en parallèle.
• découper le programme en plusieurs sous -programmes indépendants qu'on peut faire exécuter en
parallèle.
• Ces sous programmes sont les Threads
Chaque thread est exécuté sur un processeur séparé.
Comment découper le programme? C’est du ressort du compilateur ou du programmeur.
Attention: il est possible que le découpage se fasse au moment de l’exécution.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
NOTION DE PARALLELISME
Parallélisme d’instruction
Plutôt que de paralléliser le programme…
• On parallélise les instructions.
• Un exemple où cette technique est appliquée: dataflow
Un processeur seul peut exécuter plusieurs instructions simultanément pour peu qu’elle appartiennent au même
programme.
Parallélisme de données
Un programme est exécuté sur des données différentes et indépendante.
tous les processeurs exécutent un seul et unique programme ou une suite d'instructions , mais chacun de ces
processeurs va travailler sur une donnée différente.
Flynn classe les architectures parallèles en 4 catégories : SISD, SIMD, MISD, et MIMD.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
ATTENTION: La capacité à traiter des données ou des instructions différentes simultanément n'est pas la seule
différence entre les
architectures parallèles : la façon dont les processeurs doivent se partager la mémoire est aussi très importante.
Suivant la façon dont est partagée la mémoire, de nombreux problèmes peuvent apparaitre.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
L’utilisation des mémoires caches peut être une solution pour réduire le temps d’accès à la mémoire unique, mais
on retombe sur un problème : la cohérence des caches n'est pas assurée et on doit se débrouiller pour qu'elle le
soit, comme pour les architectures SASM
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Deux approches:
Loi d'Amdhal
Loi de Gustafson
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Situation de référence
Elle est définie par le comportement du programme lorsqu’il s’exécute sur un seul processeur
Elle permet d’apprécier les gains provenant de l’ajout de processeurs.
On note T le temps mis par le programme lorsqu’il s’exécute sur un seul processeur
Ce temps se décompose comme somme du:
→ Temps d’exécution du code série, noté
→ Temps d’exécution du code parallèle sur un seul processeur, noté
On peut alors écrire:
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Plusieurs processeurs
On suppose que l’on dispose de N processeurs
Les calculs du code parallèle s’exécutent de façon simultanée sur les N processeurs.
Il y a gain de temps car on n’attend pas qu’une portion soit terminée avant de lancer une autre
Calcul du gain
Comment comparer le temps d’exécution du programme sur la machine avec un processeur et celui mesuré sur une
machine avec plusieurs processeurs ?
Le gain permet d’y répondre
On peut écrire:
Le gain représente le nombre de fois que le programme exécuté sur N processeurs est plus rapide que s’il est utilisé
sur un seul processeur.
Ainsi, plus le gain est important, plus il y a gain de performance.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
La loi de Amdhal
On va évaluer (1)
Exprimer (1) en fonction de et
On pose :
S représente le pourcentage de temps mis pour l’exécution du code série
P représente le pourcentage de temps mis pour l’exécution du code parallèle
Exprimer (1) en fonction de S et P
Donner l’expression du gain en fonction de S et P
Quelle relation existe-t-il entre S et P?
Exprimer le gain en fonction de P
La relation précédente est la loi de Amdhal. Elle représente le gain maximal théorique que l’on peut obtenir avec un
code passant un pourcentage P de son temps à exécuter du code parallèle avec N processeurs.
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Quand N tend vers l’infini, le code parallélisé est exécuté en un temps qui temps vers 0. Seul reste le code série sur
lequel la présence de plusieurs n’a aucun effet. Le temps d’exécution du code restant le même, le temps d’exécution du
programme ne peut pas descendre en dessous du temps d’exécution du code série. C’est la première limite imposée la loi
d’Amdhal.
Solution: paralléliser le plus possible le code du programme, pour diminuer S et augmenter P le plus possible. C'est
cela qui est le plus recherché à l'heure actuelle.
Seul problème : tous les programmes ne se laissent pas aisément paralléliser
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Enfin, une dernière remarque : la loi d'Amdhal est optimiste : elle a été démontrée en postulant que le code parallèle peut
être réparti sur autant de processeurs qu'on veut et peut profiter d'un grand nombre de processeurs . Dans la réalité, rares
sont les programmes de ce genre : certains programmes peuvent à la rigueur exploiter efficacement 2, 4 , voir 8
processeurs mais pas au-delà. Elle ne tient pas compte des nombreux problèmes techniques, aussi bien logiciels que
matériels qui limitent les performances des programmes conçus pour exploiter plusieurs processeurs . La loi d'Amdhal
donne une borne théorique maximale au gain apporté par la présence de plusieurs processeurs , mais le gain réel sera
quasiment toujours inférieur au gain calculé par la loi d'Amdhal
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Cas
d’une seule donnée.
Le temps d’exécution T du programme est tel que: .
Cas de plusieurs données.
Durant le temps , on pourra demander à chacun des N processeurs de traiter une donnée en un temps .
→ En un temps T, on peut demander à notre processeur d’exécuter un programme sur N données
Dans ce cas
Si ce calcul fait sur ces N données avait été fait sur un seul processeur, on aurait dû calculer ces données unes
par une, ce qui aurait pris un temps égal à:
CHAPITRE 2 : LES ARCHITECTURES MODERNES
Calcul du gain.
En remplaçant on obtient :
On pose :
pourcentage de temps passé à exécuter le code série
pourcentage de temps passé à exécuter le code parallèle sur N processeurs
On peut alors écrire:
En considérant que on déduit: (loi de Gustafson)
CHAPITRE 2 : LES ARCHITECTURES MODERNES
CONCLUSION
1. Paralléliser un programme qui exécute de nombreux calculs en parallèle sur le même ensemble de données est
voué à montrer «rapidement ses limites». Ce parallélisme est en effet soumis à la loi d'Amdhal.
2. Par contre, le parallélisme de données , consistant à effectuer un même programme/sous programme sur un
ensemble de données différentes donne de très bons résultats
3. Dans la réalité, aucune de ces formules n'est utilisable directement: de nombreux autres paramètres
interviennent, qui dépendent de l'architecture des processeurs utilisés, du langage de programmation utilisé et
de la manière dont a été programmé le programme en question. Ce sont d’abord des formules théoriques, et ne
servent qu'a donner des indications qualitatives
CHAPITRE 3 : MULTI-PROCESSEURS, MULTICOEURS ET
HYPERTHREADING
HYPERTHREADING ET COMPAGNIE
HYPERTHREADING ET COMPAGNIE
Fine Grained Multithreading