Title: Les multiprocesseurs
1Les multiprocesseurs
- Jusquà maintenant, nous avons parlé longuement
des microprocesseurs. - Nous allons maintenant étudier les
multiprocesseurs, comment ils fonctionnent, quels
sont les problèmes particuliers qui apparaissent.
2Les multiprocesseurs
- Périodiquement, depuis les années 60, on a
prédit la fin des uniprocesseurs, au profit des
multiprocesseurs - On parle souvent de la vitesse de la lumière
comme dune limite proche dêtre atteinte - C 3 X 10 8 m/s 15 cm / 0,5 ns (2 GHz)
- On dit que des architectures nouvelles
(multiprocesseurs) devront être utilisées pour
continuer daméliorer la performance - Mais depuis 1985, laugmentation de performance
des processeurs est la plus importante depuis la
fin des années 50!
3Les multiprocesseurs pourquoi
- En supposant que les microprocesseurs demeurent
la technologie dominante pour les uniprocesseurs,
il semble naturel dimaginer en connecter
plusieurs ensemble pour augmenter la performance - Il nest pas clair que le taux dinnovation au
niveau de larchitecture pourra se continuer
longtemps - Il semble quil y ait des progrès constants dans
les 2 domaines où les machines parallèles ont le
plus de difficulté le logiciel et les
interconnexions
4Les types de multiprocesseurs
- Taxonomie proposée par Flynn dans les années 60
- SISD (Single Instruction Single Data)
uniprocesseur - SIMD (Single Instruction Multiple Data)
plusieurs processeurs, qui exécutent en parallèle
les mêmes instructions sur plusieurs données - MISD (Multiple Instruction Single Data) pas
dexemple connu - MIMD (Multiple Instruction Multiple Data)
plusieurs processeurs qui opèrent de façon
indépendantes ou semi-indépendantes sur leurs
données
5Types de multiprocesseurs utilisés
- Les premiers multiprocesseurs étaient du type
SIMD, et cette architecture est encore utilisée
pour certaines machines spécialisées - Le type MIMD semble être la cible de choix de nos
jours pour des ordinateurs dapplication
courante - Les MIMD sont flexibles on peut les utiliser
comme machines à un seul utilisateur, ou comme
machines multi-programmées - Les MIMD peuvent être bâties à partir de
processeurs existants
6Au centre des processeurs MIMD la mémoire
- On peut classifier les processeurs MIMD en deux
classes, dépendant du nombre de processeurs dans
la machine. Ultimement, cest lorganisation de
la mémoire qui est affectée - Mémoire partagée centralisée (centralized shared
memory) - Mémoire distribuée
7Architecture possible des multiprocesseurs
Multiprocesseur
8Mémoire partagée centralisée
9Mémoire partagée centralisée
- La mémoire partagée centralisée (centralized
shared memory) est utilisée par des machines dau
plus une douzaine de processeurs en 1995 - On utilise un bus qui connecte les processeurs et
la mémoire, avec laide de mémoire cache locale.
- On appelle ce type de structure de mémoire le
Uniform Memory Access (UMA).
10Mémoire distribuée
11Architecture possible des multiprocesseurs
Multiprocesseur
12Mémoire distribuée
- La mémoire distribuée est utilisée dans des
machines utilisant beaucoup de processeurs,
qui requièrent une bande passante trop grande
pour une mémoire unique - Beaucoup tend à diminuer avec le temps,
puisque la performance des processeurs continue
daugmenter plus rapidement que celle de la
mémoire - Avantages de la mémoire distribuée il est plus
facile daugmenter la bande passante de la
mémoire si la plupart des accès mémoire sont
locaux. La latence est aussi améliorée lorsquon
utilise la mémoire locale
13Modèles de mémoire distribuée
- Il existe deux modèles de mémoire distribuée
- Espace dadressage unique, accessible par tous
les processeurs, mais distribué parmi les
processeurs. On dit de ce système quil est
Non-Uniform Memory Access (NUMA), parce que le
temps daccès à la mémoire dépend de lendroit où
se trouve la région qui est adressée (locale ou
distante) - Espace dadressage privé, où chaque processeur a
un accès exclusif à la mémoire locale. On
appelle parfois ces systèmes des systèmes
multi-ordinateurs (multi-computers) - Pour ces deux modèles, le mode de communication
diffère - Pour la mémoire partagée, la communication se
fait de façon implicite, en écrivant/lisant la
mémoire. - Pour la mémoire privée, on doit utiliser des
messages explicites entre les processeurs pour
passer linformation de lun à lautre, doù leur
nom de machines à passage de message (Message
Passing Machines)
14Architecture possible des multiprocesseurs
Multiprocesseur
15Avantages et inconvénients des mécanismes de
communication
- Mémoire partagée
- Mécanisme bien connu
- Facile à programmer (et facile de bâtir des
compilateurs) - Meilleure utilisation de la bande passante
(protection de la mémoire au niveau du matériel,
et non au niveau du système dexploitation - Possibilité dutiliser des techniques de caching
- Message-passing
- Matériel simplifié
- Communication explicite, exigeant lintervention
du programmeur
16Paramètres de communication
- Bande passante
- Limitée par linterconnection ou par les
processeurs eux-mêmes? - Temps de latence
- Temps de préparation de lenvoyeur temps de vol
(taille du message) / (bande passante) temps
de réception. - Élimination apparente de la latence (latency
hiding) - Comment minimiser limpact de la latence?
- Impact au niveau du logiciel
17Limites de la programmation parallèle
- Loi de Amdahl
- Speedup 1 _____________
- Fraction(améliorée) (1 - Fraction(améliorée)
- Speedup(amélioré)
- Soit un speedup désiré de 80 avec 100
processeurs. Quelle portion de lapplication
peut être séquentielle? - Fraction(parallèle) 0.9975 --gt 0,25 maximum
peut être séquentielle
18Limites de la programmation parallèle (II)
- Importance de la latence
- Dans les machines parallèles daujourdhui,
laccès à de linformation sur un autre
processeur peut prendre entre 50 et 10,000 coups
dhorloge. - Soit une machine qui prend 2,000 ns pour un accès
mémoire à distance, une horloge de 10 ns, et un
CPI de base de 1.0. Quelle est limpact sur le
CPI si 0,5 des instructions font un accès
mémoire à distance? - Accès à distance 2,000 / 10 200 coups
dhorloge - CPI 1.0 0,5 X 200 2.0
19Les systèmes à mémoire partagée centralisée
- Dans ce qui suit, nous allons maintenant étudier
comment faire un système parallèle MIMD qui
utilise de la mémoire partagée centralisée
20La cohérence de la mémoire quest-ce que cest?
- Comme pour les uniprocesseurs, il est essentiel
pour la performance des multiprocesseurs que le
temps daccès à la mémoire soit raisonnable - Lutilisation de mémoire cache est donc encore de
première importance - Puisquon est en présence de plusieurs machines,
il se peut quune adresse mémoire utilisée par
une machine A soit modifiée par une machine
B . Il faut sassurer que les données gardées
dans les mémoires caches soient les mêmes pour
tous les processeurs. Cest ce quon appelle la
cohérence de la mémoire
21Exemple du problème de cohérence de cache
Temps Événement Cache du CPU A Cache du CPU B Contenu de la mémoire, adresse X
0 1
1 CPU A lit X 1 1
2 CPU B lit X 1 1 1
3 CPU A écrit 0 dans X 0 1 0
22Définition de la cohérence de la mémoire
- Définition 1 Chaque lecture de la mémoire
retourne la valeur écrite le plus récemment - Cette définition traite de 2 concepts
- La cohérence (est-ce que la lecture retourne la
bonne valeur) - La consistence (quand est-ce quune valeur écrite
devient visible?)
23Définition de la cohérence
- La mémoire est cohérente si
- Un read par le processeur P à ladresse X qui
suit un write à ladresse X par le processeur P,
sans quil ny ait eu décriture par dautres
processeurs, retourne toujours la valeur écrite
par P - Un read par P à ladresse X qui suit un write par
Q à ladresse X retourne la valeur écrite par Q
si les 2 événements sont assez distants dans le
temps - Les écritures au même endroit sont sérialisées
- Les écritures par deux processeurs P et Q à
ladresse X sont vues dans le même ordre par tout
processeur du système
24Fonction de la mémoire cache
- La mémoire cache a deux fonctions
- La migration On transporte les valeurs dans la
mémoire cache locale pour diminuer le temps
daccès - La réplication Lorsquune donnée est modifiée,
toutes les caches qui la détiennent doivent être
infformées
25Dans un système à multiprocesseur, comment
connaître létat des différentes caches?
- Il existe deux classes de protocoles de cohérence
de cache - Basé sur un répertoire (directory based) létat
de partage des adresses de la mémoire est
conservé dans un endroit unique, le directory - Basé sur lespionnage (snooping) chaque mémoire
cache est branchée sur un bus de mémoire commun,
et écoute continuellement ce qui se passe
26Architecture possible des multiprocesseurs
Multiprocesseur
27Méthodes de maintient de la cohérence
- Il y a deux façons de sassurer de la cohérence
des caches - Obtenir laccès exclusif de ladresse mémoire
visée - Mettre à jour les autres copies
- Lusage exclusif de la mémoire est appelé le
protocole décriture invalidante (write
invalidate protocol). Le principe est le
suivant suivant lécriture dune donnée, toutes
les autres copies de cette donnée sont marquées
comme étant invalides. - La mise à jour des autres copies est appelée le
protocole décriture et mise à jour (write update
protocol, aussi appellé write broadcast
protocol). Ici, chaque écriture est suivie de
messages de mises à jour pour les autres versions
de la même donnée.
28Architecture possible des multiprocesseurs
Multiprocesseur
29Méthodes de maintient de la cohérence (II)
- Les deux protocoles dopération ont des
caractéristiques différentes qui infuencent leur
performance - Dans le cas décritures multiples au même espace
mémoire, sans lecture intermédiaire - Le protocole de mise à jour utilisera de
multiples appels aux autres machines - Le protocole dusage exclusif nutilisera quun
seul accès dinvalidation. - Il est possible de regrouper les mots mémoire
pour le protocole dusage exclusif, et ainsi
diminuer le nombre dinvalidations nécessaires
lors décriture à des adresses adjacentes (on
invalide toute un bloc de mémoire) - Cette possibilités nexiste pas pour le protocole
de mise à jour.
30Méthodes de maintient de la cohérence (III)
- Le délai nécessaire entre lécriture dune donnée
et sa lecture sur une autre machine est
habituellement plus petit avec un protocole de
mise à jour - Le protocole dusage exclusif est maintenant le
plus utilisé dans les machines multiprocesseurs
31Implémentation du protocole dusage exclusif
- Comment réaliser ce protocole? Sur un
multiprocesseur à petite échelle, on utilise le
bus comme moyen privilégié de synchronisation. - Pour pouvoir écrire dans la mémoire, un
processeur doit dabord obtenir le contrôle du
bus. - Ensuite, ladresse de la mémoire modifiée est
envoyée sur le bus. - Tous les autres processeurs sont continuellement
à lécoute. Si une écriture est faite à une
adresse mémoire qui est dans leur cache, cette
adresse est invalidée.
32Implémentation du protocole dusage exclusif (II)
- Pour la lecture, sil y a un cache miss, le
processeur va demander la donnée sur le bus.
Ici, il y a 2 possibilités - Si la mémoire centrale est continuellement mise à
jour (write-through), alors elle peut fournir la
valeur demandée. - Si au contraire on utilise lécriture avec délai
(write-back), il se peut que ce soit un
processeur qui détienne la valeur la plus
récente. Pour ce type de machine, les
processeurs doivent écouter le bus pour la
lecture aussi, et fournir la valeur demandée en
interrompant la lecture de la mémoire centrale.
33Architecture possible des multiprocesseurs
Multiprocesseur
34Implémentation du protocole dusage exclusif
(III)
- On peut ajouter de linformation dans la mémoire
cache locale pour améliorer le rendement du
système (write-back). On utilise alors un bit de
partage - Lors de lécriture dune adresse mémoire, on met
le bit de partage à 0. - Lors décritures subséquentes, on ninforme
personne de lécriture si le bit de partage est
toujours à 0. - Si un autre processeur lit cette adresse mémoire,
le bit de partage est mis à 1, et une écriture
subséquente va donc générer une invalidation. - Note comment permettre laccès efficace de la
mémoire cache à la fois par le processeur et par
le système de surveillance du bus? On peut tout
simplement dédoubler linformation de partage.
Une façon de faire est dutiliser des caches
multi-niveaux.
35Protocole write-invalidate
36Protocole write invalidate unifié
37Architecture possible des multiprocesseurs
Multiprocesseur
38Gestion de la mémoire pour des machines à
beaucoup de processeurs
- Lorsquon désire utiliser beaucoup de
processeurs, la méthode de mémoire partagée
centralisée ne fonctionne plus les délais
deviennent trop importants - Solution utiliser de la mémoire partagée
distribuée - Problème (toujours le même) cohérence des
mémoires cache. - Solution possible on défend dutiliser de la
mémoire cache pour les données partagées! - Cest la solution adoptée entres autres par le
Cray T3D. Chaque nœud possède une mémoire cache
uniquement pour ses données privées (locales).
39Problème de cohérence de cache pour des machines
à beaucoup de processeurs
- Solution possible gestion logicielle (simplifie
le matériel), mais - Pas de mécanismes efficaces pour passer le
problème au compilateur, et faire gérer le
problème de cohérence sans lintervention du
programmeur - On ne peut accéder à des adresses adjacentes de
façon efficace. - Meilleure solution utiliser un système matériel
qui assure la cohérence des caches
40Mémoire partagée distribuée le répertoire, un
protocole plus efficace que lespionnage
- Au lieu de faire de lespionnage (snooping), du
bus de connexion des processeurs, on peut
utiliser un répertoire qui indique létat de la
mémoire. - En particulier, le répertoire peut indiquer
létat de chaque bloc de mémoire qui peut se
retrouver dans la mémoire cache. - On y indique par exemple quelles mémoires cache
ont des copies de quels blocs de mémoire, et si
la mémoire a été modifiée (dirty bit) ou non.
41Mémoire partagée distribuée le répertoire
- Problème avec le répertoire
- La quantité dinformation à emmagasiner est
proportionnelle au nombre de blocs de mémoire
multiplié par le nombre de processeurs. Pour
plus de 100 processeurs, on peut avoir un
problème despace requis pour le répertoire - Autre problème le répertoire lui-même peut
devenir le goulot détranglement (trop de
requêtes). - Solution Le répertoire lui-même peut être
distribué de concert avec la mémoire
42Système multiprocesseur à répertoire distribué
43Protocole de répertoire simple
- Pour fonctionner correctement, le système doit
pouvoir gérer 2 types dopérations - Les lectures manquées ( read miss )
- Les écritures dans un bloc de mémoire partagée
- Pour ce faire, le répertoire doit contenir
linformation suivante pour chaque bloc de
mémoire - Mémoire partagée (un ou plusieurs processeurs
utilisent ce bloc mémoire, qui est à jour) - Mémoire non en cache (aucun processeur nutilise
une copie de ce bloc mémoire) - Mémoire exclusive ( un et un seul processeur
utilise ce bloc, qui a été écrit et donc qui
nest plus à jour) - Il faut savoir quels processeurs utilisent le
bloc mémoire sil est partagé. On peut utiliser
un vecteur de bits par bloc mémoire pour gérer
cette information
44Protocole de répertoire simple (2)
- On suppose que la machine contient un grand
nombre de processeurs. - Il nest plus possible dutiliser le bus pour
résoudre les problèmes daccès simultanés. - De plus, on suppose que la communication se fait
de point à point (pourquoi?)
45Protocole dutilisation de répertoire
46Protocole dutilisation de répertoire