source: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/article-morpheo-share_architectural_ressources_between_hardware_context/common/bibliographie.bib @ 2

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

Import Morpheo

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