1 | \documentclass [12pt, a4paper, twoside] {report} |
---|
2 | |
---|
3 | |
---|
4 | \usepackage{lettrine} |
---|
5 | \usepackage[utf8]{inputenc} |
---|
6 | \usepackage[T1]{fontenc} |
---|
7 | \usepackage{palatino} |
---|
8 | \usepackage{fancyhdr} |
---|
9 | \usepackage{float} |
---|
10 | \usepackage{subfigure} |
---|
11 | \usepackage{wrapfig} |
---|
12 | \usepackage{graphicx} |
---|
13 | \usepackage[french]{babel} |
---|
14 | \usepackage{amsmath} % |
---|
15 | |
---|
16 | % correct bad hyphenation here |
---|
17 | \hyphenation{} |
---|
18 | |
---|
19 | \setlength{\topmargin}{0cm} |
---|
20 | \setlength{\headheight}{1cm} |
---|
21 | \setlength{\textheight}{23cm} |
---|
22 | \setlength{\textwidth}{16cm} |
---|
23 | \setlength{\oddsidemargin}{0cm} |
---|
24 | \setlength{\evensidemargin}{0cm} |
---|
25 | \setlength{\columnsep}{0.125in} |
---|
26 | \setlength{\columnseprule}{0.5pt} |
---|
27 | \setlength{\footskip}{1cm} |
---|
28 | |
---|
29 | \sloppy |
---|
30 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
31 | \begin{document} |
---|
32 | \begin{titlepage} |
---|
33 | {\begin{center} \huge \textsf {Université Pierre et Marie Curie} \end{center}} |
---|
34 | \vspace{0.4cm} |
---|
35 | {\begin{center} \huge \textsf {MastÚre de sciences et technologies} \end{center}} |
---|
36 | \vspace{0.4cm} |
---|
37 | {\begin{center} \large \textbf{Mention Informatique - Spécialité STL\\2008 -- 2009} \end{center}} |
---|
38 | \vspace{0.4cm} |
---|
39 | {\begin{center} \huge \textsf {Spécialité : APR } \end{center}} |
---|
40 | \vspace{0.4cm} |
---|
41 | {\begin{center} \Huge \textbf{Simulation d'architectures multic\oe urs pour la parallélisation et l'optimisation de programmes} \end{center}} |
---|
42 | \vspace{0.4cm} |
---|
43 | {\begin{center} \huge \textsc{Rapport de Présoutenance} \end{center}} |
---|
44 | \vspace{0.4cm} |
---|
45 | {\begin{center} \large \textsf {date exposé 2009 } \end{center}} |
---|
46 | \vspace{0.4cm} |
---|
47 | {\begin{center} \Large \textsc{Présenté Par} \end{center}} |
---|
48 | {\begin{center} \huge \textsc{Guillaume Bau} \end{center}} |
---|
49 | \vspace{0.4cm} |
---|
50 | {\begin{center} \Large \textsc{Encadrants} \end{center}} |
---|
51 | {\begin{center} \Large \textsc{Karine Heydemann} \end{center}} |
---|
52 | {\begin{center} \Large \textsc{Nathalie Drach} \end{center}} |
---|
53 | {\begin{center} \large \textsf{Laboratoire d'accueil : LIP6 - Département SystÚmes embarqués sur puce } \end{center}} |
---|
54 | \end{titlepage} |
---|
55 | |
---|
56 | \author{} |
---|
57 | |
---|
58 | %\pagestyle{plain} |
---|
59 | |
---|
60 | |
---|
61 | \newpage |
---|
62 | \pagestyle{headings} |
---|
63 | %\fancyhf{} |
---|
64 | %\fancyhead[R]{\slshape \thepage} |
---|
65 | |
---|
66 | \setcounter{page}{1} |
---|
67 | \pagenumbering{Roman} |
---|
68 | \tableofcontents |
---|
69 | |
---|
70 | \newpage |
---|
71 | |
---|
72 | \listoffigures |
---|
73 | |
---|
74 | \newpage |
---|
75 | |
---|
76 | \setcounter{page}{1} |
---|
77 | \pagenumbering{arabic} |
---|
78 | |
---|
79 | |
---|
80 | |
---|
81 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
82 | % Définition et analyse du problÚme |
---|
83 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
84 | \chapter{Introduction} |
---|
85 | \section{Présentation} |
---|
86 | Les nouvelles architectures de microprocesseurs sont de plus en plus complexes |
---|
87 | et de plus en plus variées. L'approche des limites physiques, notamment en |
---|
88 | fréquence, des microprocesseurs a poussé les concepteurs a créer des |
---|
89 | architectures multic\oe urs, afin de délivrer plus de puissance, et ce, non |
---|
90 | seulement dans les PC, mais de plus en plus dans les systÚmes embarqués tels |
---|
91 | que les téléphones récents, baladeurs multimédia, etc. |
---|
92 | |
---|
93 | Ces architectures multic\oe urs peuvent adopter des structures différentes, par |
---|
94 | exemple, différents niveaux de cache, certains caches partagés entre les c\oe |
---|
95 | urs\ldots |
---|
96 | |
---|
97 | Afin de tirer parti des performances, les compilateurs doivent |
---|
98 | intégrer ces différences, et proposer des algorithmes d'optimisations adaptés à |
---|
99 | ces architectures. De même, les programmeurs pourront désirer optimiser leurs |
---|
100 | applications pour un micro-processeur en particulier. |
---|
101 | |
---|
102 | La simulation du \textit{CPU} permet de résoudre ce problÚme, puisqu'elle |
---|
103 | permet un \textit{profiling} trÚs avancé, en simulant le fonctionnement de |
---|
104 | toute l'architecture, en recueillant des statistiques d'utilisation, un |
---|
105 | diagnostic aussi complet que le souhaite l'utilisateur. |
---|
106 | |
---|
107 | Cependant, la simulation d'une architecture complÚte est trÚs lente, et source |
---|
108 | de nombreuses approximations, voire d'erreurs, du fait de l'impossibilité de |
---|
109 | simuler un processeur transistor par transistor. En effet, les résultats |
---|
110 | expérimentaux de simulateurs précis au cycle (\textit{cycle accurate}) montrent |
---|
111 | que la simulation est trÚs approximative. Les simulateurs les plus répandus, |
---|
112 | lorsqu'ils permettent de simuler une architecture multic\oe ur, se montrent |
---|
113 | d'autant plus lents que le nombre de c\oe urs à simuler est élevé. |
---|
114 | |
---|
115 | Afin de palier aux défauts de ce type de simulation, on se propose de ne |
---|
116 | simuler qu'un modÚle trÚs simplifié d'architecture, dans laquelle on se |
---|
117 | focalise sur la hiérarchie mémoire. On peut ainsi étudier le comportement de la |
---|
118 | mémoire pour optimiser cet aspect indépendamment des autres. |
---|
119 | |
---|
120 | \section{Ãtat de l'art} |
---|
121 | Les simulateurs sont des logiciels extrémement complexes et sont trÚs longs |
---|
122 | à développer. Parmi les plus connus, SimpleScalar est assez rapide mais |
---|
123 | est incapable, sans extension de simuler un systÚme multiprocesseur. C'est, |
---|
124 | de plus, un logiciel monolithique et donc difficile à modifier. |
---|
125 | Au contraire, unisim est conçu autour d'un framework trÚs ouvert, il facilite |
---|
126 | la réutilisation de code et la modularité, et peut simuler un systÚme |
---|
127 | multi-processeur. Cependant, c'est un simulateur \textit{cycle accurate} qui |
---|
128 | simule tous les aspects documentés d'une architecture, ce qui ne correspond |
---|
129 | pas à nos attentes, et aurait requis des modifications importantes. |
---|
130 | Enfin, Simics est réputé trÚs rapide, est capable de gérer de nombreuses |
---|
131 | architectures y compris des architectures multic\oe ur, mais c'est un logiciel |
---|
132 | propriétaire que nous n'avons pas à disposition. |
---|
133 | |
---|
134 | |
---|
135 | \section{Objectifs} |
---|
136 | Les objectifs de ce projet sont de créer un simulateur pour une architecture |
---|
137 | multic\oe ur, reposant sur un modÚle trÚs simplifié dans lequel la hiérarchie |
---|
138 | mémoire sera prédominante. |
---|
139 | |
---|
140 | Le simulateur doit prendre en charge une hiérarchie de cache entiÚrement |
---|
141 | paramétrable : |
---|
142 | \begin{itemize} |
---|
143 | \item on pourra définir une hiérarchie de deux, trois, \ldots \ niveaux de caches. |
---|
144 | \item on pourra choisir de partager les cache d'un niveau entre plusieurs c\oe urs |
---|
145 | ou bien les séparer. |
---|
146 | \item les latences induites par le chargement d'une donnée dans un cache seront |
---|
147 | spécifiées manuellement, et donc la gestion électronique sous-jancente ne |
---|
148 | sera pas simulées. |
---|
149 | \end{itemize} |
---|
150 | |
---|
151 | Ãtant donné un programme séparé en plusieurs sous-programmes, |
---|
152 | chacun s'exécutant sur un c\oe ur, on estimera le nombre de hits et miss |
---|
153 | obtenus dans chacun des niveaux de cache, ainsi qu'une estimation du temps |
---|
154 | total d'exécution du programme. |
---|
155 | |
---|
156 | |
---|
157 | On évaluera ensuite la pertinence des informations obtenues par cette |
---|
158 | simulation en tant que mesure approximative des performances du programme |
---|
159 | simulé. |
---|
160 | |
---|
161 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
162 | % Proposition d'une solution de principe |
---|
163 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
164 | \chapter{Solution de principe} |
---|
165 | \section{Présentation} |
---|
166 | La modélisation du cache s'effectue avec des modules SystemC. Un module |
---|
167 | représentant le micro-processeur est chargé d'éxécuter un programme exécutable |
---|
168 | ou plusieurs programmes exécutables. |
---|
169 | |
---|
170 | Le modÚle simplifié ne comprendra pas de directives internes permettant le |
---|
171 | lancement de thread et de verrous. Il ne tiendra pas compte des dépendances |
---|
172 | entre instructions. |
---|
173 | |
---|
174 | Le modÚle simplifié ne tiendra compte que du cache de données; on ne prendra |
---|
175 | donc pas compte du cache d'instruction, on n'effectuera pas de prédiction de |
---|
176 | branchement. |
---|
177 | |
---|
178 | On cherche à se limiter au strict minimum au niveau de la gestion des |
---|
179 | instructions, cependant, il n'est pas envisageable de ne simuler que les |
---|
180 | instructions \textit{load} et \textit{store} : il faut simuler le comportement |
---|
181 | correct du programme. |
---|
182 | |
---|
183 | Différentes stratégies pour résoudre ce problÚme seront étudiées durant |
---|
184 | la seconde période du stage, parmi celles-ci, on peut suivre les pistes |
---|
185 | suivantes : |
---|
186 | \begin{itemize} |
---|
187 | \item une instrumentation d'un exécutable natif existant, d'une maniÚre |
---|
188 | similaire à \textit{Valgrind}. |
---|
189 | \item une émulation des autres instructions d'un processeur déterminé. |
---|
190 | \item \ldots |
---|
191 | \end{itemize} |
---|
192 | |
---|
193 | L'implémentation sera effectuée en SystemC, tout en essayant de limiter |
---|
194 | les fonctionnalités de SystemC qui sont les plus coûteuses en temps d'exécution |
---|
195 | |
---|
196 | \section{Détails} |
---|
197 | Le simulateur est décomposé en plusieurs module SystemC : |
---|
198 | \begin{itemize} |
---|
199 | \item un module représentant un processeur qui traite les instructions et |
---|
200 | envoie des requêtes au cache qui lui est connecté |
---|
201 | \item un module représentant un cache L1 qui doit être connecté au processeur |
---|
202 | et à un autre cache ou la mémoire |
---|
203 | \item un module représentant un cache L2 ou L3, qui doit être connecté |
---|
204 | a un autre cache (L1 ou autre), et à la mémoire |
---|
205 | \end{itemize} |
---|
206 | |
---|
207 | Chacun des caches gÚre une file d'attente de requêtes en entrée et en sortie : |
---|
208 | la file limite le nombre de requêtes en cours de traitement dans le cache de |
---|
209 | niveau supérieur. |
---|
210 | |
---|
211 | Une liste interne, la \textit{ProcessingQueue} permet de simuler le délai de |
---|
212 | chargement d'une donnée dans le cache. |
---|
213 | |
---|
214 | \begin{figure}[!h] |
---|
215 | \center |
---|
216 | \includegraphics[scale=0.4]{rapport/intern_communication.png} |
---|
217 | \caption{Module représentant un cache L1} |
---|
218 | \end{figure} |
---|
219 | |
---|
220 | |
---|
221 | |
---|
222 | Un exemple de modélisation de cache pourrait être celui-ci : |
---|
223 | |
---|
224 | \begin{figure}[!h] |
---|
225 | \center |
---|
226 | \includegraphics[scale=0.5]{rapport/config_sample.png} |
---|
227 | \caption{Exemple de configuration de cache} |
---|
228 | \end{figure} |
---|
229 | |
---|
230 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
231 | % Identification des taches à accomplir |
---|
232 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
233 | \chapter{Tâches à accomplir et Planning} |
---|
234 | \section{Tâches à accomplir} |
---|
235 | |
---|
236 | Les principales tâches à accomplir sont essentiellement l'étude précise du cadre |
---|
237 | de simulation du processeur et une implémentation. |
---|
238 | |
---|
239 | Les pistes envisagées sont le développement d'une instrumentation d'exécutable |
---|
240 | d'une maniÚre similaire à valgrind et l'émulation. L'instrumentation d'exécutable |
---|
241 | demande d'avoir à sa disposition le processeur que l'on simule, ce qui limite |
---|
242 | légÚrement l'intérêt d'une simulation. L'autre solution est l'émulation, mais |
---|
243 | elle requiert de se concentrer sur un jeu d'instruction particulier pour être |
---|
244 | réalisée en un temps raisonnable. |
---|
245 | |
---|
246 | |
---|
247 | |
---|
248 | \section{Planning} |
---|
249 | |
---|
250 | |
---|
251 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
252 | % Procedure de recette |
---|
253 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
---|
254 | \chapter{Procédure de recette} |
---|
255 | \section{Validation du simulateur} |
---|
256 | Les résultats seront partiellement validés automatiquement : une petite suite |
---|
257 | de tests permet de valider des petits programmes afin de vérifier les données |
---|
258 | recueillies par le simulateur, afin de les confronter à des résultats obtenus |
---|
259 | par le calcul, par exemple : |
---|
260 | \begin{itemize} |
---|
261 | \item le nombre de \textit{hits} et de \textit{miss} |
---|
262 | \item le temps d'éxecution total estimé d'un programme. |
---|
263 | \end{itemize} |
---|
264 | \ |
---|
265 | |
---|
266 | |
---|
267 | Plusieurs configurations possibles seront testées : |
---|
268 | \begin{itemize} |
---|
269 | \item les différentes associativités (mapping direct, associativité complÚte, |
---|
270 | N-Way ) |
---|
271 | \item différents niveaux de caches, qui pourront être partagés entre plusieurs |
---|
272 | c\oe urs ou bien indépendants. |
---|
273 | \end{itemize} |
---|
274 | |
---|
275 | \section{Validation des résultats} |
---|
276 | Des comparaisons des résultats et des performances avec d'autres simulateurs |
---|
277 | comme unisim permettront d'une part de mesurer le gain en performance de |
---|
278 | ce simulateur, mais aussi d'estimer la précision des mesures se focalisant sur |
---|
279 | l'aspect mémoire, et de constater dans quelle mesure les performances |
---|
280 | d'une application sont représentées par l'utilisation optimale ou non de |
---|
281 | l'aspect mémoire. |
---|
282 | |
---|
283 | \end{document} |
---|