Description du sujet de projet, outils logiciels:
EasyPAP est
un environnement logiciel développé à Bordeaux destiné à faciliter
l'apprentissage de la programmation parallèle à de multiples niveaux
(parallélisme vectoriel, multicoeurs, GPU et même distribué). Il est utilisé en L3 (Programmation Système) et en
M1 (Programmation des architectures parallèles) à l'Université, ainsi qu'à l'Enseirb Info/2A (Programmation
multicoeur et GPU).
L'idée principale consiste à proposer des outils de visualisation du
comportement et des performances de "noyaux de calcul" dont le résultat
produit des images 2D. Cette plateforme permet aux étudiants de :
- manipuler des tableaux à deux dimensions (matrices) contenant les pixels de l'image ;
- programmer des traitements itératifs s'appuyant sur l?image courante pour calculer la suivante ;
- développer des versions parallèles, c'est-à-dire utilisant plusieurs processeurs ou des cartes graphiques,
pour accélérer le calcul de ces traitements ;
- vérifier visuellement que l'implémentation des traitements se déroule correctement ;
- mesurer et observer l'évolution du temps d'exécution en fonction du nombre de processeurs utilisés ;
- générer une trace d'exécution (sorte de profiling) permettant d'analyser a posteriori l'enchainement des
tâches au sein de chaque itération.
Ce dernier point est réalisé par une application (nommée EasyView) qui permet de naviguer dans les traces de
manière interactive. Son originalité réside dans le fait qu'en plus du traditionnel diagramme de Gantt montrant
l'historique d'exécution des tâches de l'application, il est possible d'observer la zone de l'image
que chaque tâche a calculé. Cela permet de mieux comprendre l'ordre dans lequel les tuiles de l'image ont été
traitées, juste en bougeant la souris. L'animation ci-dessous illustre l'utilisation d'EasyView pour comparer
deux traces d'exécution d'une application exécutée sur 12 CPUs. Les 2/3 gauche de la fenêtre affichent la
chronologie des tâches par CPU, et les vignettes à droite montrent les tuiles calculées par les tâches à
l'instant sélectionné par la souris. L'article disponible ici contient un survol
des fonctionnalités offertes par EasyView. L'implémentation actuelle d'EasyView est en langage C et s'appuie sur
la
bibliothèque graphique SDL.
L'objectif de ce projet est de revoir en profondeur l'application EasyView de manière à ajouter les
fonctionnalités suivantes :
- Proposer une interface graphique moderne permettant de redimensionner les sous-fenêtes, de disposer de
menus, de boutons et d'ascenseurs permettant de personnaliser la vue ;
- Permettre la navigation au sein de traces d'exécution volumineuses, ce qui nécessite de pouvoir s'appuyer
sur un chargement partiel des traces en mémoire (technique de fenêtre glissante), ainsi que de proposer un
outil de navigation rapide dans les traces en fonction du niveau de zoom (timeline miniature)
- Permettre d'observer les taux de défaut de cache pour chaque tâche, en s'appuyant sur la bibliothèque PAPI
pour capturer les compteurs de performance des processeurs et les enregistrer dans la trace ;
- Permettre la mise en surbrillance des itérations/intervalles pour lesquelles une expression saisie par
l'utilisateur est vérifée (e.g. iter | idleness (iter) > 50%), et plus généralement permettre l'affichage
d'un certain nombre de statistiques globales/locales ;
Une attention particulière sera portée sur la fluidité de l'interface, et sur la robustesse du code. Le langage
utilisé sera vraisemblablement C++. Le choix de l'interface graphique de haut-niveau est libre.