[15] | 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} |
---|