Tutoriel #2 : comprendre et maitriser les affinités matérielles avec Hardware Locality (hwloc)

L'augmentation du nombre de coeurs dans les processeurs rend les serveurs de calcul de plus en plus complexes, avec de multiples niveaux de hiérarchies mémoire et des distances variables entre les différents composants matériels. Ce tutoriel expliquera pourquoi l’exploitation efficace de la puissance de calcul impose de comprendre la topologie matérielle et de la combiner à la connaissance des affinités logicielles. Nous présenterons le logiciel Hardware Locality (hwloc) qui est conçu pour simplifier la vie des développeurs en représentant la topologie des ordinateurs de manière abstraite et portable.

Nous présenterons d’abord les différents niveaux de hiérarchies existants (processeurs, coeurs, caches partagés, NUMA, I/O, ...) avant d’expliquer pourquoi les applications sont difficilement portables d’une machine à l’autre. On donnera ensuite des exemples où l’affinité est importante en HPC (placement MPI selon le schéma de communication, placement de threads OpenMP selon les sections parallèles, et adaptation des communications selon les affinités des périphériques). On présentera ensuite le logiciel hwloc, comment il permet de représenter la topologie et de modifier/vérifier le placement des tâches de calculs. On entrera enfin dans l’interface de programmation

Intervenants

Audience

Le tutoriel est conçu pour les développeurs (notamment en HPC) qui souhaitent optimiser leurs applications et/ou bibliothèques en tenant compte des affinités matérielles. Des connaissances basiques en architecture matérielles sont conseillées mais beaucoup de notions seront réexpliquées au fil des exemples donnés dans le tutoriel. Aucune connaissance de hwloc n'est requise.

Programme

  • Introduction à la complexité des plates-formes de calcul modernes
    • Beaucoup de niveaux de hiérarchie (processeurs, coeurs, caches partagés, NUMA, I/O, etc)
    • Rien n'est portable!
  • Pourquoi les affinités sont importants? Des exemples concrets
    • Placement de processus MPI selon le schéma de communication
    • Placement de threads OpenMP selon les boucles parallèles imbriquées
    • Adaptation des stratégies de communication à la localité des périphériques
  • Consulter et gérer les affinités avec les outils hwloc
    • Comprendre la topologie matérielle
    • Observer (et modifier) le placement des tâches
  • Intégrer la puissance d'hwloc dans votre application
    • Trouver des ressources matérielles et consulter leurs attributs
    • Binder des tâches

Références

  1. Portable Hardware Locality (hwloc). http://www.open-mpi.org/projects/hwloc/.
  2. Brice Goglin, Jeff Squyres, and Samuel Thibault. Hardware Locality: Peering under the hood of your server. Linux Pro Magazine, 128:28-33, July 2011.
  3. Brice Goglin and Stéphanie Moreaud. Dodging Non-Uniform I/O Access in Hierarchical Collective Operations for Multicore Clusters. In the CASS workshop (IPDPS 2011), Anchorage, AK, May 2011. IEEE Computer Society Press. Available here.
  4. Stéphanie Moreaud, Brice Goglin, and Raymond Namyst. Adaptive MPI Multirail Tuning for Non-Uniform Input/Output Access. In EuroMPI 2010, volume 6305 of Lecture Notes in Computer Science, pages 239-248, Stuttgart, Germany, September 2010. Springer-Verlag. Best paper award. Available here.
  5. François Broquedis, Jérôme Clet-Ortega, Stéphanie Moreaud, Nathalie Furmento, Brice Goglin, Guillaume Mercier, Samuel Thibault, and Raymond Namyst. hwloc: a Generic Framework for Managing Hardware Affinities in HPC Applications. In PDP2010, Pisa, Italia, February 2010. IEEE Computer Society Press. Available here.