source: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/presentation-share_architectural_ressources_between_hardware_context/fr/root.tex @ 16

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

Ajout d'une ancienne présentation dans la documentation de Morpheo

File size: 17.2 KB
Line 
1\section{Introduction}
2
3\frame
4    {
5      \frametitle{Introduction}
6
7      Chip MultiProcessors (CMP) et le Simultaneous Multi-Threading (SMT) sont 2 approches opposée qui résolves le même problème : éxècuter sur un même chip plusieurs threads.
8
9      \begin{description}
10      \item[CMP :] Chaque thread dispose de l'ensemble des ressources d'un core\\(Hydra, Piranha, Opteron)
11      \item[SMT :] Chaque thread partage les ressources d'un core avec toutes les autres\\(MARS-M, 21464, Pentium4 HyperThreading)
12      \item[CMP de SMT : ] il s'agit de plusieurs core de processeurs où chaque core est multi-threadé\\(Niagara, Power5, Montecito)
13      \end{description}
14    }
15
16\frame
17    {
18      \frametitle{Approche grain fin}
19
20      Entre le tout partagé et le tout dédié, nous pouvons faire varier dégré de partage de certaines ressources.
21
22      Ces objectif sont :
23      \begin{itemize}
24      \item Economiser de la surface%(Pour une même structure on compare sa duplication avec le contrôle nécessaire pour permettre son partage)
25      \item Augmenter leur taux d'utilisation en profitant du Thread Level Parallelism
26      \item Avoir le maximum de ressource disponible en éxècution ST (Single Thread), tout en minimisant la dégradation des performances en éxècution MT (Multi Thread)
27      \end{itemize}
28    }
29
30\frame
31    {
32      \frametitle{Travaux liés}
33
34      \begin{description}
35      \item[CASH : Revisiting hardware sharing in single-chip parallel processor]~\\2004 - Dolbeau et Seznec\\Partage entre les threads des unités à latence longue (multiplication, division ...), Prédicteur de branchement, Icache et Dcache.
36      \item[Conjoined-core Chip Multiprocessing]~\\2004 - Kumar, Jouppi et Tullsen\\Partage des unités flottantes, ports du crossbar (Cache à la mémoire), Icache et Dcache.
37      \end{description}
38    }
39
40\section{Expérimentation}
41\frame
42    {
43      \frametitle{Expérimentation}
44      Nous allons déterminer l'incidence du partage des ressources suivantes :
45
46      \begin{itemize}
47        \item I/Dcache
48        \item Front et Back end
49        \item Unités d'executions
50      \end{itemize}
51    }
52
53\subsection{Charge de travails}
54\frame
55    {
56      \frametitle{Charge de travails}
57
58      \begin{itemize}
59        \item Sélection des benchmarks parmit les SPECINT2000 (164.gzip, 175.vpr, 181.mcf, 255.vortex, 256.bzip2, 300.twolf)
60        \item Le nombre de software soumit au architecture est décrite par la combinaison $C_{\text{nb\_benchmarks}}^{\text{nb\_threads}}$
61          Une charge de travail est donc composée de 4 benchmarks qui vont être éxecuter par l'un des 4 contextes disponibles.
62        \item Utilisation de {\it Newlib} pour d'avoir les librairies standard (libc, libm et fonction de bas niveau (read, write, open, close ...))
63      \end{itemize}
64    }
65
66\subsection{Architecture de référence}
67\frame
68    {
69      \frametitle{Architecture de référence - Core}
70
71      \begin{tabular}{l|c}
72                                                     & Commun           \\
73        \hline
74        \hline
75        nb\_ue                                       & 8                \\
76        \hline
77        taille - select\_queue                       & 4                \\
78        taille - reservation\_station                & 4                \\
79        taille - execute\_queue                      & 4                \\
80        \hline
81        Nombre de branchements spéculé               & 8                \\
82        Return Address Stack                         & 16               \\
83        \hline
84        Réseau de bypass                             & Complet          \\
85        \hline
86        nb\_data\_access                             & 4*               \\ 
87        \hline
88        nb\_gpr\_reader                              & 12               \\
89        nb\_gpr\_writer                              & 8                \\
90        nb\_memory\_write                            & 3                \\
91        nb\_execute\_write                           & 6                \\
92        nb\_spr\_reader                              & 2                \\
93        nb\_spr\_writer                              & 2                \\
94      \end{tabular}
95      }
96
97\frame
98    {
99      \begin{tabular}{l|ccc}
100                                                     & 1 Core           & 2 Cores       & 4 Cores       \\
101        \hline
102        \hline
103        largeur                                      & 8                & 4             & 2             \\
104        largeur des fenêtres                         & 16               & 8             & 4             \\
105        \hline
106        taille - ifetch\_queue                       & 8                & 4             & 2             \\
107        taille - decod\_queue                        & 16               & 8             & 4             \\
108        taille - rename\_queue                       & 32               & 16            & 8             \\
109        taille - Re Order Buffer                     & 128              & 64            & 32            \\
110        \hline
111        Branch Target Buffer                         & 256              & 128           & 64            \\
112        nb compteur 2bits (predicteur meta)          & 128              & 64            & 32            \\
113        nb compteur 2bits (predicteur global)        & 1K               & 512           & 256           \\
114        nb compteur 2bits (predicteur local)         & 16k              & 8k            & 4k            \\
115        \hline
116        nb\_branch\_complete                         & 4                & 2             & 1             \\
117        nb\_memory\_complete                         & 4                & 2             & 1             \\
118        \hline
119        nb\_gpr\_phy                                 & 128+128          & 64+64         & 32+32         \\
120        nb\_gpr\_free                                & 8                & 4             & 2             \\
121        nb\_spr\_phy                                 & 64               & 32            & 64            \\
122        nb\_spr\_free                                & 8                & 4             & 2             \\   
123      \end{tabular}
124    }
125
126\frame
127    {
128      \frametitle{Architecture de référence - Système mémoire}
129
130      \begin{tabular}{l|ll}
131                             & L1          & L2             \\
132                             & I/D séparé  & unifié         \\
133        \hline
134        Taille               & 8 ko        & 2 Mo           \\
135        Nombre de lignes     & 128*        & 16k            \\
136        Nombre de mots/ligne & 16          & 32             \\
137        Associatif           & 4 voies     & 4 voies        \\
138        Latence - Hit        & 2 cycles    & 6 cycles       \\
139        Pénalités - Miss     & 4 cycles    & 100 cycles     \\
140      \end{tabular}
141
142      \vspace{\stretch{1}}
143
144      Les caches IL1 et DL1 sont dupliqués NB\_CLUSTER fois, de plus chacun ont leur nombre de lignes divisé par NB\_CLUSTER. De même pour les ports du Dcache (nb\_data\_access).
145    }
146
147\frame
148    {
149      \frametitle{Méthodologie}
150
151      Pour chaque instance
152      \begin{itemize}
153      \item On réalise autant de simulations qu'il y a de charge de travail (soit 15).
154      \item Une execution se fait en 11 millions de cycles dans lequel 1 millions ne sera pas prit en compte
155      \item Nous prenons le temps moyen sur ces 15 simulations et on le compare à la moyenne de ces 6 benchmarks exécuter dans la version ST du processeur
156      \item La comparaison donne le speedup de la version MT par rapport à la version ST
157      \end{itemize}
158    }
159
160\section{Résultat}
161
162\frame
163    {
164      \frametitle{Résultat}
165
166        \begin{center}
167          \printgraph{simulation_all}{0.8}
168        \end{center}
169
170    }
171
172\frame
173    {
174      \begin{minipage}{0.45\textwidth}
175        \begin{center}
176          \printgraph{simulation_cachel1}{0.8}
177        \end{center}
178      \end{minipage}
179      \begin{minipage}{0.45\textwidth}
180        Partage du cache induit :
181        \begin{itemize}
182          \item un conflit d'accès au port
183          \item un pourrissement des données par les autre contextes
184          \item 
185        \end{itemize}
186      \end{minipage}
187    }
188
189\frame
190    {
191      \begin{minipage}{0.45\textwidth}
192        \begin{center}
193          \printgraph{simulation_operative}{0.8}
194        \end{center}
195      \end{minipage}
196      \begin{minipage}{0.45\textwidth}
197        Partage de la partie opérative induit
198        \begin{itemize}
199          \item Une augmentation de l'influence des instructions mal prédite
200          \item Une augmentation de la sensiblité au évenement peu courant (synchronisation, ...)
201        \end{itemize}
202      \end{minipage}
203    }
204
205\frame
206    {
207      \begin{minipage}{0.45\textwidth}
208        \begin{center}
209          \printgraph{simulation_ue}{0.8}
210        \end{center}
211      \end{minipage}
212      \begin{minipage}{0.45\textwidth}
213        Partage des unités d'exécutions
214        \begin{itemize}
215          \item Augmente leur taux d'utilisations
216          \item Augmente la sensiblité dut au erreur de routage (envoye vers une unité surchargé alors que d'autre sont en famine d'instructions)
217        \end{itemize}
218      \end{minipage}
219    }
220
221\section{Réalisation VHDL}
222
223\frame
224    {
225      \frametitle{Réalisation VHDL}
226     
227      Les modèles vont être générés par des méthodes du modeles SystemC afin d'obtenir du VHDL classique
228    }
229
230\subsection{Regroupement d'instruction}
231\frame
232    {
233      \frametitle{Regroupement d'instruction}
234
235      Les processeurs à contrôle dynamique (superscalaire classique) ou à contrôle statique (VLIW) résolvent différemment le problème du lancement multiple d'instructions.
236
237      L'avantage principal du VLIW étant sa simplicité de ses unités de contrôles : les instructions sont dans des slots précaractérisés.
238    }
239
240\frame
241    {
242      \frametitle{Nouvel étage : {\it Group}}
243
244      \begin{itemize}
245      \item Entrée : A paquets contenant N éléments
246      \item Sortie : B paquets contenant M éléments
247      \item 1 élément soit un paquet d'éléments soit une instruction
248      \item Algorithme de paquétisation libre
249      \item Simplification : M est un multiple de N paquets
250      \end{itemize}
251    }
252   
253\frame
254    {
255      \frametitle{Etage {\it Group1}}
256
257      Situé après l'étage de décodage
258     
259      \begin{itemize}
260      \item Les paquets sont formée d'instructions consécutive (car non encore inséré dans le ReOrder Buffer)
261      \item Un paquet contient des instructions indépendants
262      \item Les paquets suivent des règles de Types (Suivant les routages possibles et des types des unités d'éxecutions)
263      \end{itemize}
264    }
265
266\frame
267    {
268      \begin{itemize}
269      \item + Simplification de la logique de gestion des dépendances RAW et WAW proche (comparaison sur les numéros de registres logiques)
270      \item + Une potentiel simplification du RAT si l'algorithme prends en compte de définir un seuil maximum du nombre de lecture/écriture
271      \item + ReOrder Buffer simplifié, les requêtes d'insertion et de retirement sont sur des paquets
272      \item - Insertion de Nop
273      \item - Paquetisation dans l'ordre du programme (Peu ou pas de liberté dans l'algo de paquétisations)
274      \end{itemize}
275    }
276
277\frame
278    {
279      \frametitle{Etage {\it Group2}}
280
281      Situé après l'insertion dans le ReOrder Buffer
282     
283      \begin{itemize}
284      \item + L'algorhtme de paquétisations à de plus grand degré de liberté (Car peut prendre les paquets dans le désordre)
285      \item + Diminution du contrôle pour les étages de sélection
286      \item - Encore plus de Nop inséré
287      \item - Performance de la paquetisation lié au nombre d'instruction en attente dans la rename\_queue et à la fenêtre d'instruction
288      \end{itemize}
289    }
290
291\frame
292    {
293      \printgraph{MORPHEO_paquetisation}{0.5}
294    }
295
296\frame
297    {
298      \frametitle{Incidence}
299
300      \begin{enumerate}
301      \item L'accès au banc de registres en lecture se fait sur un paquet entier? Si une des instructions n'a pas ses opérandes?
302      \item L'écriture dans le banc de registres se fait sur un paquet entier?
303      \item Plusieurs niveaux de dispatch, clusterisation implicite des unités fonctionnelles
304      \item Attendre la fin d'un paquet de niveau 2, alors que l'étage Commit n'a besoin que de paquet de niveau 1?
305      \end{enumerate}
306    }
307
308
309\subsection{Partage des ensembles associatifs}
310\frame
311    {
312      \frametitle{Partage des ensembles associatifs}
313
314      Soit une structure associative par ensemble (par exemple le cache ou la Branch Target Buffer)
315
316      Posons :
317      \begin{itemize}
318      \item E le nombre d'entité accédant à cette structure
319      \item P le nombre de port nécessaire pour chaque entité (on posera P identique pour chaque E)
320      \item N le degré d'associativité de la structure
321      \end{itemize}
322    }
323
324\frame
325    {
326      \frametitle{Structure complémentement partagée}
327
328      La structure est ici entièrement partagé entre toutes les entités.
329
330      \printgraph{MORPHEO_structure_associative_full_share}{0.8}
331
332      \begin{center}
333        $P_{total1} = E*N*P$
334      \end{center}
335    }
336
337\frame
338    {
339      \frametitle{Structure partiellement partagée}
340
341      Nous allons maintenant décomposer la structure en deux parties :
342      \begin{enumerate}
343        \item une première qui est accessible par toutes les entités et sera associative de degré M
344        \item la seconde est accessible par X sous-ensemble d'entité. Chaque groupe sont disjoint 2 à 2 et contient E' élément (donc $X=\frac{E}{E'}$). Dans chaque groupe il y a une structure associative de degré K
345        \item Pour simplifier : $N=M+X*K$ avec E' et K et constant pour chaque groupe
346      \end{enumerate}
347    }
348
349\frame
350    {
351      \printgraph{MORPHEO_structure_associative_semi_share}{0.8}
352      \begin{center}
353        $P_{total2} = E*(M+K)*P$
354      \end{center}
355    }
356
357\frame
358    {
359      \frametitle{Gain}
360      \begin{center}
361        $P_{total1} - P_{total2} = E*(\frac{E}{E'}-1)*K*P$
362      \end{center}
363
364      Soit dans les deux exemples précédents :
365
366      \begin{center}
367      \begin{tabular}{l|cc}
368              & Full shared  & Semi shared       \\
369        \hline                                   
370        N     & 8            & $M+X*K = 8$       \\
371        M     & -            & 4                 \\
372        K     & -            & 2                 \\
373        E     & 6            & 6                 \\
374        E'    & -            & 3                 \\
375        \hline
376        Total & $E*N*P$      & $E*(M+K)*P$       \\
377              & $48*P$       & $36*P$            \\
378        \hline
379        Gain  & \multicolumn{2}{c}{$E*(\frac{E}{E'}-1)*K*P$}\\
380              & \multicolumn{2}{c}{$12*P$}                  \\
381      \end{tabular}
382      \end{center}
383    }
384
385\frame
386    {
387      \frametitle{Incidence}
388
389      \begin{itemize}
390        \item + Gain en nombre de port
391        \item + Moins de pourrisement des structures dut au partage des ressources
392        \item - Perte de performance en execution ST, et potentiellement en execution MT
393      \end{itemize}
394    }
395
396
397\subsection{Clusterisation des Unités d'éxecution - Cache de banc de registres}
398\frame
399    {
400      \begin{minipage}{0.55\textwidth}
401      \frametitle{Partie exécutive \dots}
402      \printgraph{MORPHEO_Partie_executive-schema_de_principe}{0.65}
403      \end{minipage}
404      \begin{minipage}{0.40\textwidth}
405        Posons :
406        \begin{itemize}
407          \item $N = \sum_{i=1}^{k} n_{i}$
408          \item $M = \sum_{i=1}^{k} m_{i}$
409          \item W : Nb reg dest
410          \item R : Nb reg src
411          \item D : Profondeur SR
412        \end{itemize}
413      \end{minipage}
414    }
415
416\frame
417    {
418      \frametitle{\dots ~ avec un réseaux de bypass complet}
419
420      \begin{center}
421        \printgraph{MORPHEO_Partie_executive-bypass_complet}{0.6}
422      \end{center}
423    }
424
425\frame
426    {
427      \frametitle{\dots ~ avec clusterisation}
428
429      \begin{minipage}{0.48\textwidth}
430        \begin{center}
431          \printgraph{MORPHEO_Partie_executive-cluster}{0.6}
432        \end{center}
433      \end{minipage}
434      \begin{minipage}{0.48\textwidth}
435        En posant :
436
437        \begin{itemize}
438          \item V  : le nombre de voisin
439          \item M' : le nombre de résultat circulant entre les clusters
440        \end{itemize}
441      \end{minipage}
442    }
443
444\frame
445    {
446      \frametitle{\dots ~ avec cache de banc de registres}
447
448      \begin{center}
449        \begin{minipage}{0.48\textwidth}
450          \printgraph{MORPHEO_Partie_executive-cluster_avec_cache1}{0.6}
451        \end{minipage}
452        \begin{minipage}{0.48\textwidth}
453          \printgraph{MORPHEO_Partie_executive-cluster_avec_cache2}{0.6}
454        \end{minipage}
455      \end{center}
456    }
457
458%\frame
459%    {
460%      \frametitle{Comparaison}
461%
462%      Posons S le nombre de registres physiques.
463%
464%      Avec :
465%      \begin{center}
466%       \begin{tabular}{lc}
467%         sff2 & 34 transistors\\
468%         nmx2 & 12 transistors\\
469%       \end{tabular}
470%      \end{center}
471%
472%      Avec :
473%      \begin{itemize}
474%       \item R = 2
475%       \item W = 1
476%       \item $\forall i,j \in [1:k[ ~ n_{i}=n_{j}$, avec M = 12
477%       \item $\forall i,j \in [1:k[ ~ m_{i}=m_{j}$, avec N = 8
478%       %\item $\forall i   \in [1:k[ ~ D_{i}=D$
479%      \end{itemize}
480%       
481%      Taille du Banc de registres : $S * Size_{sff2} + ((W_{RF}-1)*S + R_{RF}*(S-1)) * Size_{nmx2}$
482%
483%
484%     }
485
486\frame
487    {     
488      \frametitle{Comparaison}
489
490      \begin{center}
491        \begin{tabular}{l|c}
492                      & nb bypass       \\
493          \hline
494          Complete    & $(W*M)*(R*D*N)$ \\
495          Clusterisé  & $\sum_{i=1}^{k} ((W*m_{i} + V*B) * R*D*m_{i})$\\
496          Cache 1     & $\sum_{i=1}^{k} (W*m_{i} * R*D*m_{i})$\\
497          Cache 2     & $0$\\
498        \end{tabular}
499
500        \begin{tabular}{l|c}
501                      & Banc de registres \\
502          \hline
503          Complete    & $(W*M)$ port d'écriture, $(R*N)$ de lecture\\
504          Clusterisé  & Bonne cible pour le multi banc      \\
505          Cache 1     & 1 port de lecture, 1 port d'écriture\\
506          Cache 2     & 1 port de lecture, 1 port d'écriture\\
507        \end{tabular}
508
509      \end{center}
510
511
512    }
513
514
515\section{Planning}
516\frame
517    {
518      \frametitle{Tâche à réaliser}
519
520      \begin{enumerate}
521      \item Réecriture complete du code SystemC
522        \begin{itemize}
523        \item Compatibilité avec SystemCass
524        \item Optimisation du code et des algorithmes
525        \item Mise en forme pour l'exportation du projet
526        \item Définition d'un format pour la configuration
527        \item Définition d'un format pour les statistiques
528        \end{itemize}
529      \item Ecriture systématique de la documentation pour chaque composant
530        \begin{itemize}
531        \item Structure interne
532        \item Incidence des paramètres sur la structure (Surface et Temps d'execution)
533        \item Choix architecturaux pour le passage au VHDL
534        \end{itemize}
535      \item Ecriture des modèles VHDL et synthèse sur FPGA
536      \end{enumerate}
537    }
538
539\frame
540    {
541      \frametitle{Tâche déléguée}
542
543      \begin{enumerate}
544      \item Ecriture d'un cache de donnée en SystemC/VHDL
545      \item Ecriture d'un cache d'instruction en VHDL
546      \item Automatisation du processus d'optimisation de la configuration en fonction des statistiques et de contraintes
547      \item Synthèse des modèles VHDL avec Coriolis
548      \end{enumerate}
549    }
Note: See TracBrowser for help on using the repository browser.