Commit abeb54b6 authored by Thibault Soucarre's avatar Thibault Soucarre
Browse files

report

parent eea8dc4d
\section{Annexes}
\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}
\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.\\
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{Présentation de l'Inria}
\section{Contexte du 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é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.
\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 :
\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
......@@ -3,17 +3,15 @@
\subsection{Trace d'exécution}
\label{trace}
Depuis quelques années, la fréquence des processeurs tend à stagner. L'augmentation de la puissance de nos ordinateurs passe de plus en plus par le développement d'architecture multicoeurs : on augmente non plus la fréquence mais le nombre de processeurs présents dans une machine. Afin de tirer profit de cette puissance, le recours au traitement parallèle devient une nécessité.
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 corrections d'application parallèles. Elles permettent d'observer l'état des différentes unités de calcul utilisées au cours, et les communications entre celles-ci au cours d'une exécution. Ainsi on peut repérer des erreurs de synchronisation, d'accès concurrents ou encore repérer quelles sections d'un programme sont mal réparties entre nos unités de calcul. \\
Le format Pajé est le format le plus utlilisé pour la représentation de traces. Une trace au format Pajé est composé d'objets organisés selon un arbre hiérarchique de 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, 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 :
\vspace{0.5cm}
\begin{itemize}
\item \textbf{Container : }Il représente une unité de calcul matériel ou logiciel . 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{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{Etat : }Il est associé à un container (son père) et est représenté sur la même ligne que celui-ci. Il 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 le même état.
\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.
%\begin{figure}[!htbp]
......@@ -23,7 +21,7 @@ Le format Pajé est le format le plus utlilisé pour la représentation de trace
%\label{states}
%\end{figure}
\item \textbf{Liens : }Il représente 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 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.
%, comme sur la figure \ref{links}.
%\begin{figure}[!htbp]
......@@ -33,7 +31,7 @@ Le format Pajé est le format le plus utlilisé pour la représentation de trace
%\label{links}
%\end{figure}
\item \textbf{Evènement : }Comme les états, ils sont associés à un container père. Un évènement représente une action instantanée effectuée par le container père.
\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.
%Sur la figure \ref{events}, on a zoomé sur une zone de la trace contenant de nombreux évènements.
%\begin{figure}[!htbp]
......@@ -43,9 +41,9 @@ Le format Pajé est le format le plus utlilisé pour la représentation de trace
%\label{events}
%\end{figure}
\item \textbf{Compteur : }Egalement associé à un container père, il représente 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 à 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.
%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}
......@@ -53,19 +51,51 @@ Le format Pajé est le format le plus utlilisé pour la représentation de trace
%\label{variables}
%\end{figure}
\end{itemize}
\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 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.
\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 (OTF, Tau, Pajé) et le logiciel est disponible sur divers 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 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. \\
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.
\begin{figure}[!htbp]
\centering
\includegraphics[height=6cm]{img/states.jpg}
\caption{Trace ne contenant que des containers 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}.
\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 contenant 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 de ViTE. Le rendu s'appuie sur la librairie OpenGL dont la version 3 a apporté de nombreuses modifications. Certaines fonctions ont été supprimés, 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. 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.
......@@ -74,12 +104,12 @@ Un autre objectif est l'amélioration l'expérience utilisateur. Il fallait ains
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é la valeur du pic de consommation mémoire 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é 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.
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.
\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 de fonctions plus efficaces.
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é \\ Mathias Hastaran}
\end{minipage}
\vspace{10mm}
\center{Deuxième année, filière informatique \\\today}
\end{titlepage}
report/img/events.png

312 KB | W: | H:

report/img/events.png

135 KB | W: | H:

report/img/events.png
report/img/events.png
report/img/events.png
report/img/events.png
  • 2-up
  • Swipe
  • Onion skin
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