Uploaded by josawas529

Architecture Avancee

advertisement
Architecture Avancée SEOC 2A
PIBUS
Figure 2. Machine d’état du Maître
3 types de Composant:
1) Maître (Initiateur)
Emettent des “transactions”
2) Esclaves (Cibles)
Recoivent les “transactions”
3) Controleur du Bus
Gére le protocole
Tous le signaux sont en broadcast
Adresse => Cible du transaction
Parte haute : sélectionne 1 esclave parmi les autres
Parte basse : “offset” dans l’esclave sélectionné
A[31:2] = sur 30 bits
Données => “alignées” vers le bas
D[31:24]
XXX
XXX
—
D[23:16]
XXX
XXX
—
D[15:8]
XXX
—
—
D[7:0]
1 oct transmission
2 oct transmission
4 oct transmission
Types d’opcode | Opération => OPC[3:0]
WDU = 1 mot
HWa = 1 demi-mot
a=1
a=0
BYab = 1 octet qui a pour adress {A[31:2], a, b} (Concaténation)
ab = 11
ab = 10
ab = 01
ab = 00
Exemple d’un transaction sur le bus
ACK[2:0]
description
RDY
transfert effectué
ERR
transfer avorté
WAT
attend
Architecture des machines
Cycles par instruction (CPI) => Le nombre moyen cycles pour chaque instruction exécuté
Exemple:
Figure x - Processeur monocycle MIPS (avant Pipeline, sur processeur monocycle)
Quoique la boite Imm fait ? Elle construit le immediat, en analysant l’opération effectué.
Parfois l'immédiat est composé de 13 bits qui viennent d’une certaine partie de l’instruction,
mais en d’autres types d’instructions il est composé par plus/moins bits qui sont dans une
autre partie de l’instruction.
Pipeline risc 5 étages (CPI = 5 sans pipeline et IPC = 1 avec pipeline) :
1. Cycle de récupération d'instructions (IF).
2. Décodage d'instructions/Cycle de récupération de registre (DE).
3. Cycle d'exécution/d'adressage effectif (EXE).
4. Accès mémoire (MEM).
5. Cycle de réécriture (WB).
Il n’y a pas de bypass de MEM à EXE
Figure x - Processeur avec pipeline avec RaW problèmes
Read after Write (RaW) => On a besoin de trois nop pour n’avoir pas RaW
Pipeline risc 6 étages :
1. IF procède au chargement de l’instruction via la mémoire d’instruction
2. RF (Registers Fetch) réalise à la fois le décodage de l’instruction et la récupération
des valeurs des registres
3. ALU1 est utilisé pour le calcul de l’adresse effective des accès mémoire et des
branchements
4. MEM permet d’accéder à la mémoire de données
5. ALU2 est utilisé pour les opérations de l’ALU et pour les comparaisons utilisées par
les branchements
6. WB writeback
Figure x - Processeur avec pipeline 6 états avec RaW problèmes
Figure x - Processeur avec pipeline 6 états sans RaW problème
Branchements et Sauts
à l’étape fetch…
Branch Predictor : prédit si le branch sera pris ou pas.
- Branch History Table (BHT):
Branch target buffer (BTB): qui trouve l’adresse cible du branchement.
à l’étape EXE, il faut vérifier si la prédiction a été bien faite.
Caches
Petites morceaux de mémoire avec un accès plus rapide par le processeur. Exs: Caches
d’instructions et Cache de données.
Principes de localité
- localité temporelle : si on a accédé à l’adresse A, il y a de forte chance pour qu'on
l’accède de nouveau bientôt;
- localité spatiale: si on accède A, on accèdera à A+1, A-1, …
Types de mapping
- Full associative: n’importe quel ligne de mémoire peut aller à n’importe où dans le
cache (il n’a besoin que du TAG pour trouver la donnée);
- Direct Mapping: on fait des règles pour les emplacements…
MEM
CACHE
⟶
15,11,7,3
3
⟶
14,10,6,2
2
⟶
13,9,5,1
1
⟶
12,8,4,0
0
- Set associative: traite les collisions plus efficacement….
Number of sets = numéro de lignes
Number of ways = quantité de caches en parallel
Composition de l’adresse
Caches x-way associative
Politique de Remplacement
- Random, FIFO, LRU (Least recently used, “optimal”), Pseudo LRU, LFU (Least
frequently used);
Average Memory Access Time (AMAT)
𝐴𝑀𝐴𝑇 = 𝐻𝑖𝑡𝑡𝑖𝑚𝑒 + 𝑀𝑖𝑠𝑠𝑟𝑎𝑡𝑒 𝑥 𝑀𝑒𝑚𝑜𝑟𝑦𝐴𝑐𝑐𝑒𝑠𝑠𝑡𝑖𝑚𝑒
𝑀𝑖𝑠𝑠𝑟𝑎𝑡𝑒 = % 𝑑𝑒 𝑓𝑜𝑖𝑠 𝑞𝑢'𝑜𝑛 𝑑𝑜𝑖𝑡 𝑎𝑙𝑙𝑒𝑟 𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑟 𝑙𝑎 𝑑𝑜𝑛𝑛é𝑒 𝑒𝑛 𝑚𝑒𝑚𝑜𝑖𝑟𝑒
𝐻𝑖𝑡𝑡𝑖𝑚𝑒 = 𝑞𝑡𝑑 𝑑𝑒 𝑐𝑦𝑐𝑙𝑒𝑠 𝑞𝑢'𝑜𝑛 𝑢𝑡𝑖𝑙𝑖𝑠𝑒 𝑞𝑢𝑎𝑛𝑑 𝑜𝑛 𝑎 𝑢𝑛 ℎ𝑖𝑡0
*Hit_time = 1 à 3 cycles; Mem. access = 50 à 100 cycles.
Temps d’execution
texec = tideal ∗ (IPC × (1 - QTD_LectMemoire) + QTD_LectMemoire × AMAT)
Types de Caches
- Write Through (On écrit directement dans la mémoire et n’utilise le cache que pour
lecture)
- Write Back (On écrit dans le cache et quand on a une miss dans la ligne
précédemment écrite on l’écrira dans le cache)
ASID est un identificateur du processus utilisé quand on utilise l'adresse virtuelle dans le
cache
Virtually Indexed Physically Tagged (VIPT) :
Problème : si la page offset est plus petit qui l'index parce que s’on aurait 2 adresse virtuelle
différente avec le même adresse physique on les mettrait dans 2 lignes de cache différentes
Solution : le SE doit mettre les derniers bits de l’adresse virtuelle toujours différente pour 2
adresses différents
Multiprocessors
Solutions pour garantir la cohérence mémoire (ou cohérence de cache)...
-
quand on utilise des caches write through:
- sw invalider la ligne qui contient la variable partagée avant d’y accéder;
- Une autre solution c’est placer les données partagées dans des plages non
cachées.
- Une autre solution c’est le SNOOPY: chaque cache espionne le bus
d’adresse et ‘read’;
- Si écriture et l’adresse est dans mon cache, je:
- invalide la ligne - WIT
- ou mise à jour la ligne (si j’ai aussi accès à la donnée) - WTU
-
quand on utilise des caches write back:
- Protocole MSI:
- Trois états : Modified, shared and invalid.
- On peut avoir plusieurs caches avec la ligne aux états invalide ou
shared, mais on ne peut avoir qu’un seul au état modified.
Là l’exclusive représente l’état modified donnée en cours
Scalability
Si on a une valeur N de processeurs importante, on ne peut pas avoir de bus, parce
que la bande passante par proc. devient trop faible.
- Solutions:
- Hiérarchie de bus;
- Réseaux sur Puce (NoC)
- Protocole ”Directory based cache coherence”: dans notre mémoire
(ou dans un cache plus haut), on aura des "présence bits (Pi)”;
- Pi = 1 ssi le processeur i cache la ligne L;
- Est utilisée pour diminuer la quantité des messages dans le bus,
parce qu’on seulement les caches avec la ligne cachée recevra les
messages de modifications dans cette ligne
- Alternative: SMT (Simultaneous multithreading) Hyperthreading
- Les processeurs ont “plusieurs datapaths” et peuvent exécuter 2-4 threads en
parallèle.
- Ils partagent donc les mêmes caches, une fois qu’ils sont plusieurs cores
dans un même processeur.
Synchronisation multi-cores
Assembleur des lock et unlock des verrous :
- Gestion des sections critiques;
- Support HW pour la prise de verrous.
lock:
lw
bnez
li
sw
ret
to, 0(a0)
to, lock
to, 1
to, 0(a0)
Test&Set
- lit la variable et “atomiquement” la met à 1 (Support Hardware).
- première primitive créée pour ça.
lock:
unlock:
test&set to, 0(a0)
sw zero, 0(a0)
bnez
to, lock
ret
ret
fetch&add (ou fetch&xor, fetch&and, …)
- toutes capables de résoudre la même classe de problème;
- Dans un système avec des caches, la prise des verrous peuvent poser de
problèmes;
- Stratégie pour minimiser le taux d’injection:
Compare & swap
lock:
lw
to, 0(a0)
bnez
to, lock
test&set to, 0(a0)
bnez
to, lock
ret
<-<-- spin sur le cache
Load(Reserverd, Exclusive, Linked) : lr
Utilisé pour lire une donnée et met à 1 un bit de réservation sur cette donnée
Store(Conditional, Exclusive) : sc
Utilisé pour écrire une donnée sauf si le bit de réservation a été mis à 0
Lock avec lr et sc:
li t1, 1
lr t0, 0(a0)
bnez to, lock
sc t0, ti, 0(a0)
bnez t0, lock
t1 est la donnée qu’on veut écrire.
t0 indique si le store conditionnel n’échouait pas
Download