Calcul à Hautes Performances (et Support au Big Data) sur CPU
Mineure de 3ème année à CentraleSupélec

Stéphane Vialle

    

Le calcul à haute performance (HPC – High Performance Computing) permet d'obtenir aujourd'hui des résultats qui ne seront atteignables sur de simples PCs que dans plus de dix ans. Les enjeux du HPC sont stratégiques : simulation et compréhension du climat, optimisation de la production d'énergie, analyse financière temps réel, analyse de sous-sol pour la recherche pétrolière... et plus récemment en support aux applications de Big Data. Les pays les plus industrialisés de la planète font une course sans fin pour disposer des plus gros moyens de calculs, allant jusqu’à des systèmes de plusieurs centaines de milliers de coeurs (voire de plusieurs millions). Mais des systèmes de calcul à haute performance plus modestes sont maintenant couramment utilisés dans de très nombreuses entreprises et laboratoires, et deviennent accessibles dans des « clouds » ou dans des systèmes embarqués. Malheureusement le savoir-faire pour les exploiter fait toujours défaut.

High Performance Computing (HPC) is the way to achieve today some results that will be achieved on classic PCs only in ten years or further. HPC has strategic objectives: climate simulation and forecasting, optimization of power plants, real time financial analysis, underground analysis for oil industry... and more recently support for Big Data applications. Most industrialized countries are always racing to build and to have access to the most powerful computers, up to hundred thousand cores (and soon million cores). However, smaller HPC systems are currently required and installed in many companies and laboratories, and can now be accessed in “clouds” or in embeded systems. But expertise to efficiently program and use these HPC systems is still frequently missing.

Ce cours à comme premier objectif d’appréhender par la pratique la programmation des architectures parallèles modernes à base de CPU (PC multi‐coeurs incluant des unités vectorielles, et clusters de PC), avec des outils de programmation standards et utilisés autant dans l’industrie que dans la recherche scientifique (BLAS, OpenMP, MPI). Sur ce socle de connaissances pratiques le deuxième objectif du cours est de fournir un ensemble de connaissances scientifiques sur le calcul à haute performance (algorithmique parallèle et distribuée, modèles et analyse de perfomances, critères de passage à l'échelle), ainsi que des connaissances sur les aspects économiques et énergétiques des superordinateurs.

    1. Vue d'ensemble du calcul à haute performances : Les principales architectures parallèles, l'évolution régulière de la puissance de calcul mondiale, les enjeux économiques de la construction des supercalculateurs,  les tendances actuelles.
    2. Optimisation sérielles et vectorisation sur un coeur de calcul : Optimisation des noyaux de calculs séquentiels (options du compilateur,  bonne exploitation de la mémoire cache...), vectorisation des boucles de calculs sur les unités AVX, utilisation d'une bibliothèque BLAS, mesures de performances.
    3. Développement parallèle sur un PC multi-coeurs : Algorithmique et programmation multithreads (avec OpenMP), réutilisation de noyaux de calculs optimisés et vectorisés ou de noyaux BLAS. Mise en oeuvre sur PC multi-coeurs, analyse des performances obtenues.
    4. Développement distribué et déploiement sur un cluster de PC multi-coeurs : Algorithmique et programmation distribuée par envoi de messages entre noeuds de calculs (avec MPI), réutilisation d'un code multithreads sur chaque noeud, déploiement d'une application distribuée et multithreads sur une architecture hiérarchique (clusters de PC multi-coeurs), recherche du meilleur déploiement et analyse des performances.
    5. Algorithmique distribuée : Partitionnement statique par domaine avec échange de frontières, ou circulation de données en anneau, tore ou hypercube, recouvrement des calculs et des communications. Modélisation des performances et analyse de résultats expérimentaux. 
    6. Modélisation, mesure et analyse de performances : Difficultés et règles de mesure de performances. Modélisations et lois de Amdahl et de Gustafson, et liens entre ces deux lois. Analyse de phénomènes d’hyper-accélération. Critères et démarche de passage à l'échelle.
  1. Vue d'ensemble du Calcul à Haute Performance
Overview of HPC 2 slides par page 3 slides par page 6 slides par page
Evolution, marché et gestion des machines 2 slides par page 3 slides par page 6 slides par page
Site web du "Top 500" des superordinateurs http://www.top500.org/
Site web "SPEC" : Standard Performance Evaluation Corporation http://www.spec.org/
  1. Optimisations sérielles et vectorisation sur un coeur de calcul
Optimisations sérielles et vectorisation 2 slides par page 3 slides par page 6 slides par page
Documentation IntelA Guide to Vectorization with Intel® C++ Compilers
  1. Développement parallèle sur un PC multi-coeurs (sur un noeud de calcul à mémoire partagée)
OpenMP - l'essentiel 2 slides par page 3 slides par page 6 slides par page
OpenMP API
OpenMP 4.5
OpenMP 5.0


BLAS dgemm
2 slides par page 3 slides par page 6 slides par page

  1. Développement distribué et déploiement sur un cluster de PC multi-coeurs (sur une architecture distribuée)
MPI-1 - L'essentiel 2 slides par page 3 slides par page 6 slides par page
MPI-1 - Produit de matrices sur anneau
2 slides par page 3 slides par page 6 slides par page
MPI-1 - Comms. asynchrones et recouvrement
2 slides par page 3 slides par page 6 slides par page
MPI-1 Manuel de référence errata Documentation hyper-texte MPI-Pro
MPI-2 Manuel de référence



  1. Algorithmique distribuée : 
Algorithmique distribuée
2 slides par page3 slides par page6 slides par page
  1. Modélisation, mesure et analyse de performances :
Performances2 slides par page3 slides par page6 slides par page
TP-1 : Optimisations sérielles, vectorisation et BLAS sur un coeur de calcul
Enoncé 1
TP-2 : OpenMP - multithreading sur un PC multiprocesseurs et multicoeurs (mémoire partagée)
Enoncé 2
TP-3 : MPI-1 - envois de messages sur un cluster de PC (mémoire distribuée)
  • TP-3.1 : Programmation sans recouvrement calculs/communications, et déploiement sur cluster de PC multi-coeurs
  • TP-3.2 : Programmation avec recouvrement calculs/communications
Enoncé 3.1

Enoncé 3.2
   
Règles d'évaluation en compétences à partir des comptes rendus de TP : ici
Campus de Metz
27/09/2019 - B208
04/10/2019 - A304
11/10/2019 - B208
18/10/2019 - A304
25/10/2019 - B208
08/11/2019 - A205
15/11/2019 - F001
22/11/2019 - A304
29/11/2019 - IO

06/12/2019 - secours
13/12/2019 - secours