
Calcul à Hautes Performances et Support au Big Data
Mineure de 3ème année à CentraleSupélec
Stéphane Vialle
-
Thème et objectifs du cours :
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 sousol
pour la
recherche pétrolière... et plus récemment en support aux applications
de Big Data et de Machine Learning. 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 and Hadoop 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 les plus utilisées
(processeurs CPU multi‐coeurs, processeurs graphiques (GPU), et
clusters de CPU et de GPU) avec des outils de programmation standards
et utilisés autant dans l’industrie que dans la recherche scientifique
(ex : OpenMP, MPI, CUDA et Hadoop). Sur ce socle de connaissances
pratiques le deuxième objectif du cours est de fournir un ensemble de
connaissances scientifiques et économiques sur le calcul à hautes
performances, telles que les bases de l’algorithmique parallèle, les
grilles de calcul à très large échelle, les acteurs et les enjeux du
domaine, et enfin les conséquences et les défis énergétiques associés à l’utilisation de super‐ordinateurs.
-
Contenu du cours :
- Notions d’architectures parallèles et distribuées : 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.
- Outils de programmation parallèles et distribués :
Principaux
outils
de développement actuels sur architectures parallèles et distribuées
modernes
(OpenMP et MPI) et sur accélérateurs SIMD (CUDA sur GPU). Mise en
oeuvre sur PC multi-coeurs, clusters de PC multi-coeurs, et sur GPU.
- Algorithmique parallèle et distribuée : Partitionnement
statique par domaine avec échange de frontières ou circulation de données,
recouvrement des calculs et des communications. Premières 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.
- Problématique du déploiement :
déploiement d'une application distribuées sur une architecture
hiérarchique (clusters de PC multi-coeurs), recherche du meilleur
déploiement.
- Introduction à Hadoop.
- Supports de cours :
- Vue d'ensemble du calcul à haute performances :
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 |
- Optimisation sérielles et vectorisation
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 |
- Algorithmique et programmation multithreads (OpenMP) :
OpenMP - l'essentiel |
 |
2 slides par page |
 |
3 slides par page |
 |
6 slides par page |
OpenMP API
|
 |
OpenMP 4.5
|
|
OpenMP 5
|
|
|
BLAS dgemm
|
 |
2 slides par page |
 |
3 slides par page |
 |
6 slides par page |
- Algorithmique et programmation distribuée (MPI) :
MPI-1 - l'essentiel |
 | 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 : index.html |
|
|
- Algorithmique et programmation GPGPU (CUDA) :
CUDA - architecture et principes de base |
 | 2 slides par page |
 | 3 slides par page |
 | 6 slides par page |
CUDA - prog. optimisée |
 | 2 slides par page |
 | 3 slides par page |
 | 6 slides par page |
CUDA : bibliothèque CUBLAS |
 | 2 slides par page |
 | 3 slides par page |
 | 6 slides par page |
CUDA-5.5 |
 | Manuel de programmation en CUDA 5.5 |
 | Manuel de référence de CUDA 5.5 |
 | Guide des bonnes démarches de développement en CUDA 5. |
 | Bibliothèque CUBLAS 5.5 |
- Modélisation, mesure et analyse de performances :
Performances |  | 2 slides par page |  | 3 slides par page |  | 6 slides par page |
BE-1 : Optimisations sérielles, BLAS et parallélisation OpenMP |
Enoncé 1 |
BE-2.1 : MPI-1 - communications bloquantes et déploiement
BE-2.2 : MPI-1 & OpenMP - recouvrement calculs/communications
|
Enoncé 2.1
Enoncé 2.2
|
BE-3.1 : CUDA - programmation de base BE-3.2 : CUDA - optimisations en shared memory BE-3.3 : CUDA - utilisation des cuBLAS
|
Enoncé 3.1
Enoncé 3.2 Enoncé 3.3 |
|
Règles d'évaluation en compétences à partir des comptes rendus de BE :
ici
Cours à Gif - S1 |
03/10/2018 - D1.13g 10/10/2018 - D1.13g 17/10/2018 - D1.13g 31/10/2018 - D1.13g 07/11/2018 - D1.13g 14/11/2018 - D1.13g 21/11/2018 - D1.13g 28/11/2018 - D1.13g
05/12/2019 - Secours 09/12/2019 - IO
|
-
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.
- J. Sanders and E. Kandrot. "CUDA by Example: An Introduction to General-Purpose GPU Programming". NVIDIA. 2010.