source: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/document-morpheo-overview/common/biblio.bib @ 2

Last change on this file since 2 was 2, checked in by kane, 17 years ago

Import Morpheo

File size: 87.2 KB
Line 
1@book{1983_Lee,
2  title={{Analysis of Branch Prediction Strategies and Branch Target Buffer Design}},
3  author={Lee, J.K.F. and Smith, A.J.},
4  year={1983},
5  publisher={Computer Science Division (EECS), University of California}
6}
7@article{1991_kaeli,
8  title={{Branch history table prediction of moving target branches due to subroutine returns}},
9  author={Kaeli, D.R. and Emma, P.G.},
10  journal={Proceedings of the 18th annual international symposium on Computer architecture},
11  pages={34--42},
12  year={1991},
13  publisher={ACM Press New York, NY, USA}
14}
15
16@InProceedings{  1991_wall,
17  author =       {David W. Wall},
18  title =        {Architectural Support for Programming Languages and Operating Systems},
19  OPTcrossref =  { ISBN:0-89791-380-9},
20  OPTkey =       {},
21  OPTbooktitle = {Proceedings of the fourth international conference on Architectural support for programming languages and operating systems},
22  OPTpages =     {176-188},
23  OPTyear =      {1991},
24  OPTeditor =    {},
25  OPTvolume =    {},
26  OPTnumber =    {},
27  OPTseries =    {},
28  OPTaddress =   {Santa Clara, California, United States},
29  OPTmonth =     {},
30  OPTorganization = {},
31  OPTpublisher = {ACM Press},
32  OPTnote =      {},
33  OPTannote =    {}
34}
35
3601/12/2004
37
38Etude sur le niveau de parallélisme d'un programme => l'ILP ne dépasse pas 5-7 instructions
39Ceci déterminera la viabilité d'ajout de mécanismes pour traiter en parralléle un maximum d'instructions (superscalaire, renommage de registre etc..)
40               #instruction
41Parrallelism = -------------
42               #cycle requit
43
44Le parallélisme est en moyenne de 3-4 inst. Peut être plus haut (ex. Programme numérique). Le profit d'une crête de parrallélisme est bas si la moyenne est basse.
45
46Augmenter l'ILP : 2 variétés de techniques :
47 a) Parrallélisme dans un bloc de base
48 b) Parrallélisme entre plusieurs blocs de base
49
50a) limité par les dépendances entre paire d'instructions
51    -> Renommage de registres (Hardware ou Software). Les compilos préfére utilisé le moins de registres possibles.
52    -> Pur les dépendances d'adresse mémoire => analyse d'alias
53b) Nombre d'instructions entre 2 branchements est en moyenne moins de 6 instructions
54    -> Prédiction de branchement pour exécuter de manière spéculatives les blocs de bases
55    -> Déroullement de boucles => augmentation de la taille des blocs de base
56    -> Pipeline logiciel => augmente le parallélisme au sein d'un bloc
57    -> Ordonnanceur de trace => trace : séquence de blocs souvent éxecuté
58
59CADRE DE TRAVAIL:
60
61* Execution du programme pour produire une trace d'execution
62* Algorithme va "paquetiser" ses instructions en groupe d'instruction non suspendu => on tente d'avoir 64 inst en //
63* Pas de limites d'unité fonctionnelle ni de limite d'accès au banc de registres. Chaque instruction à une latence d'un cycle, de même pour les opérations mémoires
64* L'execution se faire par groupe de paquet, si la suspension à également lieu dans le modèle, alors le paquet suivant sera exécuter le cycle suivant. Sinon, nous pouvons l'exécuter le même cycle.
65
66Le parrallélisme sera donc le nombre d'instruction par le nombre de cycles
67
68Paramètres :
69Register renamings : Parfait(nombre infinie de registres)
70                     finit (allocation dynamique => LRU, 256 registres entier, 256 flottant)
71                     aucun
72Prédiction de branchement : Prédiction parfaite (tjs correctement prédit)
73                            finit (dynamique) (prédiction d'un schéma à 2 bits , avec une table à 2048 entrées)
74                            finit (statique)  (tjs la même prédiction (dépendant de la prédiction parfaite))     
75                            aucun -> prédiciton tjs faux
76Idem pour le jump prediction
77analyse d'alias : Parfait (Il y a un conflit d'adresse que si l'adresse d'une écriture est la même qu'une autre écriture ou lecture)
78                  Aucune analyse (Une écritures sont en conflits avec chaque autre écriture et lecture)
79                  inspection d'instruction => pas de conflits si même registre de base mais dpt différent
80                                                              si registre de base différent (Mais explecitement différent ex utilisation de sp et gp qui sont deux pointeurs différents)
81                  analyse par le compilateur => analyse parfaite de la pile et des références globales
82Taille de la fenêtre : Nombre maximum d'instructions pouvant apparaître dans un cycle de traitement
83                     => Gestion de la fenêtre de manière discrète (Chercher une fênetre entière)
84                                                         continue (Chercher autant d'instruction qui viennent de ce terminer)
85
86Définitions de 5 modèles :
87
88          +----------------+--------------+--------------+----------------+
89          | branch Perfect | Jump predict | Reg renaming | Alias analysis |
90+---------+----------------+--------------+--------------+----------------+
91| Stupid  | none           | none         | none         | none           |
92| Fair    | infinite       | infinite     | 256          | inspection     |
93| Good    | infinite       | infinite     | 256          | perfect        |
94| Great   | infinite       | infinite     | perfect      | perfect        |
95| Perfect | perfect        | perfect      | perfect      | perfect        |
96+---------+----------------+--------------+--------------+----------------+
97
98Pour une taille de fenêtre de 2048 instructions ( continue)
99
100Sur les jeux de tests, on notera que le parrallélisme du modèle :
101 - stupide ne dépasse pas 2
102 - pauvre  ne dépasse pas 4
103 - Great   ne dépasse pas 8 sauf pour quelque modèle numérique qui exploite l'analyse des alias
104 - Parfait
105
106Le déroullage de boucles à un effet significatif pour les modèles ambitieux. Sinon, ceci est limite par les load de début de boucle et les stores de fin de boucles (càd réduite par les technique d'alias analysis)
107
108Taille de la fenêtre
109
110La modification de la taille de la fenêtre n'influe que sur les modèles ambitieux grâce à leur technique de prediction améliorer. La plupart des benchmarks ont besoin que d'une fenêtre de 32 inst
111Avec une gestion de fenêtre demanière discrete, cela exploite moins de parrallélisme (- d'inst prete)
112
113Effet des predictions de branchements :
114
115Réduire le niveau de la prédiction de branchment à un impact significatif sur le parrallélisme (Beaucoup moins d'instructions prête à être executer). Mais réduire le niveau de la prédiction de saut n'a d'effet que si la prédiction de branchement est parfaite.
116De plus sur le modèle parfait, l'augmentation de la latence d'un miss à un effet significatif sur le parrallélisme (Car les instructions feteched ne sont plus executé en parralléle car les instructions précédentes sont déjà terminées)
117
118Effet du rennommage de registres et de l'analyse des alias
119
120L'analyse d'alias par inspection n'est pas très performantes (augmente l'ILP de 0.5). L'analyse par compilation n'est performante que pour des programmes utilisant la pile .
121Le nombre de registre pour le renomage de registres n'influe que très peu sur le parallélisme dans un modèle où les prédictions ne sont pas parfaite (à l'exception faite des programmes ayant beaucoup de dépendance)
122
123CONCLUSION
124
125Une bonne prédiction (hard ou soft) est un facteur déterminant pour l'augmentation de l'ILP. Le renommage de registres est important si le compilateur l'exploite.
126Le parrallelism moyen tourne autour de 5 d'après cette étude. (Dans un contexte très favorable => latence des inst = 1, etc...)
127@article{1992_pan,
128  title={{Improving the accuracy of dynamic branch prediction using branch correlation}},
129  author={Pan, S.T. and So, K. and Rahmeh, J.T.},
130  journal={Proceedings of the fifth international conference on Architectural support for programming languages and operating systems},
131  pages={76--84},
132  year={1992},
133  publisher={ACM Press New York, NY, USA}
134}
135@article{1992_yeh,
136  title={{Alternative Implementations of Two-Level Adaptive Branch Prediction}},
137  author={Yeh, T.Y. and Patt, YN},
138  journal={Computer Architecture, 1992. Proceedings., The 19th Annual International Symposium on},
139  pages={124--134},
140  year={1992}
141}
142@techreport{1993_mcfarling,
143  title={{Combining Branch Predictors}},
144  author={McFarling, S.},
145  institution={Technical Report WRL Technical Note TN-36, Digital Equipment Corporation, June 1993}
146}
147@article{1993_yeh,
148  title={{A comparison of dynamic branch predictors that use two levels of branch history}},
149  author={Yeh, T.Y. and Patt, Y.N.},
150  journal={Proceedings of the 20th annual international symposium on Computer architecture},
151  pages={257--266},
152  year={1993},
153  publisher={ACM Press New York, NY, USA}
154}
155@InProceedings{1995_sohi,
156  author =       {Sohi, G.S.     and
157                  Breach, S.E.   and
158                  Vijaykumar, T.N. },
159  title =        {Multiscalar processors},
160  OPTcrossref =  {},
161  OPTkey =       {},
162  OPTbooktitle = {Computer Architecture, 1995. Proceedings. 22nd Annual International Symposium on},
163  OPTpages =     {414-425},
164  OPTyear =      {1995},
165  OPTeditor =    {},
166  OPTvolume =    {},
167  OPTnumber =    {},
168  OPTseries =    {},
169  OPTaddress =   {Santa Margherita Ligure  ,   Italy},
170  OPTmonth =     {22-24 Jun},
171  OPTorganization = {},
172  OPTpublisher = {},
173  OPTnote =      {},
174  OPTannote =    {}
175}
176
17722/02/2005
178
179Paradigme de base : fetch-execute - pointé par un program counter
180                    -> sous entend que les instructions vont être executer dans le même ordre que le programme.
181
182processeur ILP et les compilos désordonne le programme en respectant toutefois les dépendances sur les données et les controles.
183Les dépendances de contrôles peuvent être représenté par un "control flow graph" -> bloc de bases sont représenté par des noeuds et les arcs représentent les flots de contrôles
184
185Overview
186--------
187Objectif : A partir du "control flow graph" (CFG), on peut établir une fenêtre dynamique d'instruction pouvant être extré et lancé.
188
189le CFG peut être vut : - instruction / instruction
190                       - bloc / bloc
191                       - tâche / tâche (thread)
192
193Assignation d'une tâche à une unité d'execution.
194Le multiscalar à une collection d'unité d'execution et un séquenceur s'occupant de distribuer les tâches au UE.
195
196=> Obligation de maintenir l'ordre séquentielle de consommation et de production de données (registre ou accès mémoire)
197 Synchronisation  des accès mémoires
198 - approche conservatrice : Attendre que les accès mémoires des tâches moins spéculatives soit terminer
199 - approche aggréssive    : Réaliser des chargements spéculatifs (vérif dynamique si une tâche moins spéculatifs écrit dans un zone chargé spéculativement.)
200
201Le contrôle et les accès aux données peuvent être spéculative. -> Mécanisme de "Retour en arrière" et de commit
202Gestion circulaire des tâches : La tâche en tête n'est jamais spéculative. On retire les tâches de manière circulaire.
203
204Software
205~~~~~~~~
206 - Le séquenceur a besoin des informations sur le CFG.
207 - Il faut caractériser une tâche par les données consommés et les données produites.
208   |-> Analyse statique par la compilation et création d'un "create mask" indiquant quel registres sont produits par la tâche.
209   |-> Noté quel est la dernière instructions produisant le registre pour pouvoir ensuite le forwarder.
210
211Hardware
212~~~~~~~~
213Hardware -> lancement des tâches vers une unités d'execution
214         -> Maintient d'une execution séquentielle apparente
215
216Le séquenceur détermine l'ordre des tâches. (Charge le descripteur de tâche et à partir de la va charger la tâche, creer les différent masqie et déterminer (ou prédit) la prochaine tâche à executer)
217
218Les accès à la mémoire donnée sont réalisées par le Address résolution buffer (ARB) qui gére la spéculation, dépendance ...
219
220Distribution des cycles pour l'execution
221----------------------------------------
222Relacement d'un calcul si :
223 - utilisation d'une valeur incorrect
224 - prediction incorrect
225
226Pour cela :
227 a) Synchronisation des communications de données
228
229 b) Détermination de la prediction :
230  - Registre pas de problèmes
231  - Accès mémoires : synchronisé explicitement
232Pour les prédictions -> Valider la prédiction au plus tôt :
233  * intruction explicite de validation de prediction
234  * changer la structure de la bcl afin de tester la condition au + tôt
235
236
237Cycle idle          : aucune unité de calculs n'a de tâches à executer
238Cycle de non calcul : les unités ont des tâches mais ne peux pas les executer
239 - Dépendances intra-tâche : dépendance entre instructions d'une même tâche (désordonnancement, cache non bloquant etc ...)
240 - Dépendances inter-tâche : dépendance entre tâches (calculs de la condition de la boucle à la fin du corps de bcl etc ...)
241
242Conclusion
243----------
244Exploite l'ILP. Pour cela utilisation d'une combinaison hardware/software afin d'extraire l'ILP
245 -> division le CFG en tâche
246 -> traverser le CFG de manière spéculative
247 -> Les tâches sont distribués à une collection d'unité d'execution.
248 -> Chaque unité d'execution fetche et execute les instructions de la tâche associées
249 -> Processeurs utilise plusieurs PCs  afin de pouvoir séquencer plusieurs parties différente du CFG.
250@InProceedings{1995_tullsen,
251  author =       {Tullsen, D.M.  and
252                  Eggers, S.J.   and
253                  Levy, H.M.  },
254  title =        {Simultaneous multithreading: Maximizing on-chip parallelism},
255  OPTcrossref =  {},
256  OPTkey =       {},
257  OPTbooktitle = {Computer Architecture, 1995. Proceedings. 22nd Annual International Symposium on},
258  OPTpages =     {392-403},
259  OPTyear =      {1995},
260  OPTeditor =    {},
261  OPTvolume =    {},
262  OPTnumber =    {},
263  OPTseries =    {},
264  OPTaddress =   {Santa Margherita Ligure  ,   Italy},
265  OPTmonth =     {22-24 jun},
266  OPTorganization = {},
267  OPTpublisher = {},
268  OPTnote =      {},
269  OPTannote =    {}
270}
271
27215/02/2005
273
274Présentation du multi-threading.
275-> lancement de plusieurs flots de plusieurs threads dans les unités fonctionnelles du processeurs.
276-> but : augmenter l'utilisation du processeur face au long latence de la mémoire et de ILP limité dans un seul thread
277
278plan :
279 - modèle de SMT
280 - evaluation des perfs (par rapport à un superscalaire et un fine grain multi threading)
281 - hierarchie mémoire dans un SMT
282 - SMT vs CMP
283
284Modification d'un alpha 21164 :
285
286- 10 unités d'execution (4 integer, 2 flottant, 3 load/store et 1 branchement) => complétement pipeliné
287- Issue : 8 inst/cy
288- execution dynamique
289  |-> gestion des dépendance in-order
290  |-> lancement out-order
291- Prediction de bcht
292
293Limitations du super-scalaire
294-----------------------------
295en moyenne, le processeur lance 1.5 inst/cy sur une machine pouvant en lancer 8.
296différente cause :
297 - conflits mémoire, dépendance de donnée (flottant, ou entiere), délai de chargement, bulle de contrôle, mauvaise prédiction, miss de cache et de TLB.
298
299Toutes les cas peuvent être classé suivant deux types d'incidences sur le pipeline
300 - gaspillage verticale   : à un cycle donnée, aucune unité d'exécution ne sera utilisé
301 - gaspillage horizontale : à un cycle donnée, non utilisation d'un créneau de lancement (issue slot)
302
303un corse grain / Fine grain multithreading limite le gaspillage verticale.
304
305Modèles de processeurs
306----------------------
307Chaque modèles à 10 unités fonctionnelles et peut lancer 8 inst/cycles (Donc au max 8 threads)
308
309- Fine-grain multithreading : 1 thread peut lancer des instructions pendant 1 cycle (cycle suivant commutation)
310- SMT : full issue : les 8 threads sont en compétitions sur chaque issue slots à chaque cycle
311- SMT : N issue : chaque threads peut lancer un maximum de N inst/cycle (full issue = 8)
312- SMT : Connection limité : Chaque thread hardware est directement connecter à une unité fonctionnelle de chaque type (si il y a 8 threads et 4 unités fonctionnelles d'un type, alors chaque unité fonctionnelle est connecté à 2 threads)
313
3143 facteurs :
315 1- # de threads en compétition
316 2- # d'instructions lancé/thread
317 3- # d'UF visible/thread
318
319augmente   Port registre | dépendance interinst | logique forward | ordonnancement inst
3201                                                 + complexe        + complexe          -> les ufs ont plus destination possible pour les résultats
321                                                                                        -> plus d'instructions devant être routé
3222          + complexe      + complexe                                                   -> plus d'instruction à lancer (donc chercher les opérandes)
323                                                                                        -> plus d'instruction à analyser (augmentation de la fenêtre de chaque thread)
3243          + complexe      + complexe             + complexe        + complexe          -> l'ordonnancement devient de + en + dépendant d'autre FU
325                                                                                        -> une UF qui est privé à moins de destination possible
326
327Caches
328------
329Le partage des caches et des TLB est néfastes sur les performances.
330Lors du partage des caches entre threads :
331 - Il y a virtuellement moins d'espace par threads
332 - Il faut des caches non bloquants
333
334-> Cache privé afin d'avoir des caches dédié à un thread (le cache est partionné en NB\_THREAD parties) Bon pour les Icaches (Pas d'évincement d'une ligne d'instruction par un autre thread)
335-> Cache partagé : Tous les threads ont accès au même cache => peu de contrôle, bon pour les Dcaches car 1 seules mécanisme de cohérence mémoires à implémenter.
336
337SMT vs CMP
338----------
339Ressemblance :
340Duplication des registres, multiple unité fonctionnelle, grand nombre d'instruction lancé par cycle
341Différence :
342les ressources ne sont pas partitionné et ordonnancé. Ils ont alloué de manière statique à un thread (ou un groupe de threads)
343
344Le SMT surpasse le CMP à complexité égal :
345 -> Un SMT 8 threads - 8 issues avec 10 FU surpasse de 24\% 8 proc 1 issue avec 4 UFs
346
347 * performance avec peu de thread (car partage des ufs)
348 * granularité et flexibilité
349
350@InBook{         1996_mudge,
351  ALTauthor =    {trevor mudge},
352  ALTeditor =    {},
353  title =        {ACM Computing Surveys (CSUR)},
354  chapter =      { Special ACM 50th-anniversary issue: strategic directions in computing research},
355  publisher =    {ACM Press   New York, NY, USA },
356  year =         {1996},
357  OPTkey =       {},
358  OPTvolume =    {},
359  OPTnumber =    {},
360  OPTseries =    {},
361  OPTtype =      {},
362  OPTaddress =   {},
363  OPTedition =   {},
364  OPTmonth =     {december},
365  OPTpages =     {671 - 678},
366  OPTnote =      {},
367  OPTannote =    {}
368}
369
37001/12/2004
371
372Architecture des ordinateurs est un degré significatif sur les activités de l'ingénieurs pour trouver une solution à un problem avec une contrainte de coûts.
373
374Tendance -> a) resulte d'un apport de la technologie (ex. techno micronique et submicronique)
375         -> b) resulte d'un contexte d'application (ex. Multi processings => ajout de mécanisme de tâches)
376a) Défi : Consommation (Au premier ordre conso est proportionnel à la fréquence, loi de moore : Double la fréquence tous les Deux ans donc double la conso)
377          Latence : La fréquence d'horloge croit plus vite que la technologie des Rams : f(CPU) +50\%/an , vitesse(DRAM) +10\%/an
378b) application guide les architectures : Les processeurs deviennent de + en + grand public  (jeux 3D, multimédia etc..). Avant ils étaient surtout utilisé par des militaires.
379
380L'auteur voit 3 challenges pour la prochaine décade (càd jusqu'en 2006)
381-> Puissance et taille
382-> Performance
383-> Complexité
384
385Axes de recherches
386-> locality
387-> Paralélisme
388-> Prédictabilité
389
390Paralélisme au niveau instructions (ILP) -> Approche VLIW et superscalaire
391            au niveau application  -> Simultaneous multithreadings (SMT)
392
393l'idée de ce SMT viens du processeur HEP devellopper par denelcor vers la fin des années 70
394
395Hierarchie mémoire => nécessité de masquer la latence des accès mémoires (technique de prefetching => utilisation de la bande passante innoccupé en vue d'aller chercher des instructions potentiellement utiles)
396
397Evolution des benchmarks pour prendre en compte des évolutions de marché pour le processeurs (c'est à dire bench "multimédia")
398@InProceedings{,
399  author =       { Kunle Olukotun  and
400                   Basem A. Nayfeh and
401                   Lance Hammond   and
402                   Ken Wilson      and
403                   Kunyung Chang       
404                 },
405  title =        {the case for a single-chip multiprocessor},
406  OPTcrossref =  {ISBN:0-89791-767-7},
407  OPTkey =       {},
408  OPTbooktitle = {Proceedings of the seventh international conference on Architectural support for programming languages and operating systems},
409  OPTpages =     {2-11},
410  OPTyear =      {1996},
411  OPTeditor =    {},
412  OPTvolume =    {},
413  OPTnumber =    {},
414  OPTseries =    {},
415  OPTaddress =   {Cambridge, Massachusetts, United States},
416  OPTmonth =     {},
417  OPTorganization = {},
418  OPTpublisher = {ACM Press},
419  OPTnote =      {},
420  OPTannote =    {}
421}
422
42324/01/2005
424
425Opposition entre un mono-processeur compléxe et des multi-processeurs simple.
426
427Comparaison entre un processeur super scalaire 6 voies à ordonnancement dynamique et 4 processeurs superscalaire 2 voies.
428Un superscalaire est décomposé en 3 phases :
429
430                     |----| <-> E
431           |----| -> |    | <-> E
432ICache <-> | IF | -> | IR | <-> E
433           |----| -> |    | <-> E
434                     |----| <-> E
435
436- Instructions fetch => fournir le maximum d'instruction prête.
437  Limitation :
438   * Branchement mal prédit (degré de spéculation)
439   * Instruction mal aligné
440   * Miss de caches
441- Issue and retirement
442  Rennommage :
443   * Table de mappage (nb_opérande * nb_voie_scalaire   ports de lecture)
444   * Reorder buffer   (nb_bit_codage_registre * Taille_file_instruction_issue * nb_opérande * nb_voie_scalaire
445- Execution
446  Augmentation du temps de cycle lors de l'écriture si beaucoup de voie scalaire
447  Compléxité du by-pass (augmentation quadratique en fonction du nombre d'unité d'execution)
448
449Single-Chip Multiprocessor
450--------------------------
4511) -> Les OS actuelles sont multi processus => fort parrallélisme
4522) -> Les processus sont également multi thread
4533) -> Les appli mono thread peuvent être découper en thread de manière hard. assez contraignant.
454
455Architecture pour comparaison
456-----------------------------
457
458* Super Scalaire => R10000 de degré 4 à 6. (Augmentation des caractéristiques pour arriver à 430 mm2)
459* Multi proc     => 4 * R10000 de degré 2  (Diminution   des caractéristiques pour arriver à 430 mm2)
460
461=> Même surface de silicium pour les deux architectures.
462
463Performance
464-----------
465Gel d'un proceeseur dut au miss de cache.
466Superscalaire -> execution désordonné, spéculative, cache non bloquant. Masquage des couts de Miss.
467
468Mesure de performance : Gain par rapport à la version MP - 1 proc.
469- Sur les applications avec peu de parallélismes, le superscalaire est plus performant car exploite mieux l'ILP.
470- Sur les applications avec un grain fin de parallélisme et beaucoup de communication, l'approche SS et MP est équivalente (Les deux approches exploite le parrallélisme grain fin)
471- Sur les applications avec un large degré de parallélisme, le multi proc prend l'avantage. Car le parrallélisme dépasse la fenêtre du supersclaire.
472
473
474=> l'approche SS est limité par l'ILP du programme, et le matériel nécessaire (lancement dynamique et banc de registres) augmente de manière quadratique le matériel et donc le temps de cycle.
475
476@InProceedings{ 1996_tullsen,
477  author =       {Dean M. Tullsen   and
478                  Susan J. Eggers   and
479                  Joel S. Emer      and
480                  Henry M. Levy     and
481                  Jack L. Lo        and
482                  Rebecca L. Stamm},
483  title =        {Exploiting choice: instruction fetch and issue on an implementable simultaneous multithreading processor},
484  OPTcrossref =  {},
485  OPTkey =       {},
486  OPTbooktitle = {Proceedings of the 23rd annual international symposium on Computer architecture},
487  OPTpages =     {191-202},
488  OPTyear =      {1996},
489  OPTeditor =    {},
490  OPTvolume =    {},
491  OPTnumber =    {},
492  OPTseries =    {},
493  OPTaddress =   { Philadelphia, Pennsylvania, United States},
494  OPTmonth =     {},
495  OPTorganization = {},
496  OPTpublisher = {ACM Press},
497  OPTnote =      {},
498  OPTannote =    {}
499}
500
50116/03/2005
502
503Préentation d'un architecture SMT suivant 3 contraintes :
504 - Minimiser l'impact par rapport à une architecture Superscalaire
505 - Minimiser la perte de performance lors de l'execution de programme monothread
506 - Avoir un gain de performance lors de l'execution de programme multithread
507
508Architecture SMT
509----------------
510L'article dérive un Supersclaire classique
511(Fetch unit, Decode, Register renaming, wait\_queue, lecture des registres, unités d'executions, commit).
512Les instructions sont lancées dans le désordre, retiré dans l'ordre
513
514Changement minimum à apporter :
515 - un pc/thread et un thread séquenceur
516 - une pile de retour séparé (pour la prédiction de retours)
517 - Par thread : mécanisme pour retirer les instructions, file d'instructions à retirer et mécanisme de trape
518 - un thread id pour le BTB
519 - un large banc de registres
520
521Note : les instructions présente dans la file d'executions sont partagé par plusieurs threads donc grâce au mécanisme de renommage, on ne sélectionne que les instructions indépendante
522
523Conséquence :
524
525* Un pc est prioritaire (choisit de manière round robin)
526* Taille du banc de registres conséquents impose l'augmentation de la profondeur du pipeline.
527
528Performance
529~~~~~~~~~~~
530L'architecture gère 8 threads.
531
532Remarque : Si un seul thread est utilisé, il y a une perte de 2\% sur l'IPC par rapport au superscalaire de référence dut à l'augmentation du pipeline.
533
534Goulot d'étranglement :
535- Taille des files d'instructions : à cause de l'augmentation de l'IPC, elle deviennent souvent pleines
536- l'étage ifetch n'a pas la connaissance que les files sont pleines donc continue à fétché des instructions.
537- manque de parrallélisme : à cause des fausses instructions.
538
539Fetch Unit
540----------
541Il y à un partage de la bande passante de fetch avec tous les threads.
542 -> le fetch unit peut choisir parmit plusieurs source, donc incrémenter l'utilisation de la bande passante (car si un thread est bloqué, les autres ne le sont pas forcément)
543 -> le fetch unit peut choisir pour quels threads travailler (si un thread n'est pas bloqué mais qu'il réalise beaucoup de miss de spéculation, alors il est peut profitable de lui chargé des instructions qui auront de fortes chances d'être fausse)
544
545Définition de plusieurs stratégie de fetchs, classement suivant 3 critères :
546
547 1) Partionnement du l'unité d'ifetch parmis les threads
548 2) Efficacité de l'unité de fetch (Qualité des instructions chargés)
549 3) Disponiblitité de l'unité de fetch (Elimination des conditions de blockage de l'unité)
550
5511) Partitionnement
552~~~~~~~~~~~~~~~~~~
553L'unité fetch charge jusqu'a 8 instructions par cycle.
554Mais comme les blocs de bases sont plutôt petit, il est difficille d'exploiter complétement la bande passante utilement pour un thread.
555 -> Partage des 8 instructions parmit plusieurs threads. Le cache reste identique mais est découpé en plusieurs banc, deux threads peuvent intérrogé deux bancs différents
556
5571.8 (1 threads ayant 8 instructions) -> blocs trop petits
5582.4 - 4.2                            -> idéal
5598.1                                  -> Il n'y a pas assez de threads non bloqué
560
561Ajout de matériel : Mutipléxeur d'adresse, plusieurs buses d'adresse; logique de sélection des tristates de sorties, logique de conflit de bancs, duplication de la logique de calcul des hit/miss
562=> Augmente la latence du cache mais réduit la latence du bloc decode et rename (car moins de dépendance à calculer)
563
564autre vision :
5652.8 -> le premier thread est prioritaire et peut charger jusqu'a 8 instructions, s'il n'y arrive pas un autre thread oeut tenter de combler le manque.
566c'est la méthode la plus performante car elle permet de gère la bande passante parmit plusieurs threads et d'avoir un partitionnement flexible.
567
5682) Algorithme
569~~~~~~~~~~~~~
570Algorithme de décision sur le thread prioritaire : Déterminer le meilleur "thread"
571 a) probabilité de ne pas charger un faux chemin
572 b) temps prit par l'instructions pour être executable
573
574* Round-robin
575* BRCOUNT     -> Favorise le thread qui à le moins de branchement non résolue (améliore a)
576* MISSCOUNT   -> Favorise le thread qui à le moins de miss de donnée (améliore b)
577* ICOUNT      -> Favorise le thread qui à le moins d'instructions dans les étages D R IQ (IQ = Instruction queue) (améliore b)
578* IQPOSN      -> Donne la plus basse priorité au thread la plus proche de la tête des files d'attente (améliore b) (la plus vieille instruction) (Ne requiert pas de compteur)
579
580ICOUNT et IQPOSN sont les deux algos les plus performants.
581
5823) Disponibilité
583~~~~~~~~~~~~~~~~
584Condition de blocage du fetch unit : IQ full, Icache miss.
585
586* BIGQ -> Augmentation de la taille du IQ sans augmenter la taille de la zone de recherche
587* ITAG -> Scrute le cache un cycle plutôt est on sélectionne que les threads qui ne vont pas faire de miss
588
589Choix de l'instruction à lancé
590------------------------------
591
592Superscalaire : le degré de spéculation est croissant avec sa position dans l'IQ
593Dans un SMT, ceci n'est pas vrai.
594
595* OLDEST
596* OPT\_LAST     -> Optimiste
597* SPEC\_LAST    -> Spéculatif en dernier (les instructions sont spéculatifs sont prioritaires)
598* BRANCH\_FIRST -> Branchement sont prioritaires (afin de connaître si un branchement est spéculatif)
599 
600Les performances n'influe pas énormément -> la bande passante du lancement n'influe pas sur les performances.
601
602Goulot d'étranglement
603---------------------
604Bande passante du lancement      -> non
605Taille de la file d'instructions -> non
606Bande passante du fetch          -> oui : la fréquence des sauts et les problèmes d'alignements du pc ne permet pas d'utiliser entièrement la bande passante.
607Prédiction de branchement        -> non : Le SMT est plus tolérant au mauvaise prédiction qu'un superscalaire classique. plus il y a de threads, plus ils seront entrelacés donc moins d'instructions seront chargé après un branchement.
608Execution spéculative            -> non, mais un SMT bénéficie beaucoup moins de l'apport de l'execution spéculative.
609Sortance de la mémoire           -> non
610Taille du banc de registres      -> oui : Temps d'accès devient limitant
611
612
613
614
615
616@InProceedings{1996_wallace,
617  author =       {Wallace, S.     and
618                  Bagherzadeh, N.    },
619  title =        {A scalable register file architecture for dynamically scheduled processors},
620  OPTcrossref =  {},
621  OPTkey =       {},
622  OPTbooktitle = {Parallel Architectures and Compilation Techniques, 1996., Proceedings of the 1996 Conference on},
623  OPTpages =     {179-184},
624  OPTyear =      {1996},
625  OPTeditor =    {},
626  OPTvolume =    {},
627  OPTnumber =    {},
628  OPTseries =    {},
629  OPTaddress =   {Boston, MA, USA},
630  OPTmonth =     {Oct},
631  OPTorganization = {},
632  OPTpublisher = {},
633  OPTnote =      {},
634  OPTannote =    {}
635}
636
63701/04/2005
638
639Abstract
640--------
641
642A major obstacle in designing dynamically scheduled processors is the size and port requirement of the register file. By using a multiple banked register file and performing dynamic result renaming, a scalable register file architecture can be implemented without performance degradation. In addition, a new hybrid register renaming technique to efficiently map the logical to physical registers and reduce the branch misprediction penalty is introduced. The performance was simulated using the SPEC95 benchmark suite
643
644@article{burger1997sts,
645  title={{The SimpleScalar tool set, version 2.0}},
646  author={Burger, D. and Austin, T.M.},
647  journal={ACM SIGARCH Computer Architecture News},
648  volume={25},
649  number={3},
650  pages={13--25},
651  year={1997},
652  publisher={ACM Press New York, NY, USA}
653}
654@InProceedings{1997_palacharla,
655  author =       {Palacharla, S.  and
656                  Jouppi, N.P.    and
657                  Smith, J.E.   },
658  title =        {Complexity-Effective Superscalar Processors},
659  OPTcrossref =  {},
660  OPTkey =       {},
661  OPTbooktitle = {Computer Architecture, 1997. Conference Proceedings. The 24th Annual International Symposium on},
662  OPTpages =     {206 - 218},
663  OPTyear =      {1997},
664  OPTeditor =    {},
665  OPTvolume =    {},
666  OPTnumber =    {},
667  OPTseries =    {},
668  OPTaddress =   {},
669  OPTmonth =     {Jun},
670  OPTorganization = {},
671  OPTpublisher = {},
672  OPTnote =      {},
673  OPTannote =    {}
674}
675
67607/02/2005
677
678=> Perte de performances du au matériel très couteux.
679
6802 directives pour fabriquer un mono processeurs :
681 - Le compléxifier le matériel afin d'extraire encore plus le nombre d'instructions lancée
682 - Le rendre plus simple afin d'avoir une plus grande fréquence d'horloge
683
684Source de compléxité
685--------------------
686
687Modèle de pipeline typique :
688
6891) FETCH             Lecture de plusieurs instructions, prediction de branchement
6902) DECODE            Décodage d'instruction
6913) RENAME            renommage de registre, dispatchement dans la fenêtre d'isntructions
6924) SELECT/ISSUE      Une fois qu'une instruction à ces opérandes => prête à être lancé -> Envoie vers l'UF approprié
6935) REG READ          Prise des opérandes / bypass
6946) EXECUTE/BY PASS   Execution
6957) DCACHE ACCESS     Accès mémoire
6968) REG WRITE/COMMIT  Accès dans les registres et valdiation (instruction non spéculatif et non érroné)
697
698Dépendance de complexité :
699- Largeur/profondeur de la fenêtre de lancement
700- Structure "Dispatch et issue"
701- Longeur des fils dans ces structures qui se mettent à jour par broadcasting
702
703-> Logique de renommage
704-> Logique de wake up (détermine quel instructions est prête ou non)
705-> Logique de selection
706-> Logique des by-pass
707
708Détails
709-------
710
711Logique de renommage
712~~~~~~~~~~~~~~~~~~~~
713Accès à une table de mappage pour diriger le numéro de registres logique vers le numéro de registres physique
714Accès multiple (plusieurs instructions)
715-> Logique de vérification de dépendances
716
7172 schémas : - schéma RAM : Une table de NB\_REG\_LOG pointant sur les registres physiques
718            - schéma CAM : Une table de NB\_REG\_PHY pointant vers les registres logiques
719Trename   = Tdecode + Twordline + Tbitline + Tsenseamp
720          = cst0 + cst1*IW + cst2*IW²
721
722Twordline (proportionnel à la taille de l'adresse du registre physique (environ 8) )
723Tbitline  (proportionnel au # de registre logique (souvent 32) )
724Tsenseamp fonction de bitline delay
725cst sont donnée par la technologie
726
727=> croit linéairement avec la taille de la fenêtre
728
729Logique de wakeup
730~~~~~~~~~~~~~~~~~
731A chaque résultat produit, a tag associé au résultat est diffusé à toutes les instructions contenus dans la fenête de lancement (IW).
732Chaque instructions compare le tag avec ses opérandes sources
733Si la comparaison est positive => mise à jour du bit ready de(s) l'opérande(s) (Quand tous les bit sont positionnés => instructions prête au lancement)
734
735Il y a IW tag soit NB\_OPERANDE x IW comparaions
736
737Twakeup = Ttagdrive + Ttagmatch + Tmatch\_or
738        = c0 + (c1 + c2 * IW)*WINSIZE + (c3 + c4*IW + c5*IW²)*WINSIZE²       
739
740(IW => nombre d'instruction en attente d'être executer)
741(WINSIZE => nombre d'instruction allant être executé)
742
743Incrémenter le nombre de ligne va incrémenter le nombre de comparaisone et la puissance nécessaire pour atteindre ces comparaisons.
744Seul le Ttagdrive dépend de la taille de fenêtre de lancement (fan-out + élevé car + de comparateur)
745
746Logique de selection
747~~~~~~~~~~~~~~~~~~~~
748Choix des instructions à executer parmit la IW
749 -> Plusieurs types d'instructions
750 -> Plusieurs types d'unités fonctionnelles pouvant acceptés une instructions de plusieurs types d'instructions.
751
752Un signal REQ par instruction contenant dans la IW (actif si instruction prête)
753Un signal GRANT est émit par le bloc de sélection (1 par signal de requête) => indique que l'instructions est lancé dans une unité fonctionnelle.
754Politique de selection -> en général FIFO, ou la plus vieille (C'est à dire la plus en bas de la fenêtre d'instruction)
755
756=> Arbre d'arbitrage.
757 2 phases : 1) Propagation de la requête jusqu'à la l'unité fonctionnelle
758            2) Propagation de la réponse (GRANT) jusqu'a toute les req d'instructions
759
760Tselection = c0 + c1 * log4(WINSIZE)
761
762log4 car les noeuds de l'arbre d'arbitre accepte 4 requêtes.
763
764Logique des bypass
765~~~~~~~~~~~~~~~~~~
766Si complétement bypassé, il faut : 2*IW²*S (S est le nombre d'étage)
767-> Un fils par unité fonctionnelle
768-> Tous les unité fonctionnelle (ainsi que le banc de registres) doivent avoir un bloc mux
769-> banc de registres à autant 2*UF ports de lecture et UF ports d'écriture
770-> Bloc mux à UF ports d'entrée et en sorties ce sont des bus attaqués pas UF signaux.
771-> Sans oublier les compateurs dans chaque alu
772
773Tbypass = 0.5*R*C*L²   => Dépend principalement de la longueur des fils.
774
775Analyse des résultats
776---------------------
777
778IW  Window-size Trename Tselection Tbypass
779
780(0.18)
7814   32          351.0   578.0      184.9
7828   64          427.9   724.0      1056.4
783
784-> La selection (logique de fenêtrage) et les bypass posent des problèmes de scalabilités.
785=> Toutes les autres structures ne posent pas de pbl d'horloge, où s'il y en a, alors ils peuvent être pipeliné.
786
787Si on découpe l'étage Wakeup (Chercher les opérances) et selection (Chercher une ALU disponible), alors il y aura au meilleur des cas au moins un cycle de gels entre deux instructions dépendante consécutive.
788
789... | WUP | SEL | EXE | ...                add r3,r2,r1
790                   | (Bypass)
791......... | WUP | WUP | SEL | EXE | ...    add r5,r4,r3
792
793Proposition d'architecture
794--------------------------
795Remplacement de la fenêtre de lancement par une architecture "dependance-based"
796Clusterisation des by-pass.
797
798=> architecture "dependance-based"
799~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
800Exploitation des dépendances instraséques entre instructions.
801Fenêtre de lancement découpé en plusieurs fifos. Les instructions dépendantes sont routés vers la même fifos.
802Execution In-order des instructions dépendante entre elles. Execution désordonné des autres flots d'instructions.
803Il n'y que les instructions de têtes à aller verifier le banc de registres.
804
805Besoin d'une table(SRC\_FIFO)  où les dépendances des instructions sont maintenus à jour
806SRC\_FIFO(num reg log) -> numéro fifo
807
808=> Clusterisation des by-pass
809~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
810Décomposé les unités fonctionnelles en cluster.
811Il y a 2 types de bypass
812 - intra cluster (dans le même cycle)
813 - inter cluster (peut nécessité plusieurs cycles)
814=> N copies du banc de registres : 1 pour chaque cluster
815
816Conclusion
817----------
818Les techniques diminues faiblement (au max 12\%) le CPI mais augmente sensiblement la fréquence d'horloge. Au total, la performance global est meilleur.
819
820Autre technique :
821
8221 cluster - 1 window (Superscalar basique)
823
824-> Window -> Cluster0
825
826
8272 cluster - Fifo dispatch
828
829     -> Cluster0
830   /
831->
832   \
833     -> Cluster1
834
8352 cluster - windows - Choix du cluster : exec
836
837Instruction stocké dans une fenêtre global puis assigne à un cluster
838
839             -> Cluster0
840           /
841-> Windows
842           \
843             -> Cluster1
844
8452 cluster - windows - Choix du cluster : dispacth
846
847
848     -> Windows -> Cluster0
849   /
850->
851   \
852     -> Windows -> Cluster1
853
8542 cluster - windows - Choix du cluster : random
855
856Choix des clusters aléatoire
857     -> Windows -> Cluster0
858   /
859->
860   \
861     -> Windows -> Cluster1
862
863@InProceedings{ 1998_hammond,
864  author =       {Lance Hammond and
865                  Mark Willey   and
866                  Kunle Olukotun},
867  title =        {},
868  OPTcrossref =  {SSN:0163-5980},
869  OPTkey =       {},
870  OPTbooktitle = {Proceedings of the eighth international conference on Architectural support for programming languages and operating systems},
871  OPTpages =     {58-69},
872  OPTyear =      {1998},
873  OPTeditor =    {},
874  OPTvolume =    {},
875  OPTnumber =    {},
876  OPTseries =    {},
877  OPTaddress =   { San Jose, California, United States},
878  OPTmonth =     {},
879  OPTorganization = {},
880  OPTpublisher = {ACM Press},
881  OPTnote =      {},
882  OPTannote =    {}
883}
884
88527/01/2005
886
887Thread level speculation
888------------------------
889Technique autorisant l'execution paralléle d'une application séquentiel (donc à pour but de tourner sur un multi processeur).
890=> Mécanisme fonctionnant bien pour des applications avec un grain moyen de parallélisme de boucle. Mais quand la granularité de parallélisme devient trop petite, l'overhead devient trop couteux.
891
892DATA Spéculatation
893~~~~~~~~~~~~~~~~~~
894
895Processeur superscalaire avec execution désordonné :
896 -> réordonne les instructions ALU (renommage de registre , ordonnancement dynamique).
897Pas de réordonnancement des accès mémoires si les adresses ne sont pas connut on sont connus et dépendante.
898
899Data spéculation : On execute des loads qui ce situe après des stores dont l'adresse n'est pas encore connus.
900 -> S'il y a une vrai dépendance => le store est prioritaire et le load (et chaque execution en dépendant) sont ré-executés.
901
902Le programmeurs / Compilateur peut diviser un programme séquentiel en plusieurs threads. Or les dépendances de registres et de mémoires imposent beaucoup de contraintes.
903=>Si les dépendance ne peut pas être connus lors de la compilation (exemple des pointeurs en C) alors impossibilité  de diviser le code ou alors placer des routine de synchronisation logicielle.
904
905Avec le thread level data speculation (TLDS)
906=> le compilo divise seulement le programme en threads.
907=> Chaque thread à un numéro, celui-ci indique le numéro correspondant à l'ordre dans lequel il devrait être s'il été executer en séquence.
908=> La spéculation hardware d'occupe des vrais dépendances entre les accès mémoires
909
910Les écritures deviennent des points de synchronisations.
911
912Chaque processeur execute un thread :
913On classe les procs par rapport au numéro que le thread possède.
914Celui avec le numéro le plus faible (executer sur le processeur de tête) est donc non spéculatif. Les autres sont de + en + spéculatif.
915
916Temps 0 : CPU i   -> R
917Temps 1 : CPU i+1 -> R
918Action  : -
919
920Temps 0 : CPU i   -> R
921Temps 1 : CPU i+1 -> W
922Action  : renomage dans i+1
923
924Temps 0 : CPU i   -> W
925Temps 1 : CPU i+1 -> R
926Action  : envoie de la donnée écrite par i vers i+1
927
928Temps 0 : CPU i   -> W
929Temps 1 : CPU i+1 -> W
930Action  : Ecriture de i puis renommage de i+1 et écrasage de la donnée
931
932Temps 0 : CPU i+1 -> R
933Temps 1 : CPU i   -> R
934Action  : -
935
936Temps 0 : CPU i+1 -> R
937Temps 1 : CPU i   -> W
938Action  : Renommage de i+1
939
940Temps 0 : CPU i+1 -> W
941Temps 1 : CPU i   -> R
942Action  : RAW : i+1 redemarré
943
944Temps 0 : CPU i+1 -> W
945Temps 1 : CPU i   -> W
946Action  : Renommage de i+1, + tard le forward de i sera ignoré
947
948Le matériel de spéculation des donnés doit fournir :
949 - Détection des vrai dépendances mémoire dans l'ordre.
950 - Possibilité de retour en arrière et ré-execution du threads
951 - Bufferisation des écritures jusqu'a ce qu'elle ne sont plus spéculative (Ou supprimé)
952
953Décomposition en thread spéculatif
954----------------------------------
955
9562 architectures différentes :
957 - The Multiscalar architecture => découpage en tâche arbitraire, allocation des tâche dans l'ordre sur un anneau de processeur
958 - The TLDS architecture => support minimum pour la spéculation, principalement controlé par logiciel.
959
960Solution apportée ici :
961Combinaison de l'approche hard/Soft (~TLDS)
962-> Utilisation du support du hardware pour diviser le programme en thread et les distribuer sur les différents processeurs.
963  |-> Coprocesseur de spéculation
964
965Comment diviser un prcess en threads?
966 -> utilisation d'appel de sous fonction
967   -> Un autre processeur va executer de manière spéculatif la suite du programme principal
968 -> Boucle (Ceux indiqué par le compilateur)
969   -> Les différentes itérations sont distribuées sur les différents processeurs
970
971Subroutine Thread
972~~~~~~~~~~~~~~~~~
973
974Spéculation de fonction géré par une list chainé de threads actifs ordonnée du moins au + spéculatif
975Lors d'un appel de fonction, envoie d'un message au autre processeur.
976
9771) Le processeur alloue un register passing buffer (RPB) pour le thread nouvellement crée.
9782) Sauvegarde des registres (devant être sauvegarder lors d'un appel systems) puis prédition de la valeur retourné
979  alogo repeat least return value (car en C -> beaucoup de void fonction ou de retour d'erreur, ou imprédictible)
9803) Insertion du buffer dans la list des buffer actif juste après le process courent (pour garder l'ordre par spéculation)
9814) Attribution d'un processeur à ce nouveau thread (soit un libre, soit un executant le plus spéculatif des threads)
982
983Ceci est réaliser dans l'exception handler (Donc chaque appel à une sous fonction génére une exception)
984Si l'appel de fonction à une valeur de type imprédictible, alors on ne considère pas la spéculation.
985
986Au retour d'un appel de fonction :
9871) Le processeur attend jusqu'a ce qu'il soit le processeur de tête (donc sont code devient non spéculatif et deplus il n'est pas en conflit avec les autres thread)
9882) La valeur retourné est comparé avec la une valeur prédite. Si miss => Toute les threads sont relancés
9893) Le RPB est remis dans la free-list, le thread suivant devient celui de tête
9904) L'ancien processeur de tête va executer un thread (donc devient le plus spéculatif)
991
992Loop itération Thread
993~~~~~~~~~~~~~~~~~~~~~
994
995Un boucle spéculatice est préceder d'une verification pour savoir s'il est avantageux ou non de l'exécuter de manière spéculative.
996Une itération de boucle est donnée a chaque proc disponible.
997
998A la fin d'une itération -> validation, l'itération suivante devient le CPU de tête.
999Ceci jusqu'à ce que la condition de terminaison soit trouvée (dans ce cas invalidation de tous les autres threads)
1000
10012 manières de traiter les boucles :
1002 - Si la boucle est longue : rebouclage des RPB
1003 - sinon Schéma habituel : insertion de 4 RPB (1 pour chaque proc) => Overhead moins couteux mais méthode peu fléxible
1004
1005Taille des Threads
1006~~~~~~~~~~~~~~~~~~
1007
1008Facteur de Limitations :
10091) Taille limité des buffers : Il n'y a que le CPU de tête qui réalise des mise à jour de la mémoire. Les CPU spéculative ne peuvent commiter leur buffer que s'il deviennent buffers de têtes.
10102) Vrai dépendance : Les grands threads augmente la probabilité de vrai dépendance
10113) Longueur des redémarrages : Un redémmarrage sur un grand thread augmente la charge de travail (données à défaire etc..)
10124) Overhead : Les très petits threads ont un coût d'overhead trop élevé.
1013
1014=> Violation counters : élimine les threads avec trop de dépendances
1015=> Thread timers : élimine les threads trop long
1016=> Stall timers : élimine les threads trop souvent bloqués (voir plus bas)
1017
1018Exception
1019~~~~~~~~~
1020Si un thread réalise une exception, ou un appel système, alors celui-ci est bloqué.
1021
1022Speculation Control Coprocessor
1023~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1024=> Implémenter dans le Coprocesseur2 du mips
1025-> Fonction accèder par software
1026-> Contient la table des vecteurs d'exceptions
1027
1028Hardware Support
1029----------------
1030
1031Sur le multiscalar processor => ARB (Dcache partagé) associé avec un traceur de reférence mémoire spéculative.
1032Sur le TDLS processor        => Protocole plus simple
1033
1034Ici :
1035 - Modification dans le Dcache : Sur chaque tag d'une ligne de cache, ajout de qq bits (modified bit, pre-invalidate bit) (Read, Write bits => pour détecter les vrai dépendance, un bit par mots contenu dans la ligne)
1036 - Buffers dans le cache L2    : Bufferisation des écritures encore spéculative. Une fois qu'il ne sont plus spéculative, ordre venant du processeur pour rentre permannent les changement. Le buffer est dépiller par ordre d'arriver et écrit dans le L2. Le buffer full est détecter par chaque proc qui possède une copie local des Tags du buffer couramment utilisé.
1037Lors d'un load  spéculatif , On va lire le DCACHE, puis on va lire dans le buffer courrant au proc, puis on remonte tous les buffer appartement a des process moins spéculative (jusqu'a la tête) et enfin on va lire dans le L2 cache. (Tous est vérifier en parralléle)
1038Lors d'un sotre spéculatif , il peut se produire : écriture dans le DCACHE (demander par le proc courant), une invalidation par un cpu moins spéculatif (vrai dépendance), une pré invalidation venant des cpu plus spéculatif (vérification). Si proc devient la tête : Drainage du buffer.
1039@TechReport{1998_olukotun,
1040  author =       {Lance Hammond and
1041                  Kunle Olukotun},
1042  title =        {Considerations in the design of hydra : a multiprocessor-on-a-chip microarchitecture},
1043  institution =  {Stanford University},
1044  year =         {1998},
1045  OPTkey =       {CSL-TR-98-749},
1046  OPTtype =      {},
1047  OPTnumber =    {},
1048  OPTaddress =   {},
1049  OPTmonth =     {February},
1050  OPTnote =      {},
1051  OPTannote =    {}
1052}
1053
105424/01/2005
1055
1056Décrit de manière détaillée :
1057- Hiérarchie mémoire
1058- Bus internes
1059- Contrôle et arbitrage
1060
1061Hierarchie Mémoire
1062~~~~~~~~~~~~~~~~~~
1063L1 - On chip - I D séparé , et 1 couple pour chaque proc
1064L2 - On chip - Partagé avec les 4 processeurs
1065L3 - Off chip
1066Mémoire principale - Off chip
1067
1068L1 unifié pour les 4 procs :
1069 - Trop de ports R/W
1070 - Cache L1 devient "plus gros" pour rendre les même services
1071 - Logique entre le cache et le L1 (en cas d'accès à la même case)
1072 - Trop de logique => Ne réponds pas en 1 cycle
1073
1074L1 séparé
1075 - Obligation d'un mécanisme de snoop
1076
1077Limitation d'avoir un L3 off chip :
1078 - RAM rapide sont onéreuse
1079 - Demande beaucoup de plots
1080 - Electriquement non triviale
1081
1082Communication
1083~~~~~~~~~~~~~
10842 bus internes :
1085 - Bus Read/Replace
1086 - Bus Write-through
1087
1088Gérer de manière pipeliné, demande 1 cycle pour l'arbitrage afin d'avoir un débit d'un accès par cycle
1089
1090Bus Read/Replace  : 256b de large (1 ligne de cache L1 / L2). Liaison entre le L2, et le L3 ainsi que tous les L1 (en lecture uniquement). Bus avec un faible traffic (dans leur exemple : occupation inférieur à 50\% pour les tests les plus gourmand en accès mémoires)
1091
1092Bus Write-through : 64b de large, de tous les caches L1 vers le L2. Cohérence du cache L1 sur snoop de ce bus (pas le read/replace bus) , Invalidation sur écriture (Un seul cache est propriétaire d'un bloc). Les écritures de tous les procs se retrouvent séquencer.
1093
1094L'utilisation du write-bus n'est pas scalable :
1095 * write-bus multiple (Ou 1 seul rapide) => Ports supplémentaires pour le L1 Tags, snoop et invalidation multiple par cycle. Dans le L2 => plusieurs données peuvent être écrite par cycle.
1096 * Une ligne de bus avec un mode rafale
1097 * Protocole conventionnel de cohérence MESI, et elimination du write bus pour un bus partagé entre les lecture et les écritures
1098
1099Contrôleur mémoire
1100~~~~~~~~~~~~~~~~~~
1101Chaque ctrl mémoire est divisé en 2 pipelines indépendants.
1102 - un pour manager les accès en lecture (Instruction fetch et load)
1103 - l'autre pour manager les accès en écriture
1104
1105Lecture  : en général prévisible et donc absorbé par le cache
1106Ecriture : A cause du write throught : répercuter à chaque fois sur le bus. De plus les codes ont tendance à faire des burst de store. En général absorbé par le store buffer.
1107
1108pipeline de Lecture et celui d'ecriture sont similaire :
11093 étages :
1110 - accès L2 (~5  cycles)
1111 - accès L3 (~15 cycles)
1112 - Initiation de l'accès à la mémoire principal ( 5-10 cycles)
1113L'avancement dans le pipeline se fait sur un miss de l'accès courant.
1114
1115Degré de pipeline :
1116Accès L2, Accès L3 pipeliné
1117Accès mémoire non pipeliné (1 seul requêtes dans cet étage)
1118
1119De plus il y a deux autres ctrl dans la mémoire principale et l'interface I/O
1120-> Retourne les données venant de l'extérieur vers le cache approprié.
1121-> ~ au ctrl des caches
1122
1123Arbitre
1124~~~~~~~
1125Les demandes d'accès les plus anciennes sont servies en premier
1126
1127Ce n'est pas une allocation cycle par cycle ou ressource par ressource. Mais par unité de cycle (de 5 à 20 cycles).
1128
1129Chaque CPU pipeline (ctrl mémoire) envoie une requete de ressource au début de chaque étage de pipeline.
1130Priorité fixe :
1131 - vers Accès mémoire et I/O
1132 - vers L3
1133 - vers L2
1134(Les plus courants sont les moins prioritaire, évite la famine)
1135
1136Read pipeline est prioritaire sur le write pipeline. Possibilité au L1 d'inverser la priorité si le write buffer est (proche d'être) plein.
1137
1138Arbitrage sur la même adresse
1139~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11402 accès se réalise en parrallèle (L1 / L2 / L3 / Mémoire) sur le même adresses
1141Problèmes :
1142 - Copie multiple d'une ligne de cache => Plus de proporité d'exclusivité des lignes de caches.
1143 
1144@InProceedings{1998_krishnan,
1145  author =       {Krishnan, V.   and
1146                  Torrellas, J.  },
1147  title =        {A clustered approach to multithreaded processors},
1148  OPTcrossref =  {},
1149  OPTkey =       {},
1150  OPTbooktitle = {Parallel Processing Symposium, 1998. 1998 IPPS/SPDP. Proceedings of the First Merged International...and Symposium on Parallel and Distributed Processing 1998},
1151  OPTpages =     {627-634},
1152  OPTyear =      {1998},
1153  OPTeditor =    {},
1154  OPTvolume =    {},
1155  OPTnumber =    {},
1156  OPTseries =    {},
1157  OPTaddress =   {Orlando, FL  ,   USA},
1158  OPTmonth =     {30 Mar - 3 Apr},
1159  OPTorganization = {},
1160  OPTpublisher = {},
1161  OPTnote =      {},
1162  OPTannote =    {}
1163}
1164
116525/02/2005
1166
1167SMT                    -> Flexible (TLP et ILP)
1168Fixed assignement (FA) -> Sous utilisation des ressources
1169
1170CMT -> un thread à tous les ressources à un instant donné
1171Pbl SMT -> Conséquence sur le temps de cycle !!!
1172
1173SMT clusterisé : Unité de calculs sont multisthreadé, l'unité de dispatch va envoyé les instructions d'un thread vers les unités de calculs qui lui sont associés.
1174
1175Model de parallélisme
1176---------------------
1177
1178Architecture fixe : N threads ayant M unités d'execution. Une unité d'execution n'apaprtient qu'a un thread => jusqu'a M IPC
1179Si X nb d'Unité d'execution total fixe -> M = X/M
1180  - Si N trop grand -> exploite peu l'ILP
1181  - Si N trop petit -> exploite peu le TLP
1182
1183Architectures
1184-------------
1185
1186Centralisé et clusterisé SMT:
1187
1188Fetch unit partagé par ts les threads, (géré round robin ou autre), les instructions sont ensuite placé dans une fênetre d'instructions commune. Les instructions sont commité par thread.
1189 -> limite : large interconnections entre les unités fonctionnelles et le banc de registres (en particulier les by-pass)
1190
1191FA :
1192
1193Réduction de la centralisation des ressources : partionnement du SMT classique en clusters (SMT d'ordre X*Y devient X clusters étant des SMT d'ordre Y).
1194Chaque cluster à sont unités de FETCH
1195
1196Evaluation
1197----------
1198Un gaspillage d'un slot d'instructions peut être classé en :
1199- struc : Manque d'unités fonctionnelle
1200- mem   : Accès mémoire
1201- data  : Dépendance de donnnées
1202- ctrl  : Miss predictions de branchements
1203- sync  : Barrières de synchro
1204- fetch : Pas d'instructons pour un thread dans la fenêtre
1205- autre
1206
1207Comparaison d'un FA8  (8 clusters qui sont des superscalaire d'ordre 1)
1208                 FA4  (4 clusters qui sont des superscalaire d'ordre 2)
1209                 FA2  (2 clusters qui sont des superscalaire d'ordre 4)
1210                 FA1  (1 clusters qui sont des superscalaire d'ordre 8)
1211                 SMT8 (8 clusters qui sont des SMT supportant 1 threads lancant 1 inst/cycles)
1212                 SMT4 (4 clusters qui sont des SMT supportant 2 threads lancant 2 inst/cycles)
1213                 SMT2 (2 clusters qui sont des SMT supportant 4 threads lancant 4 inst/cycles)
1214                 SMT1 (1 clusters qui sont des SMT supportant 8 threads lancant 8 inst/cycles)
1215En terme de complexité SMTx = FAx
1216SMT8 est identique à FA8
1217SMT1 est une architectures SMT centralisés
1218
1219de FA8 à FA1 : sync décroit mais les data et mem croit. (logique :P)
1220
1221
1222@InProceedings{  2000_barroso,
1223  author =       {Luiz André Barroso   and
1224                  Kourosh Gharachorloo and
1225                  Robert McNamara      and
1226                  Andreas Nowatzyk     and
1227                  Shaz Qadeer          and
1228                  Barton Sano          and
1229                  Scott Smith          and
1230                  Robert Stets         and
1231                  Ben Verghese},
1232  title =        {International Conference on Computer Architecture},
1233  OPTcrossref =  {},
1234  OPTkey =       {},
1235  OPTbooktitle = {Proceedings of the 27th annual international symposium on Computer architecture},
1236  OPTpages =     {282 - 293},
1237  OPTyear =      {2000},
1238  OPTeditor =    {},
1239  OPTvolume =    {},
1240  OPTnumber =    {},
1241  OPTseries =    {},
1242  OPTaddress =   {Vancouver, British Columbia, Canada},
1243  OPTmonth =     {},
1244  OPTorganization = {},
1245  OPTpublisher = {ACM Press},
1246  OPTnote =      {},
1247  OPTannote =    {}
1248}
1249
125002/12/2004
1251
1252systeme Piranha : Exploite le multiprocesseur à l'aide de 8 alpha (simple) avec 2 niveaux de caches, le tout sur un seul chip.
1253
1254Les processeurs hautes performances vise l'exploitation au maximum de l'ILP. Réalisant des architectures de + en + complexe, afin d'améliorer les benchmarks de types SPEC.
1255Or Les domaines d'applications demandant vraiment de la haute performance se situe au niveau des serveurs. (Application internet) => Comportement n'est pas comme les bench SPEC
1256
1257Pourquoi cette architecture : Le coût d'un SMT (simultaneous multithrading) étant plus cher qu'un CMP (chip multiprocessing), car plus complexe (le SMT contient du matériel pour gérer les changement de thread, + de banc mémoire etc ...). Alors que l'approche CMP peut être réaliser avec des processeurs plus simple.
1258
1259Idée dans le piranha :
1260 -> Mémoire secondaire partagée (non inclusive avec un niveau L1)
1261 -> Cohérence des caches
1262 -> architecture I/O
1263
1264Architecture générale :
1265-----------------------
1266
1267 * CPU alpha possèdant un I et DCACHE dédié
1268 * Tous ces couple Proc+Cache sont relié autours d'un Interconnect
1269 * Sur cette interconnect, il y a également les caches L2 (donc partagés avec n'importe lequel des CPU)
1270 * Sur chacun des caches L2 est connecté un controleur mémoire.
1271 * Ce dernier à une liaison directer avec des RDRAM.
1272 * Connecté sur le Bus, pour la communication avec le monde extérieur
1273    - Home engine
1274    - Remote engine
1275 * Les 2 moteurs de protocoles sont connecté au routeur de paquet qui distribue les paquets entre les moteurs internes et file d'entrée et de sortie.
1276 * Le bus étant piloté par un module : system control
1277
1278Structure hiérarchique forte.
1279
1280Réseau de noeud Piranha :
1281 - Les P-chip   => en interne possède 8 CPU alpha
1282 - Les I/O-chip => Permet de faire la liaison avec le monde extérieur (Au lieu des 8 CPU, il n'y en a qu'un + un bloc I/O)
1283
1284D'après les concepteurs, un réseau peut aller jusqu'a 1024 noeuds avec un nombre quelconque de noeud I/O.
1285Un des principes fondamental, est qu'un noeud I/O est traité de la même manière qu'un noeud de traitements.
1286
1287Architecture détaillée :
1288------------------------
1289
1290CPU + L1 cache
1291~~~~~~~~~~~~~~
1292Processeur alpha de 500Mhz, 8 étages de pipeline classique (Ifetch, Decode, Execute (*5), Writeback).
1293 -> Unité flottante, BTB, logic de prédécodage.
12942 caches séparé :
1295 -> 64 ko, ass 2voies. Cache bloquant avec adresse Virt et Tag phy.
1296 -> TLB de 256, ass 4voies
1297 -> Protocole de cohérence MESI
1298 -> Non inclusif avec le niveau L2
1299
1300Intra-Chips Switch (ICS)
1301~~~~~~~~~~~~~~~~~~~~~~~~
1302Conceptuellement, c'est un crossbar.
1303-> Uni-directionnel, interface Push-only
1304-> ECC , bits de parités
1305-> pré-allocation (spéculation)
1306-> 2 priorités (low & high), un chip peut choisir la priorité désiré.
1307
1308Cache L2
1309~~~~~~~~
1310Cache unifié d'1Mo, découpé en 8 bancs qui sont ass 8voies (Remplacement round robin)
1311-> Maintient de la cohérence intra-chip
1312-> Non inclusif avec le niveau 1 de caches (Non dédoublement des instructions)
1313-> write no allocate
1314-> Duplication du registre de TAG du cache L1 associé au cache L2
1315
1316L1 envoie une requete mémoire à son banc L2. Celui-ci peut :
1317 -> Servir directement la requête
1318 -> La renvoie à un autre Cache L1
1319 -> La renvoie à un autre protocle de cohérence
1320 -> Obtient la donnée à par le contrôleur mémoire
1321
1322Contrôlleur Mémoire
1323~~~~~~~~~~~~~~~~~~~
1324Un Contrôlleur mémoire par cache L2.
1325A une liaison rapide avec les RAMs,
1326N'a pas de liaison direct avec l'ICS
1327
1328Protocole Engine
1329~~~~~~~~~~~~~~~~
1330Assure le support pour la mémoire partagé, 2 blocs spérarés :
1331 -> "home engine"   responsable d'exporter la mémoire local a ce noeud
1332 -> "remote engine" importe la mémoire qui se trouve dans un noeud distant
1333
1334Chaque bloc est a peu de chose près conçu de la même manière :
1335* Input controller
1336* microcode controlled execution unit
1337* Ouput controller
1338
1339Une execution micoprogrammé assure la gestion entre les deux interfaces.
1340
1341Cohérence des caches : Read, Read-exclusive, Exclusive, Exclusive-without-data
1342
1343Interconnecte système
1344~~~~~~~~~~~~~~~~~~~~~
13453 partie distinct :
1346-> Output Queue
1347-> Input  Queue
1348-> Routeur
1349
1350Topologie indépendante, adaptatif, Buffer avec différents niveau de priorités, canaux virtuels
1351
1352Mise en place de dispositifs pour assurer la fiabilité, disponibilité et l'utilité des données :
1353 - redondance sur les dispositifs mémorisants
1354 - procetection CRC sur les chemins de donn"s
1355 - protocle de recouvrement d'erreur
1356 - enregistrement d'erreur
1357 - Liens permuttable à chaud
1358
1359METHODOLOGIE D'EVALUATION
1360-------------------------
1361
1362Utilisation d'un bench simulant des accès de clients sur des bases de données.
1363 -> Oracle (logiciel)
1364 -> SimOS-Alpha (Os pour processeur alpha assez fournit (gère le multi processeur, la mémoire virtuel ...)
1365
1366Comparaison de l'archi piranha avec :
1367 - Un alpha21364 : un superscalaire Out of order, à 1Ghz, 2 niveaux de caches etc...
1368 - un système piranha avec 8 procs (P8)
1369 - un système piranha avec 1 proc  (P1)
1370 - un proc superscalaire In order
1371
1372Constatation :
1373 - le piranha 8 est relativement performant
1374 - Le traffic dans l'interconnect local est d'autant plus grand qu'il y a de processeurs, surtout a cause des mécanisme de cohérence de cache (Forwarding vers d'autre cache L2)
1375
1376Remarque de fin :
1377Les auteurs finissent par cette perspective :
1378 => La question clé pour les designers des processeurs futures ne va pas être de savoir si on va employés des multi procs, mais de déterminer la bonne compensation entre le nombre de coeurs et la puissance de chaque coeurs. Et quel sera la meilleur hierarchie mémoire.
1379@Article{         2000_hammond,
1380  author =       {Hammond, L.   and
1381                  Hubbert, B.A. and
1382                  Siu, M.       and
1383                  Prabhu, M.K.  and
1384                  Chen, M.      and
1385                  Olukolun, K.   },
1386  title =        {The Stanford Hydra CMP},
1387  journal =      {Micro, IEEE},
1388  year =         {2000},
1389  OPTkey =       {},
1390  OPTvolume =    {Volume 20, Issue 2},
1391  OPTnumber =    {},
1392  OPTpages =     {71-84},
1393  OPTmonth =     {Mars/April},
1394  OPTnote =      {},
1395  OPTannote =    {}
1396}
1397
139807/12/2004
1399
1400MOTIVATION
1401----------
1402
1403Les processeurs sont plus petits et rapide. Donc pour une même surface, nous avons une augmentation du "budget" de processeur.
1404 -> Soit on augmente la complexité d'un mono-processeur
1405 -> Soit on augment le nombre de mono-processeur simple sur un chip
1406
1407Parrallélisme:
14082 types de parrallélisme : ILP (Instruction level parrallelism) et TLP (Thread level parrallelism)
1409Souvent la logique utilisé pour augmenter l'ILP fait augmenter le cycle d'horloge de manière quadratique.
1410De plus il est limite à 4-6 instructions (cf 1991\_wall)
1411
1412Contrainte technologique :
1413Délai causé par l'interconnection des portes (délai des nets) devient significatif => zone localement synchrone et globalement asynchrone. Un CMP peut faire en sorte de placer des processeurs simples dans les zones localement synchrones
1414
1415Temps de design:
1416La conception d'un CMP s'appuie plus sur l'utilisation d'IP.
1417
1418Pourquoi les CMP ne sont pas utilisé?
1419 -> Difficulté à convertir un programme pour mono-proc en multi-proc (Problème de consitence mémoire, synchronisation entre proc etc ...)
1420 -> Les compilateurs parralléles sont encore très assistés par le programmeur
1421
1422DESIGN
1423------
1424
1425Le chip Hydra est un chip multiprocessor (CMP) intégrant 4 processeurs MIPS possédant chacun un Icache et un Dcache L1, mais un niveau L2 partagé.
1426Tous les controleurs des Caches L1 et le cache L2 sont sur le même bus. (Appellé bus d'écriture)
1427Un autre bus prévut pour les échanges entre l'extérieur et le cache L2 mais avec possibilités de lecture des contrôleurs L1
1428
1429Protocole d'invalidation simple sur le bus d'écriture
1430
1431Il existe beaucoup d'application pour mono-processeur. Pour l'executer sur un système multi-proc, soit on sous utilise notre architecture, soit on ajoute de la thread-level speculation.
1432L'hydra va utiliser la deuxième technique.
1433
1434thread-level speculation
1435~~~~~~~~~~~~~~~~~~~~~~~~
1436Prends une séquence d'instructions, la découpe de manière arbitraire en thread. Le hardware doit suivre ces threads. Si un thread réalise une lecture trop tôt (Donc un autre thread n'a pas encore fournit de résultat), le hard doit s'arranger pour que ce thread ce réexecute avec la bonne lecture.
1437Grande complexité car on doit déterminer toute les possibilités de "vrai dépendances"
1438
1439Outre le cas normal, il y a 5 types de problèmes de cohérences :
1440- Cas normal : début de boucle load X , fin de boucle write X
1441- Renvoie de la donnée entre thread parralléle
1442- Détection si les lectures sont "proche" (Dépendance RAW) : Au moment de faire un write sur X à l'itération i, alors le distribuer au load de l'itération i+1 (Forward data entre deux thread paralléle).
1443 => Mécanisme pour ce souvenir des traces d'execution (S'il y a eu précedement une lecture sur X dans l'itération i+1 lros de l'execution de l'instuction write sur X de l'itération i, alors il y a une erreur).
1444- Annulation saine de l'exec spéculatif après violation
1445- Retirer les écritures spéculatives dans le bonne ordres (Dépendance WAW) (tjs l'itération la plus ancienne en premier) => Les écritures ne deviennent plus spéculative.
1446- Fournir le rennomage mémoire (Dépendance WAR)
1447
1448Le système doit avoir un mécanisme pour décomposer en thread, et pouvoir les arreter les threads spéculatifs.
1449
1450Où découper les threads : En pratique : que lorsque l'on peut avoir plusieurs voie, càd boucle et appel de fonctions (Si la fonction ne retourne pas de résultats ou le résultat est facilement prédictible)
1451Le speculation runtime system va choisir les 4 threads les moins spéculatifs et les executer (car il y a 4 procs).
1452
1453Le mécanisme de spéculation demande des médiums de communication rapide inter processor, sinon le processus mono thread risque de couter moins cher que sont équivalents découpés en plusieurs threads (spéculatif).
1454
1455Sur l'hydra, le matériel additionnel pour utiliser cette technique est placé dans 2 blocs matériels :
1456- Ram de flags pour les caches L1 (est ce que la donnée contenu dans la ligne à été spéculativement lut ou écrite?)
1457- Write buffers dans le cache L2 (Buffer d'écriture permettant de sauvegarder "sainement" les données dans le cache L2. (Garantie de donnée non spéculative)
1458
1459Comment cela fonctionne?
1460~~~~~~~~~~~~~~~~~~~~~~~~
1461- Un buffer est alloué à chaque thread en train d'être éxecuté sur ce système. Dès qu'un thread ne devient plus spéculative, alors les buffers écrivent dans la mémoire.
1462- Pour contrôler le séquencement des threads, il y a un petit composant utilisant l'interface coprocesseur du mips.
1463  |-> "speculation coprocessors"
1464
1465Classement de threads par degré de spécultation, quand un thread spéculatif d'ordre i envoie un message sur le writebus, seul les ctrls rattaché à des procs éxecutant un thread plus spéculatif (donc d'ordre > i) snoop le bus (rappel => utilisation de l'invalidation sur snoop)
1466
1467=> Lors d'un accès mémoire => Lecture en L1, si miss (surement invalidé) alors regarde dans son write buffer  puis dans les write buffer des threads de - en - spéculatif, et enfin dans le cache L2.
1468
1469COUT ET PERFORMANCE
1470-------------------
1471Cout        : augmente la surface de quelques pourcents.
1472Performance : Programme difficille ou impossible à parralléser, cependant ce sont des applications hautements parralléles.
1473@InProceedings{2001_nagarajan,
1474  author =       { Ramadass Nagarajan             and
1475                   Karthikeyan Sankaralingam     and
1476                   Doug Burger   and
1477                   Stephen W. Keckler},
1478  title =        {A design space evaluation of grid processor architectures},
1479  OPTcrossref =  {SBN ~ ISSN:1072-4451 , 0-7695-1369-7},
1480  OPTkey =       {},
1481  OPTbooktitle = {Proceedings of the 34th annual ACM/IEEE international symposium on Microarchitecture },
1482  OPTpages =     {40-51},
1483  OPTyear =      {2001},
1484  OPTeditor =    {},
1485  OPTvolume =    {},
1486  OPTnumber =    {},
1487  OPTseries =    {},
1488  OPTaddress =   { Austin, Texas},
1489  OPTmonth =     {},
1490  OPTorganization = {},
1491  OPTpublisher = { IEEE Computer Society },
1492  OPTnote =      {},
1493  OPTannote =    {}
1494}
1495
149602/02/2005
1497
1498En quoi consiste un Grid processors architecture?
1499 -> tableau d'ALU avec un contrôle limité.
1500 -> Les alu sont connecté par un réseau ou circule leur opérande
1501 -> Les programmes sont éxécutés en mappant les blocs de manière statique et a executé les isntructions de manières dynamiques
1502 -> Executions possible via une chaine d'alu (sorte de pipeline)
1503
1504Le GPA est conçut en vut d'avoir une grande fréquence d'horloge et une grande exploitation de l'ILP
1505Le coeur de calcul d'un GPA consiste en une matrice 2D de noeuds. Chaque noeud contient un buffer d'instruction et une unité d'execution.
1506-> noeud peuvent donc réaliser des calculs à grain fins
1507-> les noeuds sont interconnecter avec un réseau dédié à la communication de données et d'opérande.
1508-> Contrôle assuré par un mécanisme mappant les instructions sur les noeuds
1509
1510=> Equivalent à une approche VLIW : Ressources alloués statiquement par le compilo mais le lancement est dynamique
1511
1512MODELE D'EXECUTION
1513------------------
1514
1515Modèle d'execution : traite des groupes d'instructions comme une unité atomique pour le fetch, mappage de ressources des unités d'execution et le commit.
1516Dans ce modèle, les groupes d'instructions sont définit par le compileur.
1517 -> Un groupe n'a pas de transfert interne de ctrl (c'est à dire un saut prit sera la dernière instruction d'un groupe) (Un bloc peut être un bloc de base ou une trace d'execution ...)
1518 -> Données utilisé sont de 3 types : (Modèle Producteur - consommateur)
1519    * entrée : valeur produite par un autre groupe et consommé par ce groupe
1520    * sortie : valeur produite par le groupe et consommé par un autre groupe -> écriture des données dans un mémoire tampon jusqu'au commit
1521    * temporaire : valeur produite et consommé par le groupe -> transimition des données en internes
1522
1523Compilateur assigne statiquement chaque instruction à un groupe d'alu. Un groupe ne peut être allouer à plus d'une instruction
1524
15251) Un groupe est fétché et mapped sur les ALUs
15262) Chaque instruction dans le groupe est écrite dans les buffers d'instructions ( ~ station de réservations)
15273) Lecture des opérandes dans le banc de registres et placement des opérandes dans les alus.
15284) Execution de l'instruction
15295) Une fois que l'execution est terminé, le résultat est renvoyé vers l'alu consomatrice. (Ou vers le banc de registres)
1530
1531Destination encodé explicitement dans l'instruction
1532
15336) Lorsque tte les instructions d'un groupe sont finis => commit : update de la mémoire
15347) Le groupe est libéré des ALUs
15358) Mappage du prochain groupe ...
1536
1537Il existe un branch register pour les résultats des branchements.
1538
1539Avantage
1540--------
1541-> Peu de structures larges impliqué dans l'execution (càd non centralisé, pas de fenêtre de lancement associative, pas de table de renommage de registres, peu d'accès en lecture et écriture simultané)
1542-> Execution désordonnée (sans vérification de dépendance large, diffusion des bypass, réseau dédié au forward)
1543
1544Implémentation
1545--------------
1546
1547ICACHEM -- REG --- REG --- REG --- REG
1548            |  \ /  |  \ /  |  \ /  |
1549            |  / \  |  / \  |  / \  |
1550ICACHE --- ALU --- ALU --- ALU --- ALU --- DCACHE
1551            |  \ /  |  \ /  |  \ /  |
1552            |  / \  |  / \  |  / \  |
1553ICACHE --- ALU --- ALU --- ALU --- ALU --- DCACHE
1554            |  \ /  |  \ /  |  \ /  |
1555            |  / \  |  / \  |  / \  |
1556ICACHE --- ALU --- ALU --- ALU --- ALU --- DCACHE
1557            |  \ /  |  \ /  |  \ /  |
1558            |  / \  |  / \  |  / \  |
1559ICACHE --- ALU --- ALU --- ALU --- ALU --- DCACHE
1560
1561          BLOC TERMINAISON ET TERMINAISON
1562
1563
1564ALU rangé en matrice de n*m cases.
1565Le bloc de terminaison détermine quel groupe d'instructions est mappé et quand celui-ci à terminé (dc commit)
1566Chaque alu contient
1567 * des ports d'entrée pour les opérandes
1568 * des buffers d'instructions et d'opérandes
1569 * un routeur pour délivrer les résultats vers les ports de sorties
1570Un prédicteur de branchement va prédire le succès de ce blocs et va fetché et mappé sur la grille le bloc suivant.
1571
1572Caractéristique influencant les performances :
1573- Organisation des ALUs (nombre et position)
1574- la latence du réseau d'unterconnection d'un noeud
1575- le nombre d'I/O de chaque noeud
1576
1577Alternatives
1578------------
1579* Changer le design du réseaux de grille : Préreservations du flow, découpage du message,
1580* Chgt du système mémoire : Format d'instruction compressé, envoyant ce code compréssé au L1. Dcache ~ fifo pour maintenir la cohérence => Utilisation de technique de spéculation.
1581* Spéculation de grille
1582* Management des frames : Execution de multi thread, thread spéculatif
1583
1584
1585@Article{2002_ungerer,
1586  author =       {T. Ungerer and
1587                  B. Robic   and
1588                  J. Silc },
1589  title =        {Multithreaded processors},
1590  journal =      {The Computer Journal},
1591  year =         {2002},
1592  OPTkey =       {},
1593  OPTvolume =    {45},
1594  OPTnumber =    {3},
1595  OPTpages =     {320-348},
1596  OPTmonth =     {},
1597  OPTnote =      {},
1598  OPTannote =    {}
1599}
1600
160117/02/2005
1602
1603Contrainte de la conception d'un proc multi thread :
1604 - Différente logique pour le calcul d'adresse
1605 - Les threads doivent avoir une espaces d'adressage commun
1606 - Extraction de thread de manière hardware ou software (compilo)
1607
1608-> implicite multi threading : Chaque architecture va executer de manière concurrentiel différent thread d'un même programme séquentiel (predication de branchement etc...)
1609-> explicite multi threading : Execution d'un flots multi programmé
1610
1611But principal -> recouvrir la latence d'un thread par l'execution d'un autre.
1612
1613
1614Mécanisme minimal :
1615- Plusieurs PC
1616- Mécanisme pour commuter les threads
1617  |-> Potentiellement avoir plusieurs banc de registres permet d'augmenter la commutation
1618
16193 approches :
1620- multithreading imbriqué  (FMT) : Changement de thread à chaque cycle
1621- multithreading bloqué    (VMT) : Changement de thread à chaque évenement (evt induiant une latence => ex div, miss etc ...)
1622- multithreading simultané (SMT) : Plusieurs threads actifs en même temps
1623
1624Fine graine MT
1625~~~~~~~~~~~~~~
1626L'imbrication de plusieurs threads va limiter la perf de chaque thread
1627 -> technique "dependance lookahead" : ajout de bits à chaque inst dans l'isa pour déterminer combien d'inst suivant n'a pas de dépendance avec celle-ci
1628 -> technique d'imbrication : chgt de thread à chaque cycle
1629
1630Diverses "astuces" : Cray-MTA à au moins 128 contextes afin de masquer la latence de la mémoire étant de 128 cycles (Changement de contexte à chaque cycle)
1631
1632Coarse graine MT
1633~~~~~~~~~~~~~~~~
1634
1635=> Execution d'un thread jusqu'a ce qu'une condition de changement de contexte est atteinte :
1636
1637 -> Modèle statique
1638     -> Chgt explicite (Par instr "switch" ou une instruction "taggé")
1639     -> Chgt implicite (Sur load, store, branch etc ...)
1640 -> Modèle dynamique
1641     -> Chgt sur miss de cache
1642     -> Chgt sur evenement (interruption, trap ...)
1643     -> Chgt sur profil d'utilisation (trop de chargemement (ou pas accès) etc ...)
1644     -> Chgt conditionnel (instruction de switch conditionnelle)
1645
1646Un plus petit nombre de threads est nécessaire pour atteindre de bonne performance.
1647-> Pénalisation d'un thread remplicant souvent la condition de changement de contexte
1648
1649Avantage de Modèle statique -> le changement de contexte peut être détecter tôt dans le pipeline (Voir tjs dans le même étage).
1650
1651Simultaneous MT
1652~~~~~~~~~~~~~~~
1653FMT et CMT sont très performant pour des processeurs scalaire ou VLIW (un flut d'instruction)
1654
1655L'unité d'IFETCH peut être partagé par plusieurs threads, (Dans ce cas on augmente la probabilité d'aller chercher des instructions non spéculative).
1656De plus l'unité IFECTH peut choisir quel thread privilégié pour aller chercher ces instructions.
1657
1658 -> Partage de ressources : tous les thread partage un maximum de ressources (ifetch buffer, décodeur, banc de registres, fenêtre d'instruction etc ...)
1659 -> Duplication de ressources : Chaque buffer interne appartient à un thread spécifique. Les étages internes peuvent être multiplexé ou dupliqué entre les threads.
1660
1661Priorité :
1662 RR        : Round-Robin
1663 ICOUNT    : La priorité est donné au thread ayant le moins d'instructions dans les étages decodes, rename et queue
1664 BRCOUNT   : La priorité est donné au thread ayant le moins de branchement (donc le - spéculatif)
1665 MISSCOUNT : La priorité est donné au thread ayant le moins de DCACHE miss
1666 IQPOSN    : La priorité est donné au thread ayant les plus vieille instructions
1667
1668SMT peut aussi executer les deux chemins d'un branchement.
1669
1670Diverses technique :
1671~~~~~~~~~~~~~~~~~~~~
1672
1673- Division d'un thread en collection de tâches qui sont distribués dans les unités d'executions.
1674  -> processeur de trace
1675- Processeur "super-threadé" un pipeline d'execution/thread,  peut être alloué par le compilateur
1676- dynamic multi threading processor : Création de threads de manière dynamique (sur appel de procédure et déroulement de boucle ...)
1677- microthread -> Création d'un microthread de manière explicite => préfetech une donner, calculer en avance la condition de saut ...
1678              -> Utilisation des threads "idle"
1679- Execution des 2 branches d'un saut -> utilisation des threads "idle"
1680                                     -> utilisation de la prédication
1681
1682Multi-threading et le temps réel
1683~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1684-> Le chgt de contexte "rapide" est un avantage clé pour les systèmes temps réel.
1685-> Le multi threading permet d'avoir la routine d'intérruption et le programme principale dans 2 threads du processeurs
1686
1687Chip multi processors
1688---------------------
1689Symetric multiprocessors (SMP) et le Distribued shared Memory multiprocessors (DSM) -> espace mémoire uniforme (UMA)
1690un DSM peut également ne pas maintenir la propriété d'espace mémoire uniforme => Communication par passage de message
1691
1692Cohérence des caches par snooping (SMP) ou directory based (DSM).
1693
16943 alternatives de CMP :
1695 - mémoire partagé (SMP typique)
1696 - L2 partagé
1697 - L1 partagé
1698partagé les niveaux de caches diminue le délai de communication iter-processeur. Plus d'espaces pour les threads
1699
1700@InProceedings{2003_sankaralingam,
1701  author =       { Karthikeyan Sankaralingam      and
1702                   Ramadass Nagarajan    and
1703                   Haiming Liu   and
1704                   Changkyu Kim          and
1705                   Jaehyuk Huh   and
1706                   Doug Burger   and
1707                   Stephen W. Keckler    and
1708                   Charles R. Moore},
1709  title =        {Exploiting ILP, TLP, and DLP with the polymorphous TRIPS architecture},
1710  OPTcrossref =  { ISBN:0-7695-1945-8},
1711  OPTkey =       {},
1712  OPTbooktitle = {Proceedings of the 30th annual international symposium on Computer architecture},
1713  OPTpages =     {422-433},
1714  OPTyear =      {2003},
1715  OPTeditor =    {},
1716  OPTvolume =    {Volume 31 Issue 2},
1717  OPTnumber =    {},
1718  OPTseries =    {},
1719  OPTaddress =   {San Diego, California},
1720  OPTmonth =     {May},
1721  OPTorganization = {},
1722  OPTpublisher = {ACM Press},
1723  OPTnote =      {},
1724  OPTannote =    {}
1725}
1726
172701/02/2005
1728
1729Architecture polymorphe : TRIPS
1730Peut être configuré pour différente granularité et types de parallélisme => Instruction level paralelism, Thread LP Data LP.
1731
1732Processeur : Soit on a un général-purpose microprocesseur qui sait tout ou alors on spécialise le processeur :
1733 -> Bureautique, network, serveur, scientifique, graphique ou signaux digitaux.
1734
1735La spécialisation à un défaut :
1736 -> Le processeur devient peut performant dans un domaine qui n'est pas sa spécialisation.
1737
1738Les CMP peuvent être vut de 2 manières :
1739 -> Homogène   : Ensemble de processeurs identiques
1740 -> Hétérogène : Regroupement de processeurs spécialisé -> mappage d'une application sur cet architecture ...
1741    |-> Défauts : * Augmentation de la compléxité
1742                  * Sous utilisation des ressources si un thread n'a pas besoin de la spécialité
1743
1744Une architecture polymorphique est capable de configurer le hard pour exécuter de manière efficace un large spectre d'applications.
1745-> Approche synthétique : Utilisation de CMP à grain fin -> synthése de plusieurs éléments de calcul en une large entité logique.
1746-> Approche partitionné : Utilisation de CMP à grain grossier => Partitionnement de l'entité la plus large pour exploiter le parrallélisme à grain fin.
1747
1748Une architecture polymorphe ne va pas surpasser une architecture dédié, mais devrait bien se comporter avec un large spectre d'application.
1749
1750TRIPS -> Architecture polymorphique, approche partitionné combiné avec un coeur de processeur en grille à grain grossier et avec un système  mémoire on chip adaptatif.
1751Objectif -> Avoir un coeur d'architecture qui peut aussi bien être très large que minuscule (scalable)
1752
1753Architecture TRIPS
1754------------------
1755Architecture orienté blocs.
1756Un programme compilé pour le TRIPS est partitionné en bloc large d'instruction avec un seul point d'entrée, sans boucle et plusieurs point de sorties
1757Les blocs valide de manière atomique et les intérruptions sont "blocs précis". (Plus de décision au point de vue instruction mais au point de vue bloc)
1758
1759Compilateur est résponsable de l'allocation statique de chaque bloc d'instruction dans le le système (Dépendance explicite).
1760
1761Une opération de flot usuel du proc : Chgt d'un boc depuis la mémoire, chgt dans le moteur de calcul, execution,  reporter les resultats dans la mémoire, chgt d'un autre bloc ...
1762
1763-> TRIPS est constitué de 4 blocs de 16 coeurs polymorphe. Une grille de 32Ko de mémoire connecter en quadrillage, des ctrl mémoires distribué pour connecter de la mémoire externe.
1764-> Chaque blocs est constitué de d'un tableau de noeud d'execution, Il y a un ICACHE L1 par ligne dans la matrice , et une partie du banc de registre par colonne. Sur chaque ligne (droite) il y a également un DCACHE L1. En dessous de la matrice il y a le block de logique de ctrl qui s'occupe du séquencement de ce bloc et de la sélection du prochain bloc. Les caches L1 sont connecté au cache L2 a l'aide d'un interconnect.
1765
1766-> Chaque noeud d'execution contient une IU, FPU, des stations de réservations, un routeur de connections I/O, un noeud est directement connecter avec ses plus proches voisins, mais peut communiquer avec n'importe quel noeud dans la matrice
1767-> Chaque stations de réservations stocke des isntructions et 2 opérandes sources.
1768
17693 types principaux de ressources :
1770 * hardcoded (ressources utilisées dans tous les mode et non modfiable) ex : interconnect, unité d'execution, cache L1
1771 * ressources utilisé dans tous les modes et modifiable
1772 * ressources non nécessaires dans tous les modes et pouvant être désactivés.
1773
1774Gestion du ILP : D-morph
1775------------------------
1776-> La configuration D-morph traite les buffers d'instructions comme un large, distribué fenêtre de lancement d'instructions. Possibilé d'avoir de l'execution our-of-order
1777Le buffer d'instruction doit fournir une large bande passante de chargement d'instruction, un contrôle aggréssif et une spéculation sur les données, une mémoire à faible latence et qui préserve les accès mémoires de manière séquentiels
1778
1779Vue des buffers comme en trois dimension (x,y sont les coordonées physique dans un bloc et z correspond au nombre de place d'instructions dans chaque noeuds d'ALU.
1780Le compilateur va découper le code en hyperblock (morceau de code communicant dans un graphe en 3D et dont il n'y à qu'un net de sortie.) Mappage de ces blocs dans des frames. (Différents slots de buffers sur le même noeuds d'alu). Les A-frame est la zone contenant tous les frame mappant un hyperblock.
1781
1782Spéculation de Multiblock : Les A-frames vide vont spéculativement chargé et executé un hyperblock. Les A-frames sont traités de manière circulaire : Le buffer de tête étant le moins spéculatif
1783
1784Instruction fetching -> pc pointe sur les têtes d'hyperblocks. Prédiction sur le prochain hyperblock (et non sur la prochaine instruction). Hyperblock sont codés du style VLIW.
1785Interface mémoire : Entrelacement des bancs mémoires -> accès simultané a des adresses non conflictuelles.
1786Mémoire secondaire configure le réseau de bank comme un cache à accès non uniform.
1787
1788Résumé : Prédiction  de fin assuré, grande bande passante pour l'ifecth, Dcache partitioné, execution concourente d'hyperblock (avec le réenvoie des valeur d'interbloc), le Dmorph est capable d'utiliser le buffer d'instrcution comme une fenêtre de lancement out of order
1789
1790Gestion du TLP : T-morph
1791------------------------
1792-> fournit un mappage un contrôle pour les multi thread.
1793SMT -> cache et unité d'execution sont partagé.
1794
17952 stratégies :
1796 - processeurs de lignes -> Partage la matrice d'ALU, en alloue une ou plusieurs lignes par threads. -> chaque thread à un nombre de  ICACHE et un DCACHE proportionnel au nombre de lignes alloué. Attention : La distance du banc de registre n'est pas uniforme (pénalise les lignes inférieurs)
1797 - processeurs de frames -> Partage le processeur par un ensemble de frames
1798
1799|-> Les frames sont partagé entre thread. Un l'intérieur d'un thread, les frmae peuvent être spéculatif (cf D-morph)
1800|-> T-morph maintient n PC et n historique de banc de registres
1801
1802Gestion du DLP : S-morph
1803------------------------
1804TRIPs est principalement prévut pour les flots multimédia et les calculs scientifiques => contient beaucoup de parrallélisme a niveau donnée
1805
1806-> fusion des Aframe pour un Super Aframe => Les boucles sont déroullées
1807-> mapping reuse : un bloc est gardé dans les stations de réservations pour être utilisé plusieurs fois
1808-> Dans les caches, ajout d'une fonctionnalité DMA
1809@InProceedings{2004_chaudhuri,
1810  author =       {Mainak Chaudhuri   and
1811                  Mark Heinrich},
1812  title =        {SMTp: An Architecture for Next-generation Scalable Multi-threading},
1813  OPTcrossref =  {},
1814  OPTkey =       {},
1815  OPTbooktitle = {Proceedings of the 31st annual international symposium on Computer architecture},
1816  OPTpages =     {124-136},
1817  OPTyear =      {2004},
1818  OPTeditor =    {},
1819  OPTvolume =    {0},
1820  OPTnumber =    {},
1821  OPTseries =    {},
1822  OPTaddress =   {München, Germany},
1823  OPTmonth =     {},
1824  OPTorganization = {},
1825  OPTpublisher = {IEEE Computer Society},
1826  OPTnote =      {},
1827  OPTannote =    {}
1828}
1829
183017/03/2005
1831
1832Modification d'uns SMT pour intégré un protocol de cohérence des threads afin de le placer dans un système à mémoire distribué (DSM).
1833
1834DSM sont scalable, mais s'ils n'utilisent pas de protocoles de snoop. Le directory based impose des structations de tableaux.
1835
1836Architecture
1837------------
1838
1839Le processeur à une architecture classique :
1840 9 étages : fetch, decode, issue, lecture1, lecture2, exec, cache accès, commit
1841fetch suit la politique ICOUNT (cf 1996\_tullsen)
1842=> Il y a 2 threads. Tous est partagé sauf pile des adresses de retours, table de mappage, prédicteur dynamqiue
1843
1844Un noeud est séparé en deux parties :
1845 - le coeur du proc
1846 - le contrôlleur mémoire
1847
1848Le protocole de cohérence est lié à un thread. Celui-ci n'execute que cela (programme dédié donc n'est pas visible de l'extérieur). Il n'est pas aborder de solution dynamique (dès que la cohérence est nécessaire, un thread doit executer ce dernier)
1849
1850Afin d'éviter les deadlocks (applications tournants sur les threads et le threads gérant le protocole partagent les même ressources (file d'execution etc ...)), il y a des ressources dédié au threads executant le protocles des threads.
1851
1852Performance
1853-----------
18543 limitations :
1855- Le protocole de thread souffre de la latence du pipeline
1856- Le nombre de registre entiers
1857- Le DCACHE-L1 et les CACHE-L2 sont partagés entre les applications tounants sur les threads et le protocole de cohérences des threads
1858
1859
1860@InProceedings{  2004_wang,
1861  author =       {Nicholas J. Wang and
1862                  Justin Quek      and
1863                  Todd M. Rafacz   and
1864                  Sanjay J. Pate},
1865  title =        {Characterizing the Effects of Transient Faults on a High-Performance Processor Pipeline},
1866  OPTcrossref =  {In the Proceedings of the 2004 International Conference on Dependable Systems and Networks},
1867  OPTkey =       {},
1868  OPTbooktitle = {},
1869  OPTpages =     {},
1870  OPTyear =      {2004},
1871  OPTeditor =    {},
1872  OPTvolume =    {},
1873  OPTnumber =    {},
1874  OPTseries =    {},
1875  OPTaddress =   {Florence , ITALY},
1876  OPTmonth =     {june},
1877  OPTorganization = {},
1878  OPTpublisher = {},
1879  OPTnote =      {},
1880  OPTannote =    {}
1881}
1882
188330/11/2004
1884
1885Moins de 15 \% des corruptions binaires sont visibles du logiciel, des techniques simples d'overhead diminues de 75\% des fautes.
1886
1887D'ou viennent les fautes :
1888 - Sources externe (pulsation electro magnétique)
1889 - Sources interne (fuite, bruit da'alimentation ...)
1890
1891Pour caractériser ses fautes, ils ont définit un modèle de processeur :
1892 - ISA alpha
1893 - Superscalaire, ordonnacement dynamique (à 32 entrées)
1894 - execution spéculative
1895 - prédiction des dépendances mémoires
1896 - 12 étages de pipelines
1897 - 6 inst lancées/cycle
1898
18994 types d'erreurs :
1900 - Correspondances à un état de la micro architecture
1901 - Arret prématuré de la tâche
1902 - Corruption d'une donnée
1903 - Rien sur le comportement
1904
190585\% des fautes sont masqués
1906 3\% sont invisibles
190712\% réalise une execution erronée
1908
1909=> Les registres visibles sont les plus vulnérables
1910
1911Types d'erreurs dut à une execution erronnée :
1912 - Inconsistence du banc de registres
1913 - Inconsistence mémoire
1914 - deadlock ou livelock
1915 - Accès à une page virtuel invalide (Inst ou data)
1916 - Part en exception
1917 - Réalise une instruction non demandé
1918 
1919Mécanisme de protection :
1920 - Timeout => Evite les lock
1921 - Code correcteur d'erreur => sur le banc de registres et sur le pointeur de ce banc (register renaming)
1922 - Bit de parité => sur le registre IP (il traverse tous le pipeline)
Note: See TracBrowser for help on using the repository browser.