Olivier AUMAGE
Olivier Aumage Chargé de Recherches (INRIA)

Équipe LaBRI : Supports et Algorithmes pour les Applications Numériques hAutes performanceS
Équipe projet commune INRIA-LaBRI : RUNTIME
Page personnelle : http://dept-info.labri.fr/~aumage/
Courrier électronique : olivier.aumagearobaselabri.fr
Bureau : INRIA
Tél : +33 (0)5 40 00


Recherche

Mes travaux de recherche portent principalement sur la conception d'abstractions du matériel de calcul pour les applications scientifique par l'intermédiaire de supports exécutifs spécialisés.
De par leur position dans la pile logicielle entre le système d'exploitation et les applications, les supports exécutifs offre un potentiel d'optimisations considérable des requêtes applicatives. Le bénéfice de ces optimisations permet de compenser --- voire même d'excéder --- le surcoût intrinsèque d'une couche logicielle supplémentaire : les supports exécutifs apportent non seulement la "portabilité des performances", leur objectif initial, mais aussi la performance en tant que telle.

Durant une dizaine d'années, j'ai plus particulièrement travaillé sur les supports exécutifs pour les réseaux rapides. Depuis 2008, je travaille désormais sur le support du parallélisme à grain fin.

- Supports exécutifs de communication

Le succès des plateformes de calcul de type cluster (grappe) est pour l'essentiel dû à leur excellent rapport performance/coût. Cependant, ce succès est également dû aux progrès des réseaux d'interconnexion hautes performances qui sont à la base de la construction des clusters. Les progrès matériels en termes de latence et de débit ont en effet été accompagnés d'importants progrès au niveau de la couche logicielle permettant la programmation de ces réseaux. À l'aide de différentes techniques telles que la communication en espace utilisateur, les transferts zéro-copie ou le déport de traitements sur le processeur embarqué des cartes de communication, les chemins critiques d'émission et de réception ont été substantiellement réduits. Il ne suffit plus que de quelques centaines de cycles de microprocesseur pour envoyer ou recevoir un message. De plus, des implémentations récentes du standard MPI telles que MPICH-2 ou OpenMPI sont architecturées pour faire une projection directe de leurs primitives point-à-point les plus élémentaires directement sur les routines de pilotage de ces réseaux rapides, et ceci quasiment sans dégradation de performance.

Néanmoins, seules les primitives vraiment élémentaires bénéficient de ces efforts d'optimisation. Les requêtes plus complexes impliquant le transfert de messages structurés ou l'optimisation de transferts multi-flots, par exemple, ont été comparativement bien moins étudiées par la communauté. L'originalité de notre bibliothèque NewMadeleine est de permettre l'amélioration des performances précisément sur les requêtes et schémas de communication complexes en s'appuyant sur une structure conçue spécifiquement, tout en préservant le traitement efficace des requêtes simples. NewMadeleine intègre un moteur d'optimisation dynamique fonctionnant en coopération avec la ou les cartes réseau. Tant que les cartes sont occupées dans la transmission ou la réception d'une requête, le moteur de NewMadeleine accumule simplement les requêtes applicatives suivantes dans une fenêtre d'optimisation. Lorsque l'une des cartes devient inactive, le moteur analyse les requêtes accumulées dans la fenêtre d'optimisation. À partir de cette analyse, il synthétise une requête composite à partir d'une ou plusieurs requêtes applicatives pour re-donner du travail à la carte réseau. Lorsque le moteur parvient a agréger de multiples requêtes applicatives au sein d'une seule requête composite, le gain devient rapidement appréciable. Dans le cas contraire, la couche logicielle de NewMadeleine est suffisamment fine pour que le surcoût reste maîtrisé.

- Supports exécutifs multi-threads

Les architectures multi-processeurs prenant en charge la cohérence de cache présentent désormais plusieurs niveaux de localité entre les processeurs et les caches ou bancs mémoire (machines NUMA, pour Non Uniform Memory Access). Le surcoût induit par les accès mémoire non-locaux constitue un important facteur limitant l'obtention de speed-ups. Il est donc acquis que les applications multi-threads doivent distribuer leurs threads avec soin pour limiter les défauts de cache et les surcoût d'accès distants. Or, les ordonnanceurs traditionnels des systèmes d'exploitation montrent leurs limites dans l'exploitation de ce type d'architecture du fait de leur incapacité à collecter et exploiter des informations sur la structure et le comportement des applications.

L'utilisation efficace de machine NUMA suppose une connaissance précise des schémas d'accès mémoire et des affinités entre threads des applications. Les langages parallèles tels qu'OpenMP sont un intermédiaire privilégié dans l'obtention d'informations sur le code applicatif, grâce à leur compilateur associé. Cependant, ces langages n'intègrent actuellement pas encore la capacité de prise en compte d'architectures NUMA au niveau de leur support exécutif correspondant. C'est pourquoi nous avons proposé une extension du support exécutif du compilateur GNU OpenMP pour permettre l'exécution performante d'applications irrégulières sur des machines NUMA multi-cæurs. Cette extension, appelée ForestGOMP, s'appuie sur notre bibliothèque multi-threads Marcel et sur notre ordonnanceur hiérarchique à bulles BubbleSched.

Cependant, du fait de l'augmentation du nombre de cœurs intégrés dans les processeurs, il devient nécessaire de trouver de plus en plus de parallélisme pour alimenter chacun des cœurs. Il faut pour cela être capable d'extraire du parallélisme de plus en plus fin. Or, au-delà d'un certain seuil de finesse, le coût engendré par la création d'un thread pour traiter une tâche parallèle devient prohibitif par rapport au grain de parallélisme exploité. C'est pourquoi nous étudions actuellement la mise en œuvre de constructions plus légères d'exécution de tâches parallèles telles que les "graines de threads". Le principe des graines de threads est d'éviter autant que possible le coût de création des threads en réutilisant les ressources d'une tâche à une autre chaque fois que le contexte le permet. Les interactions entre l'ordonnanceur des tâches au-dessus des threads et l'ordonnanceur des threads au-dessus des processeurs peuvent être vues comme la "composition" (au sens fonctionnel) des deux ordonnanceurs. Les modalités de cette composition sont au cœur de mes travaux actuels.

Extrait de publications













Responsabilité pédagogique

- Université Bordeaux 1
. Master 2, semestre 1 - Architecture de réseaux et systèmes associés (responsable d'UE): 40h Eq TD (années 2005 et 2006)
. Master 2, semestre 1 - Système et supports d'exécution pour le parallélisme: 33h Eq TD (années 2007 et 2008)

- ENSEIRB
. 3ème année école d'ingénieur, semestre 1 - Langages de programmation pour le parallélisme: 14h Eq TD (2005, 2006, 2007, 2008)
. 3ème année école d'ingénieur, semestre 1 - Supports de communication haute performance: 20h Eq TD (2005, 2006, 2007, 2008)

Administration

- Depuis mars 2008: membre élu au conseil de l'UFR Mathématiques et Informatique de l'Université Bordeaux 1
- 2008-2009: membre de la commission de réflexion sur l'évaluation des logiciels à l'INRIA
- Depuis 2005: membre de la commission des utilisateurs des moyens informatiques du LaBRI
- 2007-2008: membre de l'équipe de secours du LaBRI


Page mise à jour le 13/08/2010 à 10:56