Index: trunk/doc/Makefile
===================================================================
--- trunk/doc/Makefile	(revision 14)
+++ trunk/doc/Makefile	(revision 15)
@@ -1,6 +1,11 @@
-all: slides.pdf
+all: slides.pdf rapport.pdf
 
 slides.pdf: slides.tex $(wildcard slides/*.tex)
 	pdflatex slides.tex
+	pdflatex rapport.tex
+
+rapport.pdf: rapport.tex
+	pdflatex rapport.tex
+	pdflatex rapport.tex
 
 clean:
Index: trunk/doc/rapport.tex
===================================================================
--- trunk/doc/rapport.tex	(revision 15)
+++ trunk/doc/rapport.tex	(revision 15)
@@ -0,0 +1,283 @@
+\documentclass [12pt, a4paper, twoside] {report}
+
+
+\usepackage{lettrine}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{palatino}
+\usepackage{fancyhdr}
+\usepackage{float}
+\usepackage{subfigure}
+\usepackage{wrapfig}
+\usepackage{graphicx}
+\usepackage[french]{babel}
+\usepackage{amsmath}   %
+
+% correct bad hyphenation here
+\hyphenation{}
+
+\setlength{\topmargin}{0cm}
+\setlength{\headheight}{1cm}
+\setlength{\textheight}{23cm}
+\setlength{\textwidth}{16cm}
+\setlength{\oddsidemargin}{0cm}
+\setlength{\evensidemargin}{0cm}
+\setlength{\columnsep}{0.125in}
+\setlength{\columnseprule}{0.5pt}
+\setlength{\footskip}{1cm}
+
+\sloppy
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\begin{titlepage}  
+  	{\begin{center} \huge \textsf {UniversitÃ© Pierre et Marie Curie} \end{center}}
+	\vspace{0.4cm}
+  	{\begin{center} \huge \textsf {MastÃšre de sciences et technologies} \end{center}}
+	\vspace{0.4cm}
+        {\begin{center} \large \textbf{Mention Informatique - SpÃ©cialitÃ© STL\\2008 -- 2009} \end{center}}
+	\vspace{0.4cm}
+  	{\begin{center} \huge \textsf {SpÃ©cialitÃ© : APR } \end{center}}
+        \vspace{0.4cm}
+        {\begin{center} \Huge \textbf{Simulation d'architectures multic\oe urs pour la parallÃ©lisation et l'optimisation de programmes} \end{center}}
+	\vspace{0.4cm}
+	{\begin{center} \huge \textsc{Rapport de PrÃ©soutenance} \end{center}}
+	\vspace{0.4cm}
+  	{\begin{center} \large \textsf {date exposÃ© 2009 } \end{center}}
+	\vspace{0.4cm}
+	{\begin{center} \Large \textsc{PrÃ©sentÃ© Par} \end{center}}
+	{\begin{center} \huge \textsc{Guillaume Bau} \end{center}}
+	\vspace{0.4cm}
+	{\begin{center} \Large \textsc{Encadrants} \end{center}}
+	{\begin{center} \Large \textsc{Karine Heydemann} \end{center}}
+	{\begin{center} \Large \textsc{Nathalie Drach} \end{center}}
+	{\begin{center} \large \textsf{Laboratoire d'accueil : LIP6 - DÃ©partement SystÃšmes embarquÃ©s sur puce } \end{center}}
+\end{titlepage}
+
+\author{}
+
+%\pagestyle{plain}
+
+
+\newpage
+\pagestyle{headings}
+%\fancyhf{}
+%\fancyhead[R]{\slshape \thepage}
+
+\setcounter{page}{1}
+\pagenumbering{Roman}
+\tableofcontents
+
+\newpage
+
+\listoffigures
+
+\newpage
+
+\setcounter{page}{1}
+\pagenumbering{arabic} 
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DÃ©finition et analyse du problÃšme
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Introduction}
+\section{PrÃ©sentation}
+Les nouvelles architectures de microprocesseurs sont de plus en plus complexes
+et de plus en plus variÃ©es.  L'approche des limites physiques, notamment en
+frÃ©quence, des microprocesseurs a poussÃ© les concepteurs a crÃ©er des
+architectures multic\oe urs, afin de dÃ©livrer plus de puissance, et ce, non
+seulement dans les PC, mais de plus en plus dans les systÃšmes embarquÃ©s tels
+que les tÃ©lÃ©phones rÃ©cents, baladeurs multimÃ©dia, etc. 
+
+Ces architectures multic\oe urs peuvent adopter des structures diffÃ©rentes, par
+exemple, diffÃ©rents niveaux de cache, certains caches partagÃ©s entre les c\oe
+urs\ldots  
+
+Afin de tirer parti des performances, les compilateurs doivent
+intÃ©grer ces diffÃ©rences, et proposer des algorithmes d'optimisations adaptÃ©s Ã 
+ces architectures. De mÃªme, les programmeurs pourront dÃ©sirer optimiser leurs
+applications pour un micro-processeur en particulier.
+
+La simulation du \textit{CPU} permet de rÃ©soudre ce problÃšme, puisqu'elle
+permet un \textit{profiling} trÃšs avancÃ©, en simulant le fonctionnement de
+toute l'architecture, en recueillant des statistiques d'utilisation, un
+diagnostic aussi complet que le souhaite l'utilisateur.
+
+Cependant, la simulation d'une architecture complÃšte est trÃšs lente, et source
+de nombreuses approximations, voire d'erreurs, du fait de l'impossibilitÃ© de
+simuler un processeur transistor par transistor.  En effet, les rÃ©sultats
+expÃ©rimentaux de simulateurs prÃ©cis au cycle (\textit{cycle accurate}) montrent
+que la simulation est trÃšs approximative.  Les simulateurs les plus rÃ©pandus,
+lorsqu'ils permettent de simuler une architecture multic\oe ur, se montrent
+d'autant plus lents que le nombre de c\oe urs Ã  simuler est Ã©levÃ©.
+
+Afin de palier aux dÃ©fauts de ce type de simulation, on se propose de ne
+simuler qu'un modÃšle trÃšs simplifiÃ© d'architecture, dans laquelle on se
+focalise sur la hiÃ©rarchie mÃ©moire. On peut ainsi Ã©tudier le comportement de la
+mÃ©moire pour optimiser cet aspect indÃ©pendamment des autres.
+
+\section{Ãtat de l'art}
+Les simulateurs sont des logiciels extrÃ©mement complexes et sont trÃšs longs
+Ã  dÃ©velopper. Parmi les plus connus, SimpleScalar est assez rapide mais
+est incapable, sans extension de simuler un systÃšme multiprocesseur. C'est,
+de plus, un logiciel monolithique et donc difficile Ã  modifier.
+Au contraire, unisim est conÃ§u autour d'un framework trÃšs ouvert, il facilite
+la rÃ©utilisation de code et la modularitÃ©, et peut simuler un systÃšme 
+multi-processeur. Cependant, c'est un simulateur \textit{cycle accurate} qui
+simule tous les aspects documentÃ©s d'une architecture, ce qui ne correspond
+pas Ã  nos attentes, et aurait requis des modifications importantes.
+Enfin, Simics est rÃ©putÃ© trÃšs rapide, est capable de gÃ©rer de nombreuses
+architectures y compris des architectures multic\oe ur, mais c'est un logiciel
+propriÃ©taire que nous n'avons pas Ã  disposition.
+
+
+\section{Objectifs}
+Les objectifs de ce projet sont de crÃ©er un simulateur pour une architecture
+multic\oe ur, reposant sur un modÃšle trÃšs simplifiÃ© dans lequel la hiÃ©rarchie
+mÃ©moire sera prÃ©dominante.
+
+Le simulateur doit prendre en charge une hiÃ©rarchie de cache entiÃšrement
+paramÃ©trable :
+\begin{itemize}
+\item on pourra dÃ©finir une hiÃ©rarchie de deux, trois, \ldots \ niveaux de caches. 
+\item on pourra choisir de partager les cache d'un niveau entre plusieurs c\oe urs
+ou bien les sÃ©parer.
+\item les latences induites par le chargement d'une donnÃ©e dans un cache seront
+spÃ©cifiÃ©es manuellement, et donc la gestion Ã©lectronique sous-jancente ne
+sera pas simulÃ©es. 
+\end{itemize}
+
+Ãtant donnÃ© un programme sÃ©parÃ© en plusieurs sous-programmes,
+chacun s'exÃ©cutant sur un c\oe ur, on estimera le nombre de hits et miss
+obtenus dans chacun des niveaux de cache, ainsi qu'une estimation du temps
+total d'exÃ©cution du programme.
+
+
+On Ã©valuera ensuite la pertinence des informations obtenues par cette
+simulation en tant que mesure approximative des performances du programme
+simulÃ©.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Proposition d'une solution de principe
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Solution de principe}
+\section{PrÃ©sentation}
+La modÃ©lisation du cache s'effectue avec des modules SystemC. Un module
+reprÃ©sentant le micro-processeur est chargÃ© d'Ã©xÃ©cuter un programme exÃ©cutable
+ou plusieurs programmes exÃ©cutables.
+
+Le modÃšle simplifiÃ© ne comprendra pas de directives internes permettant le 
+lancement de thread et de verrous. Il ne tiendra pas compte des dÃ©pendances
+entre instructions.
+
+Le modÃšle simplifiÃ© ne tiendra compte que du cache de donnÃ©es; on ne prendra
+donc pas compte du cache d'instruction, on n'effectuera pas de prÃ©diction de
+branchement.
+
+On cherche Ã  se limiter au strict minimum au niveau de la gestion des
+instructions, cependant, il n'est pas envisageable de ne simuler que les
+instructions \textit{load} et \textit{store} : il faut simuler le comportement
+correct du programme.
+
+DiffÃ©rentes stratÃ©gies pour rÃ©soudre ce problÃšme seront Ã©tudiÃ©es durant
+la seconde pÃ©riode du stage, parmi celles-ci, on peut suivre les pistes 
+suivantes :
+\begin{itemize}
+\item une instrumentation d'un exÃ©cutable natif existant, d'une maniÃšre
+similaire Ã  \textit{Valgrind}.
+\item une Ã©mulation des autres instructions d'un processeur dÃ©terminÃ©.
+\item \ldots
+\end{itemize}
+
+L'implÃ©mentation sera effectuÃ©e en SystemC, tout en essayant de limiter
+les fonctionnalitÃ©s de SystemC qui sont les plus coÃ»teuses en temps d'exÃ©cution
+
+\section{DÃ©tails}
+Le simulateur est dÃ©composÃ© en plusieurs module SystemC :
+\begin{itemize}
+\item un module reprÃ©sentant un processeur qui traite les instructions et
+envoie des requÃªtes au cache qui lui est connectÃ©
+\item un module reprÃ©sentant un cache L1 qui doit Ãªtre connectÃ© au processeur
+et Ã  un autre cache ou la mÃ©moire
+\item un module reprÃ©sentant un cache L2 ou L3, qui doit Ãªtre connectÃ© 
+a un autre cache (L1 ou autre), et Ã  la mÃ©moire
+\end{itemize}
+
+Chacun des caches gÃšre une file d'attente de requÃªtes en entrÃ©e et en sortie :
+la file limite le nombre de requÃªtes en cours de traitement dans le cache de 
+niveau supÃ©rieur.
+
+Une liste interne, la \textit{ProcessingQueue} permet de simuler le dÃ©lai de
+chargement d'une donnÃ©e dans le cache.
+
+\begin{figure}[!h]
+\center
+\includegraphics[scale=0.4]{rapport/intern_communication.png}
+\caption{Module reprÃ©sentant un cache L1}
+\end{figure}
+
+
+
+Un exemple de modÃ©lisation de cache pourrait Ãªtre celui-ci :
+
+\begin{figure}[!h]
+\center
+\includegraphics[scale=0.5]{rapport/config_sample.png}
+\caption{Exemple de configuration de cache}
+\end{figure}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Identification des taches Ã  accomplir 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{TÃ¢ches Ã  accomplir et Planning}
+\section{TÃ¢ches Ã  accomplir}
+
+Les principales tÃ¢ches Ã  accomplir sont essentiellement l'Ã©tude prÃ©cise du cadre
+de simulation du processeur et une implÃ©mentation.
+
+Les pistes envisagÃ©es sont le dÃ©veloppement d'une instrumentation d'exÃ©cutable
+d'une maniÃšre similaire Ã  valgrind et l'Ã©mulation. L'instrumentation d'exÃ©cutable
+demande d'avoir Ã  sa disposition le processeur que l'on simule, ce qui limite
+lÃ©gÃšrement l'intÃ©rÃªt d'une simulation. L'autre solution est l'Ã©mulation, mais
+elle requiert de se concentrer sur un jeu d'instruction particulier pour Ãªtre
+rÃ©alisÃ©e en un temps raisonnable.
+
+
+
+\section{Planning}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Procedure de recette
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{ProcÃ©dure de recette}
+\section{Validation du simulateur}
+Les rÃ©sultats seront partiellement validÃ©s automatiquement : une petite suite
+de tests permet de valider des petits programmes afin de vÃ©rifier les donnÃ©es
+recueillies par le simulateur, afin de les confronter Ã  des rÃ©sultats obtenus
+par le calcul, par exemple :
+\begin{itemize}
+\item le nombre de \textit{hits} et de \textit{miss}
+\item le temps d'Ã©xecution total estimÃ© d'un programme.
+\end{itemize}
+\
+
+
+Plusieurs configurations possibles seront testÃ©es :
+\begin{itemize}
+\item les diffÃ©rentes associativitÃ©s (mapping direct, associativitÃ© complÃšte,
+N-Way )
+\item diffÃ©rents niveaux de caches, qui pourront Ãªtre partagÃ©s entre plusieurs
+c\oe urs ou bien indÃ©pendants.
+\end{itemize}
+
+\section{Validation des rÃ©sultats}
+Des comparaisons des rÃ©sultats et des performances avec d'autres simulateurs 
+comme unisim permettront d'une part de mesurer le gain en performance de
+ce simulateur, mais aussi d'estimer la prÃ©cision des mesures se focalisant sur
+l'aspect mÃ©moire, et de constater dans quelle mesure les performances
+d'une application sont reprÃ©sentÃ©es par l'utilisation optimale ou non de
+l'aspect mÃ©moire.
+
+\end{document}
Index: trunk/doc/slides/contexte_sujet.tex
===================================================================
--- trunk/doc/slides/contexte_sujet.tex	(revision 14)
+++ trunk/doc/slides/contexte_sujet.tex	(revision 15)
@@ -24,4 +24,5 @@
         \o La hierarchie de cache
         \o La communication entre les cache
+        \o La gestion de la cohérence entre les caches partagés
         \o La simulation des délais de traitement
         \EI
@@ -29,6 +30,5 @@
         \BI
         \o le nombre de hit/miss
-        \o comptabiliser ces hit/miss en tant que principaux délais induits
-        dans la simulation
+        \o comptabiliser ces hit/miss pour chaque c\oe ur et pour chaque cache, 
         \EI
     \EI
Index: trunk/doc/slides/definition_analyse_probleme.tex
===================================================================
--- trunk/doc/slides/definition_analyse_probleme.tex	(revision 14)
+++ trunk/doc/slides/definition_analyse_probleme.tex	(revision 15)
@@ -14,4 +14,6 @@
         \o caches indépendants
         \EI
+    \o gestion de la cohérence du cache
+    \o gestion de différentes politiques d'utilisation des caches partagés
     \EI
 \end{frame} %-------------------------------------------------------------------
Index: trunk/doc/slides/identification_taches.tex
===================================================================
--- trunk/doc/slides/identification_taches.tex	(revision 14)
+++ trunk/doc/slides/identification_taches.tex	(revision 15)
@@ -6,5 +6,10 @@
     \BI
     \o Étude modèle simplifié du processeur, différentes approches possibles
+        \BI
+        \o intrumentation d'un exécutable (modèle de valgrind)
+        \o émulation
+        \EI
     \o Gestion d'un bus mémoire
+    \o Implémentation du modèle simplifié du processeur selon l'approche étudiée
     \EI
 \end{frame} %-------------------------------------------------------------------
Index: trunk/doc/slides/principe_solution.tex
===================================================================
--- trunk/doc/slides/principe_solution.tex	(revision 14)
+++ trunk/doc/slides/principe_solution.tex	(revision 15)
@@ -13,4 +13,5 @@
         \o constantes pour les temps d'execution des instructions
         \EI
+    \o le traitement des autres instructions est encore à définir
     \EI
 \end{frame} %-------------------------------------------------------------------
Index: trunk/doc/slides/procedure_recette.tex
===================================================================
--- trunk/doc/slides/procedure_recette.tex	(revision 14)
+++ trunk/doc/slides/procedure_recette.tex	(revision 15)
@@ -3,10 +3,12 @@
 %==============================================================================
 
-\begin{frame} \FT{MA procédure de recette}
+\begin{frame} \FT{Validation des résultats}
     \BI
-	\o Est-elle compréhensible par le jury ?  
-    	\o En quoi est-elle pertinente : adaptée à ce sujet particulier, pour un master M2 
-	\o Permettra-t-elle d'évaluer MON travail de stage ?
-    	\o En quoi est-elle précise  : ..... 
+	\o Une suite de tests semi-automatisée, d'après des calculs sur papier :
+        \BI 
+        \o comptage correct des hit/miss pour différentes configurations
+        \o calcul du temps d'exécution estimé total
+        \EI
+    \o Comparaison des résultats avec unisim.
     \EI
 \end{frame} %-------------------------------------------------------------------
