%==============================================================================
\section{Contexte et Sujet}
%==============================================================================

% reviewed 0.2
% [Contexte : La simulation c'est bien mais c'est lent]
\begin{frame} \FT{Contexte}
    \BI
    \o La simulation de processeurs a acquis une importance capitale pour le
    développement de compilateurs et d'applications, pour bon nombre de raisons :
       \BI
       \o Il n'est pas nécessaire d'avoir à sa disposition le processeur
       \o Elle permet un diagnostic spécifique à un processeur des performances
       d'un programme
       \EI
    \o Les simulateurs les plus répandus prennent en considération des détails
    très nombreux des processeurs, il en découle des simulations très lentes,
    voire inutilisables pour simuler des architectures multic\oe ur.

    \o Un facteur de ralentissement de 10 à 10000 est constaté entre
    l'exécution native et la simulation d'un programme. À titre d'exemple, il
    n'est pas rare que la simulation d'un programme s'exécutant nativement en
    dix minutes dure jusqu'à trois semaines.
    \EI
\end{frame} %-------------------------------------------------------------------

% reviewed 0.2
% [Problématique : Est-ce qu'on peut simplifier la simulation pour aller plus
%   vite ?]
\section{Problématique et approche}
\begin{frame} \FT{Problématique}
    \BI
    \o Les simulations complètes sont trop longues pour être exploitables
    \o Les simulations entraînent souvent des approximations du fait de
    certaines spécificités non toujours documentées des différents processeurs.
    \o Les modèles de simulation doivent donc être simplifiés, tout en
    préservant la pertinence de la simulation : on doit garder une bonne
    approximation du comportement des applications, notamment dans le cas
    d'applications utilisant des fonctionnalités  multic\oe urs.
    \EI
\end{frame}

% reviewed 0.1++
% [Approche : simuler seulement le comportement de la mémoire]
\begin{frame} \FT{Approche}
    \BI
    \o % simulation gros grain
    \o %    hum hum : la mémoire est un facteur déterminant
    \o % modèle choisi : intégrer uniquement la simulation
        % des accès mémoire et un temps de traitement des
        % instructions
    \o %    et le 1
    \EI
\end{frame}


\begin{frame} \FT{Description détaillée}
    \BI
    \o On cherche à simuler le comportement d'un programme en se focalisant sur
    l'aspect mémoire :
        \BI
        \o La hiérarchie 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
    \o L'objectif est donc d'obtenir des estimations suivantes :
        \BI
        \o le nombre de hit/miss
        \o comptabiliser ces hit/miss pour chaque c\oe ur et pour chaque cache, 
        \EI
    \EI
\end{frame}

\begin{frame} \FT{État de l'art}
    \BI
    \o Il existe quelques simulateurs, qui sont, pour la plupart orientés vers
    une simulation complète et précise, il en résulte qu'ils sont toujours
    relativement lents :
        \BI
        \o SimpleScalar, qui est inutilisable (sans extension) pour simuler
        des systèmes multiprocesseurs ou multic\oe urs.
        \o Unisim, qui est beaucoup plus modulaire, mais qui procure un
        framework assez important, dont il aurait fallu extraire la 
        simple modélisation de cache.
        \o Simics, semble offrir des avantages considérables sur les autres,
        notamment quant à sa vitesse d'exécution, mais c'est un logiciel
        propriétaire que nous n'avons pas testé
        \EI
    \EI

\end{frame} %-------------------------------------------------------------------
