
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.
-
Objectifs et contenu du cours :
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 |
- 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 Intel |  | A Guide to Vectorization with Intel® C++ Compilers |
- 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 |
- 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 |
|
|
|
|
- Algorithmique distribuée :
Algorithmique distribuée
|  | 2 slides par page |  | 3 slides par page |  | 6 slides par page |
- Modélisation, mesure et analyse de performances :
Performances |  | 2 slides par page |  | 3 slides par page |  | 6 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
-
Salles de cours (Metz, Octobre-Décembre 2019) :
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 |
-
Bibliographie :
- Algorithmique parallèle et distribuée :
- B.P. Lester. "The art of parallel programming".
Printice Hall. 1993.
- I. Foster. "Designing and building parallel
programs". Addison-Wesley publishing company. 1994.
- V. Kumar, A. Grama, A. Gupta, G. Karypis.
"Introduction to parallel computing". The Benjamin/Cummings publishing company.
1994.
- A. Legrand et Y. Robert, Algorithmique Parallèle, Dunod (2004).
-
Programmation parallèle et distribuée :
- P.S. Pacheco. "Parallel programming with MPI". Morgan Kaufmann. 1997.
- W. Gropp, E. Lusk, A. Skjellum. "Using MPI". MIT Press. 1999.
- R. Chandra, R. Menon, L. Dagum, D.
Kohr, D.
Maydan, J.
McDonald. "Parallel Programming in OpenMP". Morgan Kaufmann Publishers. 2000.
- B. Chapman, G. Jost, R. Van Der Pas.. "Using OpenMP". MIT Press. 2007.