Commit 02bbbccb authored by Mathieu Faverge's avatar Mathieu Faverge
Browse files

Move the report out of the code

parent 457b6325
\section{Bibliographie}
\begin{itemize}
\item http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3
\item http://www.opengl-tutorial.org
\item Le Manuel technique de ViTE, disponible à http://vite.gforge.inria.fr/documentation.php
\item Le Manuel utilisateur de ViTE, disponible à http://vite.gforge.inria.fr/documentation.php
\item http://paje.sourceforge.net/download/publication/lang-paje.pdf
\end{itemize}
\newpage
\section{Conclusion}
Au cours de mon stage, j'ai donc mis à jour l'ensemble des routines OpenGL utilisées par le logiciel ViTE. Les performances en termes de consomation mémoire n'étant pas satisfaisantes, j'ai ensuite optimisé le moteur de rendu en déplaçant le stockage des couleurs des VBOs vers les Shaders. Ce nouveau fonctionnement a permis d'améliorer non seulement la consommation mémoire mais aussi l'interaction utilisateur avec le logiciel. Le menu Paramètres a été adapté à ces changements, permettant une plus grande flexibilité dans la configuration de l'affichage.
Comme souhaité, ce stage m'a permis de consolider mes compétences en programmation C++. De plus, la découverte de la librairie OpenGL m'a permis de confirmer mon intérêt pour le domaine de la Synthèse d'Images et donc d'affiner mon projet professionnel. Le travail effectué sur les nouveaux objets OpenGL tels que les VBOs et les Shaders m'a également apporté une expérience qui me sera extrêmement utile pour la suite de ma formation mais également pour mon avenir professionnel.
\newpage
This diff is collapsed.
\section{Glossaire}
\newpage
\section{Contexte du stage}
Cette première partie présente le centre de recherche Inria, et l'équipe HiePACS, au sein de laquelle j'ai effectué mon stage.
\subsection{Présentation de l'Inria}
\begin{minipage}{8cm}
\includegraphics[width=7.5cm]{img/centre.jpg}
\end{minipage}
\begin{minipage}{8cm}
Pour communiquer, se soigner, voyager ou encore se divertir, notre société compte toujours plus sur les technologies numériques.
Moteur du développement économique, ces technologies souvent invisibles tendent à simplifier nos tâches et enrichir notre quotidien.
À l'interface des sciences informatiques et des mathématiques, en allant de la recherche fondamentale au développement technologique et au transfert industriel, les chercheurs d'Inria, institut public de recherche, inventent les technologies numériques de demain.
\end{minipage}
La recherche Inria est collaborative comme en témoignent la diversité des talents réunis dans les équipes de recherche et les nombreuses collaborations avec les acteurs de la recherche publique et privée, en France et à l'étranger.
En compétition avec les meilleurs spécialistes mondiaux dans leur domaine, les chercheurs et collaborateurs d'Inria se donnent aussi pour mission de partager leurs connaissances avec le plus grand nombre.
\subsection{Présentation de l'équipe HiePACS}
Depuis quelques années, l'évolution de la puissance de nos ordinateurs ne passe plus par une augmentation de la fréquence du processeur mais par l'augmentation du nombre de coeurs. Aujourd'hui, peu d'applications sont capables d'utiliser efficacement les ressources fournies par les architectures modernes, telles que les machines pétaflopiques et exaflopiques. Il est ainsi nécessaire de repenser les modélisations mathématiques et les algorithmes utilisés pour exploiter pleinement tous les niveaux de parallélisme de l'architecture.
Dans ce contexte, l'objectif de l'équipe HiePACS est de mettre en oeuvre des compétences de pointe en informatique haute performances et en mathématiques appliqués afin de développer des programmes capables d'exploiter la puissance des architectures modernes.
Afin d'atteindre ces objectifs, l'équipe a besoin d'outils permettant d'analyser et de corriger de telles applications. C'est sur l'un de ces outils, le logiciel ViTE que porte mon sujet de stage.
\newpage
\section{Introduction}
Dans le cadre de ma deuxième année à l'ENSEIRB-MATMECA en filière informatique, j'ai effectué cet été un stage de développement au sein du centre de recherche Inria Bordeaux - Sud-Ouest, dans l'équipe HiePACS. \\
Souhaitant me diriger vers la spécialité Technologies Multimédia en troisième année, j'ai recherché un stage qui me permettrait d'acquérir de l'expérience en programmation orientée objet, et plus particulièrement en langage C++, le plus utilisé dans ce domaine. Ainsi le sujet de stage proposé par l'Inria sur la mise à jour et l'optimisation du logiciel ViTE répondait parfaitement à mes attentes. Mieux, il me donnait également l'opportunité d'utiliser les bibliothèques Qt, et surtout OpenGL, très utilisée pour le rendu d'images 2D et 3D. Enfin il me permettait aussi, après avoir effectué mon stage de première année en entreprise, de découvrir le travail en laboratoire de recherche. \\
Au cours de mon stage, j'ai donc travaillé sur le logiciel ViTE(Visual Trace Explorer), un outil de visualisation de traces d'exécution, avec les objectifs suivants :
\begin{itemize}
\item Mettre à jour les routines OpenGL utilisées
\item Réduire la consommation mémoire du logiciel
\item Accélérer l'interaction avec l'utilisateur
\end{itemize}
La première partie de ce rapport présente rapidement le centre de recherche Inria et l'équipe HiePACS. Puis, La deuxième revient plus en détail sur le sujet et les objectifs du stage. Enfin, la troisième partie présente le travail effectué et sa validation.
\newpage
\section{Présentation du sujet de stage}
Cette partie revient plus en détail sur le sujet du stage. Elle présente d'abord les traces d'exécutions et le logiciel ViTE. Puis elle expose les objectifs du stage ainsi que les critères de validation.
\subsection{Trace d'exécution}
\label{trace}
Les traces d'exécution constituent un outil d'aide au développement et à la correction d'application parallèles. Elles permettent d'observer l'état des différentes unités de calcul utilisées au cours de l'exécution du programme, et les communications entre celles-ci. Ainsi on peut repérer des erreurs de synchronisation, des inactivités des processeurs, les sections à optimiser ou encore localiser des deadlocks. Les traces d'exécution sont donc un puissant outil de profilage et de débuggage d'applications parallèles.
Ces traces peuvent être représentées selon plusieurs formats : Pajé, OTF, Tau. Le format Pajé est le format privilégié par ViTE mais les formats Tau et OTF peuvent aussi être lus. Une trace au format Pajé est composée d'objets organisés selon un arbre hiérarchique de types. Les noeuds sont appelés des \textbf{conteneurs}, et les feuilles des \textbf{entités}. Les entités sont des objets simples : ils ne peuvent pas contenir d'autres entités. Elles se répartissent en 4 catégories : les \textbf{états}, les \textbf{liens}, les \textbf{évènements} et les \textbf{compteurs}. Ces différents objets sont définis ci-après :
\vspace{0.5cm}
\begin{itemize}
\item \textbf{Conteneur : }Ils représentent des unités de calcul matérielles ou logicielles. Ce peut être un processeur, un processus ou encore un thread. Un conteneur peut contenir d'autres objets (appelés fils) y compris d'autres conteneurs. Ainsi la hiérarchie de types peut s'étendre sur plusieurs niveaux.
\item \textbf{Etat : }Ils sont associés à un conteneur père. Un état possède un temps de début et un temps de fin. Il représente une période de temps durant laquelle le conteneur père reste dans un état constant(par exemple calcul/attente).
%La figure \ref{states} représente une trace simple ne contenant que des conteneurs et des états. Les conteneurs, en bleu, représente les processeurs utilisés. Les états noirs correspondent à un temps d'attente du conteneur père, les états rouge à une période ou celui-ci effectue des calculs. Les types d'états sont en réalité plus nombreux et on pourrait utiliser plus de couleurs pour les différencier.
%\begin{figure}[!htbp]
%\centering
%\includegraphics[height=8cm]{img/states.jpg}
%\caption{Etats}
%\label{states}
%\end{figure}
\item \textbf{Liens : }Ils représentent une relation entre deux conteneurs. Ils possède un temps de début et un temps de fin. Ils peuvent être utilisés pour représenter des communications entre processus/thread. Ils sont représentés sous forme de flèches.
%, comme sur la figure \ref{links}.
%\begin{figure}[!htbp]
%\centering
%\includegraphics[height=8cm]{img/links.jpg}
%\caption{Liens}
%\label{links}
%\end{figure}
\item \textbf{Evènements : }Comme les états, ils sont associés à un conteneur père. En revanche, les évènements représentent une action instantanée, ils n'ont donc pas de durée.
%Sur la figure \ref{events}, on a zoomé sur une zone de la trace contenant de nombreux évènements.
%\begin{figure}[!htbp]
%\centering
%\includegraphics[height=8cm]{img/events.jpg}
%\caption{Evènements}
%\label{events}
%\end{figure}
\item \textbf{Compteurs : }\'Egalement associés à un conteneur père, ils représentent l'évolution numérique d'une variable au cours du temps. Ils sont représentés sous forme de courbes.
%La figure \ref{variables} représente une trace ne contenant pas d'états, mais avec des compteurs.
\end{itemize}
%\begin{figure}[!htbp]
%\centering
%\includegraphics[height=8cm]{img/variables.jpg}
%\caption{Compteurs}
%\label{variables}
%\end{figure}
\begin{figure}[!htbp]
\includegraphics[height=8cm]{img/paje.jpg}
\caption{Exemple d'arbre hiérarchique des types}
\label{paje}
\end{figure}
La figure \ref{paje} donne un arbre hiérarchique possible pour une trace au format Pajé. Le conteneur racine correspond au programme. Celui-ci contient des processus, contenant eux-mêmes des threads. Chaque thread contient des états montrant son évolution au cours de l'exécution. Ces états possèdent une \textbf{entityValue}. C'est celle-ci qui permet de connaître l'action que le thread est en train d'effectuer. Chaque thread peut également contenir des évènements correspondant ici à la réception d'un signal. Enfin il existe des liens représentant une communication entre deux threads. Le père du lien ``communication'' dans l'arbre n'est ni le conteneur source ni le conteneur destination, c'est un parent commun de ces deux conteneurs. Ici, il s'agit du conteneur correspondant au programme lui-même.
\subsection{Le logiciel ViTE}
Le logiciel ViTE (Visual Trace Explorer) est un logiciel de visualisation. Il ne sert pas à générer des traces. Il permet d'analyser un fichier de trace existant et d'en obtenir une représentation graphique. Ces traces doivent donc avoir été générées précedemment par exemple en utilisant le logiciel Eztrace, égalemment développé par l'Inria. Plusieurs formats de traces sont supportés (Pajé mais aussi OTF et Tau) et le logiciel est disponible sur plusieurs systèmes d'exploitation : Windows, MacOS X, Ubuntu et divers autres distributions de Linux. Le logiciel représente la trace sous forme de diagramme de Gantt. Il est possible de zoomer sur une zone de la trace, de se déplacer, de modifier les couleurs associées aux différentes entités représentées. \\
La figure \ref{states} représente une trace simple ne contenant que des conteneurs et des états. Les conteneurs, en bleu, représente les processeurs utilisés. Les états noirs correspondent à un temps d'attente du processeur, les états rouge à une période ou celui-ci effectue des calculs. C'est l'\textbf{entityValue} qui sert de critère pour l'association d'une couleur à un état. Ces valeurs sont en réalité plus nombreuses que attente/calcul et on peut utiliser plus de couleurs pour les différencier.
\begin{figure}[!htbp]
\centering
\includegraphics[height=6cm]{img/states.jpg}
\caption{Trace ne contenant que des conteneurs et états}
\label{states}
\end{figure}
La figure \ref{links} représente une trace plus complexe, contenant également des liens et des évènements. Son arbre hiérarchique des types est proche de celui présenté sur la Figure \ref{paje}.
\begin{figure}[!htbp]
\centering
\includegraphics[height=8cm]{img/events.png}
\caption{Trace contenant des liens et évènements}
\label{links}
\end{figure}
La figure \ref{variables} représente une trace ne contenant que des compteurs.
\begin{figure}[!htbp]
\centering
\includegraphics[height=8cm]{img/variables.jpg}
\caption{Trace contenant des compteurs}
\label{variables}
\end{figure}
\subsection{Objectifs du stage}
Le premier objectif du stage est la mise à jour du moteur de rendu graphique de ViTE. Le rendu s'appuie sur la librairie OpenGL dont la version 3 a apporté de nombreuses modifications de l'API. Certaines fonctionnalités ont été supprimées, rendant ViTE incompatible avec les versions récentes.
L'objectif principal est ensuite d'exploiter au mieux les nouvelles possibilités offertes par OpenGL 3, afin de corriger le principal défaut du précédent rendu graphique : une consommation mémoire trop importante qui empêche la visualisation de grandes traces d'exécution. Il faut donc réaliser un nouveau rendu plus optimisé, capable d'afficher des traces de taille importante, en limitant la consommation mémoire.
Un autre objectif est l'amélioration l'expérience utilisateur. Il faut ainsi obtenir plus de fluidité dans la manipulation du rendu : zoom, déplacement, modification de couleurs, masquage de certains éléments.
Enfin, il fallait corriger les bugs rencontrés, réorganiser certaines parties du code afin de le rendre plus clair.
\subsection{Critères de validation}
L'objectif principal étant la diminution de la consommation mémoire, celle-ci doit être mesurée et comparée avec celle de la version précédente. L'outil employé est massif, un profiler mémoire de la suite valgrind, qui permet de savoir quelle quantité maximum de mémoire a été utilisée au cours d'une exécution. Ainsi, on peut comparer sur divers traces la mémoire utilisée par les deux versions et vérifier que celle-ci a bien diminuée. La possibilité d'ouvrir des traces de taille plus importante que précédemment peut également être vérifiée.
En revanche, il est difficile de réaliser des tests automatisés sur des éléments tels que la validité du rendu graphique obtenu, sa fluidité ou encore le bon fonctionnement de l'interface. Ces éléments ont donc fait l'objet de retour d'utilisateurs se servant régulièrement du logiciel.
\subsection{Plannification du projet}
La première partie du stage a été consacrée à la compréhension globale du logiciel et à l'apprentissage de la librairie \textbf{OpenGL}. Ensuite, il a fallu réaliser le nouveau rendu et optimiser ses performances. Enfin, le menu settings a été revu, le nouveau rendu permettant la mise en place d'un traitement plus efficace.
\newpage
\begin{titlepage}
\center{\includegraphics[width=0.4\textwidth]{img/enseirb-matmeca.png}}
\vspace{1.5cm}
\rule{\textwidth}{.5pt}
\begin{center}
\textbf{Rapport de Stage : Mise à jour et optimisation du logiciel ViTE}
\rule{\textwidth}{.5pt}
\end{center}
\vspace{.5cm}
\large {Thibault Soucarre}
\vspace{1cm}
\begin{center}
\begin{figure}[!h]
\begin{center}
\centering \includegraphics[height=6cm]{img/inria-logo.jpg}
\end{center}
\end{figure}
\end{center}
\begin{minipage}{5cm}
\vspace{1cm}
\raggedright{\textbf{Encadrants Inria}\\Mathieu Faverge \\François Rué \\ Matthias Hastaran}
\end{minipage}
\vspace{10mm}
\center{Deuxième année, filière informatique \\\today}
\end{titlepage}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment