source: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/article-07sympa/common/bibliographie.bib @ 63

Last change on this file since 63 was 63, checked in by rosiere, 17 years ago

par rapport au commit precedent : commit des include commun et un petit (vraiment petit) peu de doc

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