Commit 457b6325 authored by Thibault Soucarre's avatar Thibault Soucarre
Browse files

report

parent abeb54b6
\section{Bibliographie}
\begin{itemize}
\item \url{http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3}
\item \url{http://www.opengl-tutorial.org}
\item Le Manuel technique de ViTE, disponible à \url{http://vite.gforge.inria.fr/documentation.php}
\item Le Manuel utilisateur de ViTE, disponible à \url{http://vite.gforge.inria.fr/documentation.php}
\item \url{http://paje.sourceforge.net/download/publication/lang-paje.pdf}
\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. 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. Enfin, ce nouveau fonctionnement a permis d'améliorer l'interaction avec l'utilisateur via le menu settings.\\
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{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}
......@@ -16,8 +18,8 @@ En compétition avec les meilleurs spécialistes mondiaux dans leur domaine, les
\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étaflops et exaflops. Il est ainsi nécessaire de repenser les modélisations mathématiques et 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 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 debugguer de telles applications. C'est sur l'un de ces outils, le logiciel ViTE que porte mon sujet de stage.
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 filière 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 Visual Trace Explorer répondait parfaitement à mes attentes, le logiciel étant développé en c++. 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 Visual Trace Explorer(ViTE), un outil de visualisation de traces d'exécution, avec les objectifs suivants :
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.
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, repérer à quels moment les processeurs sont inactifs, quelles section devraient être optimisées 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.
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, le plus utilisé étant le format Pajé Une trace au format Pajé est composé d'objets organisés selon un arbre hiérarchique des types. Les noeuds sont appelés \textbf{containers}, et les feuilles \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 :
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{Container : }Ils représentent des unités de calcul matérielles ou logicielles . Ce peut être un processeur, un processus ou encore un thread. Un container peut contenir d'autres objets (appelés fils) y compris d'autres containers. Ainsi la hiérarchie de types peut s'étendre sur plusieurs niveaux.
\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 à leur container 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 container père reste dans état constant(par exemple calcul/attente).
%La figure \ref{states} représente une trace simple ne contenant que des containers et des états. Les containers, en bleu, représente les processeurs utilisés. Les états noirs correspondent à un temps d'attente du container 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.
\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
......@@ -21,7 +23,7 @@ Ces traces peuvent être représentées selon plusieurs formats, le plus utilis
%\label{states}
%\end{figure}
\item \textbf{Liens : }Ils représentent une relation entre deux containers qui 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.
\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]
......@@ -31,7 +33,7 @@ Ces traces peuvent être représentées selon plusieurs formats, le plus utilis
%\label{links}
%\end{figure}
\item \textbf{Evènements : }Comme les états, ils sont associés à leur container père. Contrairement aux états, les évènements représentent une action instantanée, il n'ont donc pas de durée.
\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]
......@@ -41,7 +43,7 @@ Ces traces peuvent être représentées selon plusieurs formats, le plus utilis
%\label{events}
%\end{figure}
\item \textbf{Compteurs : }\'Egalement associés à leur container 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.
\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]
......@@ -57,22 +59,22 @@ Ces traces peuvent être représentées selon plusieurs formats, le plus utilis
\label{paje}
\end{figure}
La figure \ref{paje} donne un arbre hiérarchique possible pour une trace au format Pajé. Le container 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ède 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 container source ni le container destination, c'est un parent commun de ces deux containers, le container correspondant au programme lui-même.
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 de parser un fichier trace existant et d'en obtenir une représentation graphique. 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. Il est possible de zoomer sur une zone de la trace, de se déplacer, de modifier les couleurs associées aux différents types d'entités représentés. 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. \\
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 containers et des états. Les containers, 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 pourrait utiliser plus de couleurs pour les différencier.
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 containers et états}
\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é figure \ref{paje}.
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
......@@ -81,7 +83,7 @@ La figure \ref{links} représente une trace plus complexe, contenant également
\label{links}
\end{figure}
La figure \ref{variables} représente une trace contenant des compteurs.
La figure \ref{variables} représente une trace ne contenant que des compteurs.
\begin{figure}[!htbp]
\centering
......@@ -95,18 +97,18 @@ La figure \ref{variables} représente une trace contenant des compteurs.
\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. Certaines fonctionnalités ont été supprimées, rendant ViTE incompatible avec les versions récentes.
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éfault du précédent rendu graphique : une consommation mémoire trop importante qui empêche la visualisation de grandes traces d'exécution. Il faudra donc réaliser un nouveau rendu plus optimisé, capable d'afficher des traces de taille importante, en limitant la consommation mémoire.
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 fallait ainsi obtenir plus de fluidité dans la manipulation du rendu : zoom, déplacement, modification de couleurs, masquage de certains éléments.
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é a été 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écedemment peut également être vérifiée.
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'utilsateurs se servant régulièrement du logiciel.
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}
......
......@@ -24,7 +24,7 @@
\begin{minipage}{5cm}
\vspace{1cm}
\raggedright{\textbf{Encadrants INRIA}\\Mathieu Faverge \\François Rué \\ Mathias Hastaran}
\raggedright{\textbf{Encadrants Inria}\\Mathieu Faverge \\François Rué \\ Matthias Hastaran}
\end{minipage}
\vspace{10mm}
......
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