\section{Vue d'ensemble} \slidetitle{Vue d'ensemble} { \printgraph{MORPHEO_micro_architecture-overview}{0.48} } { } \slidetitle{Avancement} { \printgraph{MORPHEO_micro_architecture-overview-20080225}{0.48} } { } \section{Statistiques} \slidetitle{Statistiques} { Refonte complète de la manière de générer les statistiques. \begin{description} \item[Déclaration]~ \begin{itemize} \item Stat * \_stat; \item counter\_t * \_nb\_inst; \end{itemize} \item[Construction / Destruction]~\\ La classe {\it Stat} à 4 paramètres : \begin{enumerate} \item Nom de l'instance \item Nom du composant \item Nombre de cycles à ignorer avant l'évaluation des statistiques \item Période entre deux statistiques \end{enumerate} Lors de la destruction de l'objet, un fichier de statistiques au format XML est généré. \end{description} } { } \slide { \begin{description} \item[Compteur]~ \begin{itemize} \item \_nb\_inst = \_stat $->$ create\_variable\\("nb\_inst"); \item \_average\_inst = \_stat $->$ create\_counter\\("average\_inst", "IPC", "Instructions by cycle"); \item \_stat $->$create\_expr\\("average\_inst", "/ nb\_inst cycle", false); \end{itemize} \item[Run time]~ \begin{itemize} \item (* \_nb\_inst) ++ ; \item A la fin de chaque fonction de transition de chaque composant : \_stat $->$ end\_cycle(); \end{itemize} \item[Composant interne]~ \begin{itemize} \item \_stat $->$ add\_stat (component $->$ \_stat);\\ Le fichier de statistiques du "top level" contiendra les statistiques des composants internes. \end{itemize} \end{description} } { } \section{Zoom sur ...} \subsection{Custom unit} \slidetitle{Custom unit} { La norme OpenRISC propose : \begin{itemize} \item 14 codes opérations réservés \begin{itemize} \item 8 ORBIS. \item 2 ORFPX (1 simple précision et 1 double précision). \item 4 ORVDX. \end{itemize} \item 8 groupes pour les registres spéciaux \item 7 exceptions réservées \end{itemize} } { } \slidetitle{Nos limitations} { \begin{itemize} \item Une instruction custom ne cible qu'un seul groupe custom. \item Un groupe ne peut être instancier qu'une seule fois par thread. \item L'interface de l'unité custom est fixe. \item Les unités custom peuvent générer n'importe quelles exceptions custom (plus l'exception "RANGE"). \item Seule une exécution d'opération custom provoque des exceptions. \end{itemize} } { } \slidetitle{Implémentation} { L'utilisateur doit fournir au composant "Execute\_loop" un pointeur sur une fonction dont le prototype est : \begin{itemize} \item custom\_information\_t {\it get\_information} (int context); \end{itemize} custom\_information\_t est une structure qui regroupe plusieurs pointeurs de fonction. } { } \slide { \begin{itemize} \item bool {\it get\_valid\_group } (int gpr); \item int {\it get\_nb\_register } (int gpr); \item access\_mode\_t {\it get\_mode } (int gpr, int reg); \item custom\_decod\_t * {\it get\_decod } (Toperation\_t op); \item custom\_execute\_transition\_t * {\it get\_execute\_reset } (int gpr); \item custom\_execute\_transition\_t * {\it get\_execute\_transition} (int gpr); \item custom\_execute\_genMoore\_t * {\it get\_execute\_genMoore } (Toperation\_t op); \item custom\_vhdl\_t * {\it get\_vhdl\_decod } (void); \item custom\_vhdl\_t * {\it get\_vhdl\_execute } (void); \end{itemize} } { } \subsection{Morpheo v1} \slidetitle{Morpheo v1} { \printgraph{MORPHEO_overview}{0.67} } { } \subsection{Load Store Unit} \slidetitle{Load Store Unit} { \begin{itemize} \item MORPHEO v1 : perte de performance du à la gestion de la Load Store Unit. \begin{itemize} \item Load Store Unit est placé dans la OOO\_Engine : insertion in-order. \item Le calcul d'adresse est réalisé par les ALU. \item Lancement tardif des lectures. \end{itemize} \item Modèle mémoire : weakly ordered.\\Présence d'instruction de synchronisation. \item Si mémoire virtuelle : Bit WOM (Weakly-Ordered-Memory)\\(si = 0, load/store in-order sans prefetch). \end{itemize} % Graphe expliquant l'implémentation de la LSU de la v1 } { } \slidetitle{Augmenter la performance (1)} { \begin{itemize} \item Insertion dans le LSU out-of-order \begin{description} \item [Comment ?] Gestion des pointeurs dans le OOO\_Engine \item [Pourquoi ?] La LSU peut être placer dans l'Execute\_loop (au coeur de la boucle Read / Write). \end{description} \end{itemize} \printgraph{MORPHEO_component-load_store_queue-ooo}{1} } { } \slidetitle{Augmenter la performance (2)} { \begin{itemize} \item Lectures spéculatives : Lancer la lecture avant de vérifier les dépendances avec des stores précédents. \begin{description} \item [Comment ?] Accès au cache dès réceptions de la lecture. Ajout d'une file d'attente qui va attendre puis vérifier les dépendence avec les stores. \item [Pourquoi ?] Dépendances RAW entre accès mémoires relativement rare. \end{description} \end{itemize} \printgraph{MORPHEO_component-load_store_queue-load_speculative}{1} } { } \slidetitle{Augmenter la performance (3)} { \begin{itemize} \item Commit spéculatif des lectures. \begin{description} \item [Comment ?] Ecrire le résultat dans le banc de registres dès réceptions de la réponse. \item [Pourquoi ?] Diminuer la surface de la store queue : vérifier des dépendances sur plusieurs cycles. \end{description} \end{itemize} \printgraph{MORPHEO_component-load_store_queue-commit_speculative}{1} } { } \slidetitle{Augmenter la performance (4)} { \begin{itemize} \item Bypass du résultat des lectures \begin{description} \item [Comment ?] Ajouter le contenu de la check queue au réseau de bypass. \item [Pourquoi ?] Augmenter la performance. \end{description} \end{itemize} \printgraph{MORPHEO_component-load_store_queue-commit_speculative_bypass}{1} } { } \subsection{Rename Unit} \slidetitle{Rename Unit} { \begin{itemize} \item Unité qui demande beaucoup de structure multi accès \item Remplacement des structures à N accès par M strutures à 1 accès (M multiple de N) \end{itemize} \printgraph{MORPHEO_component-free_list}{1} } { } \section{Etapes suivantes} \slidetitle{Etapes suivantes} { \begin{enumerate} \item Finir systemC \item Test ``limité'' \item Cache non bloquant : wrapper plusieurs xcache \item Test sur plate-forme réel \item VHDL \item Test avec la plate-forme précédente \end{enumerate} } { }