source: trunk/doc/rapport.tex

Last change on this file was 15, checked in by guillaumeb, 15 years ago

ajout du rapport

File size: 11.2 KB
Line 
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}
86Les nouvelles architectures de microprocesseurs sont de plus en plus complexes
87et de plus en plus variées.  L'approche des limites physiques, notamment en
88fréquence, des microprocesseurs a poussé les concepteurs a créer des
89architectures multic\oe urs, afin de délivrer plus de puissance, et ce, non
90seulement dans les PC, mais de plus en plus dans les systÚmes embarqués tels
91que les téléphones récents, baladeurs multimédia, etc.
92
93Ces architectures multic\oe urs peuvent adopter des structures différentes, par
94exemple, différents niveaux de cache, certains caches partagés entre les c\oe
95urs\ldots 
96
97Afin de tirer parti des performances, les compilateurs doivent
98intégrer ces différences, et proposer des algorithmes d'optimisations adaptés à
99ces architectures. De même, les programmeurs pourront désirer optimiser leurs
100applications pour un micro-processeur en particulier.
101
102La simulation du \textit{CPU} permet de résoudre ce problÚme, puisqu'elle
103permet un \textit{profiling} trÚs avancé, en simulant le fonctionnement de
104toute l'architecture, en recueillant des statistiques d'utilisation, un
105diagnostic aussi complet que le souhaite l'utilisateur.
106
107Cependant, la simulation d'une architecture complÚte est trÚs lente, et source
108de nombreuses approximations, voire d'erreurs, du fait de l'impossibilité de
109simuler un processeur transistor par transistor.  En effet, les résultats
110expérimentaux de simulateurs précis au cycle (\textit{cycle accurate}) montrent
111que la simulation est trÚs approximative.  Les simulateurs les plus répandus,
112lorsqu'ils permettent de simuler une architecture multic\oe ur, se montrent
113d'autant plus lents que le nombre de c\oe urs à simuler est élevé.
114
115Afin de palier aux défauts de ce type de simulation, on se propose de ne
116simuler qu'un modÚle trÚs simplifié d'architecture, dans laquelle on se
117focalise sur la hiérarchie mémoire. On peut ainsi étudier le comportement de la
118mémoire pour optimiser cet aspect indépendamment des autres.
119
120\section{État de l'art}
121Les simulateurs sont des logiciels extrémement complexes et sont trÚs longs
122à développer. Parmi les plus connus, SimpleScalar est assez rapide mais
123est incapable, sans extension de simuler un systÚme multiprocesseur. C'est,
124de plus, un logiciel monolithique et donc difficile à modifier.
125Au contraire, unisim est conçu autour d'un framework trÚs ouvert, il facilite
126la réutilisation de code et la modularité, et peut simuler un systÚme
127multi-processeur. Cependant, c'est un simulateur \textit{cycle accurate} qui
128simule tous les aspects documentés d'une architecture, ce qui ne correspond
129pas à nos attentes, et aurait requis des modifications importantes.
130Enfin, Simics est réputé trÚs rapide, est capable de gérer de nombreuses
131architectures y compris des architectures multic\oe ur, mais c'est un logiciel
132propriétaire que nous n'avons pas à disposition.
133
134
135\section{Objectifs}
136Les objectifs de ce projet sont de créer un simulateur pour une architecture
137multic\oe ur, reposant sur un modÚle trÚs simplifié dans lequel la hiérarchie
138mémoire sera prédominante.
139
140Le simulateur doit prendre en charge une hiérarchie de cache entiÚrement
141paramé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
145ou bien les séparer.
146\item les latences induites par le chargement d'une donnée dans un cache seront
147spécifiées manuellement, et donc la gestion électronique sous-jancente ne
148sera pas simulées.
149\end{itemize}
150
151Étant donné un programme séparé en plusieurs sous-programmes,
152chacun s'exécutant sur un c\oe ur, on estimera le nombre de hits et miss
153obtenus dans chacun des niveaux de cache, ainsi qu'une estimation du temps
154total d'exécution du programme.
155
156
157On évaluera ensuite la pertinence des informations obtenues par cette
158simulation en tant que mesure approximative des performances du programme
159simulé.
160
161%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
162% Proposition d'une solution de principe
163%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
164\chapter{Solution de principe}
165\section{Présentation}
166La modélisation du cache s'effectue avec des modules SystemC. Un module
167représentant le micro-processeur est chargé d'éxécuter un programme exécutable
168ou plusieurs programmes exécutables.
169
170Le modÚle simplifié ne comprendra pas de directives internes permettant le
171lancement de thread et de verrous. Il ne tiendra pas compte des dépendances
172entre instructions.
173
174Le modÚle simplifié ne tiendra compte que du cache de données; on ne prendra
175donc pas compte du cache d'instruction, on n'effectuera pas de prédiction de
176branchement.
177
178On cherche à se limiter au strict minimum au niveau de la gestion des
179instructions, cependant, il n'est pas envisageable de ne simuler que les
180instructions \textit{load} et \textit{store} : il faut simuler le comportement
181correct du programme.
182
183Différentes stratégies pour résoudre ce problÚme seront étudiées durant
184la seconde période du stage, parmi celles-ci, on peut suivre les pistes
185suivantes :
186\begin{itemize}
187\item une instrumentation d'un exécutable natif existant, d'une maniÚre
188similaire à \textit{Valgrind}.
189\item une émulation des autres instructions d'un processeur déterminé.
190\item \ldots
191\end{itemize}
192
193L'implémentation sera effectuée en SystemC, tout en essayant de limiter
194les fonctionnalités de SystemC qui sont les plus coûteuses en temps d'exécution
195
196\section{Détails}
197Le simulateur est décomposé en plusieurs module SystemC :
198\begin{itemize}
199\item un module représentant un processeur qui traite les instructions et
200envoie des requêtes au cache qui lui est connecté
201\item un module représentant un cache L1 qui doit être connecté au processeur
202et à un autre cache ou la mémoire
203\item un module représentant un cache L2 ou L3, qui doit être connecté
204a un autre cache (L1 ou autre), et à la mémoire
205\end{itemize}
206
207Chacun des caches gÚre une file d'attente de requêtes en entrée et en sortie :
208la file limite le nombre de requêtes en cours de traitement dans le cache de
209niveau supérieur.
210
211Une liste interne, la \textit{ProcessingQueue} permet de simuler le délai de
212chargement 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
222Un 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
236Les principales tâches à accomplir sont essentiellement l'étude précise du cadre
237de simulation du processeur et une implémentation.
238
239Les pistes envisagées sont le développement d'une instrumentation d'exécutable
240d'une maniÚre similaire à valgrind et l'émulation. L'instrumentation d'exécutable
241demande d'avoir à sa disposition le processeur que l'on simule, ce qui limite
242légÚrement l'intérêt d'une simulation. L'autre solution est l'émulation, mais
243elle requiert de se concentrer sur un jeu d'instruction particulier pour être
244ré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}
256Les résultats seront partiellement validés automatiquement : une petite suite
257de tests permet de valider des petits programmes afin de vérifier les données
258recueillies par le simulateur, afin de les confronter à des résultats obtenus
259par 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
267Plusieurs configurations possibles seront testées :
268\begin{itemize}
269\item les différentes associativités (mapping direct, associativité complÚte,
270N-Way )
271\item différents niveaux de caches, qui pourront être partagés entre plusieurs
272c\oe urs ou bien indépendants.
273\end{itemize}
274
275\section{Validation des résultats}
276Des comparaisons des résultats et des performances avec d'autres simulateurs
277comme unisim permettront d'une part de mesurer le gain en performance de
278ce simulateur, mais aussi d'estimer la précision des mesures se focalisant sur
279l'aspect mémoire, et de constater dans quelle mesure les performances
280d'une application sont représentées par l'utilisation optimale ou non de
281l'aspect mémoire.
282
283\end{document}
Note: See TracBrowser for help on using the repository browser.