\setlength{\columnseprule}{0pt} \renewcommand{\labelitemi}{$\star$} \renewcommand{\labelitemii}{$\star$} %%%% Begin of Multicols-Environnent \begin{center} {\it Ceci est une étude de performance sur l'incidence du partage par les contextes matériels d'un processeur, de ces caches de niveau 1, de sa partie opérative et de sa partie exécutive. Nous montrons que le partage de la partie exécutive n'a que peu d'incidence sur les performances, alors que le partage des caches fait perdre 10\% de performances et que le partage de la partie opérative fait tomber les performances d'un facteur de 2,7 entre un CMP de degré 4 et un SMT de même degré. } \end{center} %\vspace*{1cm} \Section{\large{Là où tous commence}} { \begin{multicols}{3} {\bf Exploitation des différentes formes de parallélisme} \begin{description} \item[Intra flot :] Exploitation de l'ILP : les instructions indépendantes entre elles peuvent s'exécuter en parallèle\newline Limitation intrinsèque au software. (La taille des paquets contient au maximum 3 et 5 instructions) \item[Inter flot :] Exploitation du TLP : les instructions sont prisent de plusieurs contexte. \newline Limitation intrinsèque au système cible. (L'application doit pouvoir être découpée en tâche équilibrée) \end{description} \printgraph{GENERAL_type_of_multi_thread}{0.5} \begin{description} \item[CMP :] L'intégralité des ressources d'un coeur sont dédiées à un contexte. (\cite{2000_barroso}) %, \cite{2000_hammond}) \item[SMT :] L'intégralité des ressources d'un coeur sont partagées entre tous les contextes. (\cite{1996_tullsen})%, \cite{2003_koufaty})\\ Dans le cas où il n'y a qu'un seul thread à exécuter, ce dernier pourra utiliser l'intégralité des ressources du processeur. \item[Hybride :] Multitude de possibilité de partage des ressources internes. (\cite{2004_kalla}) %, \cite{2005_mcnairy})\\ Une ressource est soit dédiée à un contexte soit partagée entre un certain nombre de contextes. \end{description} \end{multicols} } %\vspace*{1cm} \Section{\large{Sous le capot}} { \begin{multicols}{2} \printgraph{MORPHEO_micro_architecture-overview}{0.48} \begin{multicols}{2} {\bf Services Offerts} \begin{itemize} \item Configuration d'une instance \item Génération du VHDL synthétisable \item Simulation haut niveau ({\it SystemC}) \item Outils de visualisation architecturale \item Lors de la simulation : \begin{itemize} \item Génération de TestBench pour tester le VHDL \item Génération de Statistiques \end{itemize} \end{itemize} \printgraph{MORPHEO_service}{0.48} \end{multicols} \end{multicols} } \Section{\large{Expérimentations}} { \begin{multicols}{3} {\bf Incidence du partage des caches, des Unités d'exécutions et de la partie opérative.} \printgraph{MORPHEO_micro_architecture-groupement}{} \printgraph{simulation_all}{} \begin{itemize} \item Benchmark : SPECINT2000 (164.gzip, 175.vpr, 181.mcf, 255.vortex, 256.bzip2, 300.twolf). \item Pour les librairies standard (libc et libm) ainsi que les fonctions bas niveaux (read, write, open, close ...), nous utilisons la librairie {\it Newlib}. \item Détermine l'accélération de l'execution parrallèle sur l'execution séquentiel \end{itemize} \end{multicols} } %\begin{multicols}{3} %{ % L'expérimentation ce fait avec le générateur de processeur Morpheo (``Multi ORganisation Processor with HEterogeneous and Open architecture''). % % %Notre approche consiste à tester l'incidence du partage des caches, des Unités d'exécutions et de la partie opérative. % % Considérons ces trois degrés de partage : % \begin{description} % \item[Coeur :] Les coeurs ce partage les caches de niveaux 2 et les unités d'exécutions. % \item[Unité de lancement :] Les unités de lancement ce partage les ports des caches de niveaux 1 et les unités d'exécutions. % \item[Contexte :] Les contextes se partagent l'accès au décodeur, au Icache et au prédicteur de branchement. % \end{description} % % %\printgraph{MORPHEO_micro_architecture-overview}{0.48} % \printgraph{MORPHEO_micro_architecture-groupement}{} % %} % %\Section{\large{Plate-forme logicielle}} %{ % \begin{itemize} % \item Sélection de 6 benchmarks parmi ce proposé dans les SPECINT2000 (164.gzip, 175.vpr, 181.mcf, 255.vortex, 256.bzip2, 300.twolf). % \item Chaque architecture est soumise à une charge de travails composée de 15 simulations.%(Le nombre de simulations est décrit par la combinaison $C_{nb\_benchmarks}^{nb\_threads}$). % \item Pour les librairies standard (libc et libm) ainsi que les fonctions bas niveaux (read, write, open, close ...), nous utilisons la librairie {\it Newlib}. % \end{itemize} %} % %\Section{\large{Résultats}} %{ % {\bf Méthodoligie :}\\\\ % Pour chaque instance : % \begin{itemize} % \item 2 ensembles de simulations % \begin{itemize} % \item MT = moyenne du nombre de cycles pour exécuter toutes les simulations de 4 benchs en parallèles. % \item ST = moyenne du nombre de cycles pour exécuter toutes les simulations de 4 benchs en séquentiels. % \end{itemize} % \item Chaque simulation ce fait sur 110 millions de cycles. Les 10 premiers millions sont ignorés afin de chauffer les caches et les unités de prédictions. % \item A la fin de l'ensemble des simulations, le rapport MT/ST nous donne le speed-up du multi-threading sur le single-threading % \end{itemize} % % \printgraph{simulation_all}{} % % % { % {\bf Partage du cache} % \begin{itemize} % \item {\it X4-4\_1\_1-2 : 3,92} - 4 I/D caches L1 de 2k chacun pour 1 contexte. % \item {\it X4-2\_2\_1-2 : 3,63} - 2 I/D caches L1 de 4k chacun pour 2 contextes. % \item {\it X4-1\_4\_1-2 : 3,27} - 1 I/D cache L1 de 8k chacun pour 4 contextes. % \end{itemize} % } % { % {\bf Partage de la partie exécutive} % \begin{itemize} % \item {\it X4-2\_2\_1-2 : 3,63} - 4 groupes de 2 ALUs pour 1 contexte. % \item {\it X4-2\_2\_1-4 : 3,41} - 2 groupes de 4 ALUs pour 2 contextes. % \item {\it X4-2\_2\_1-8 : 3,38} - 1 groupe de 8 ALUs pour 4 contextes. % \end{itemize} % } % { % {\bf Partage de la partie opérative} % \begin{itemize} % \item {\it X4-1\_1\_4-8 : 1,46} - 1 cluster possédant 1 UL avec 4 contextes chacun. % \item {\it X4-1\_2\_2-8 : 2,37} - 1 cluster possédant 2 ULs avec 2 contextes chacun. % \item {\it X4-1\_4\_1-8 : 2,94} - 1 cluster possédant 4 ULs avec 1 contexte chacun. % \item {\it X4-2\_1\_2-8 : 2,51} - 2 clusters possédant 1 UL avec 2 contextes chacun. % \item {\it X4-2\_2\_1-8 : 3,38} - 2 clusters possédant 2 ULs avec 1 contexte chacun. % \item {\it X4-4\_1\_1-8 : 3,94} - 4 clusters possédant 1 UL avec 1 contexte chacun. % \end{itemize} % } %} %% %%\Section{\large{Métrique}} %%{ %% \begin{itemize} %% \item Obtenir le meilleur compromis Performance / Complexité. %% \begin{itemize} %% \item Performance : nombre de cycles nécessaire pour éxecuter les Benchmarks. %% \item Compléxité : surface occupée du FPGA. %% \end{itemize} %% \item Obtenir le meilleur partage des ressources entre les contextes matériels. (Gain Performance / Coût surface). %% \begin{itemize} %% \item Gain en performance : rapport entre la performance MT sur la performance ST. %% \item Coût en surface : rapport entre la surface MT sur la surface ST. %% \end{itemize} %% \end{itemize} %%} %% \Section{\large{Quelques pistes à suivre}} { \begin{multicols}{3} Des travaux équivalents ont été réalisés. \begin{description} \item[\cite{2004_dolbeau} :] Étude de l'influence du partage des unités à latence longue (multiplication, division...), du prédicteur de branchement, ainsi que des caches Instructions et Données. %Pour ce faire, ils ont implémentés l'architecture {\bf CASH} (CMP And SMT Hybrid) qui consiste en 4 coeurs ce partageant les ressources cités. \item[\cite{2004_kumar} :] Étude en terme de performance d'exécution mais également en terme de surface. Les blocs concernés sont les unités flottantes, les caches de premiers niveaux, et enfin les ports du crossbar reliant les Caches à la mémoire. %Ici l'équipe de Tullsen à validée leurs hypothèses sur un système à 8 coeurs. %Le partage des ressources ce fait entre deux coeurs voisins. \end{description} {\small \bibliography{\dircommon/bibliographie} } \end{multicols} }