Objectifs de la formation
- Maîtriser les enjeux de la programmation Multicore
- Concevoir et développer des applications à base de threads et de processus
- Maîtriser les modèles de programmation parallèle et les librairies disponibles
- Déboguer et profiler des applications Multicore
Programme de la formation
Introduction
- Enjeux de la programmation Multicore.
- Tableau des technologies utilisables : processus, thread et parallélisme.
- Description du fonctionnement d’un processeur.
- Architecture en « Hyperthreading ».
- Architectures des processeurs INTEL et AMD.
- Architectures NVidia et API.
- Architecture en mémoire partagée vs mémoire distribuée.
Modélisation des applications
- Importance des aspects modélisation.
- Patterns de mise en parallèle des traitements.
- Utilisation des mécanismes asynchrones.
- Développer une nouvelle application : précautions et modélisation. Eviter les « singletons ».
- Modifier une application existante en Multicore.
- Choix d’architecture : un compromis synchronisation et performance. Choix multiprocessus/multithreads.
Threads
- Apport des threads dans une application industrielle.
- Ordonnancement des threads.
- Gestion des stacks et « call stack » dans les threads.
- Débogueurs multithreads.
- Gestion des objets de synchronisation : sections critiques, Mutex et Sémaphores.
- Développer « thread safe ».
- API de threads TBB, Clik++, C++11, boost threads, pthreads.
Travaux pratiques
Threads et synchronisation en C/C++.
Processus
- Espaces d’adressage des processus, organisation.
- Critères de choix d’une approche multiprocessus.
- Techniques de communication interprocessus (IPC).
- Outils de debugging multiprocessus.
- Avantage et inconvénients des techniques multiprocessus.
Travaux pratiques
Gestion de traitements asynchrones avec l’API C/C++.
La programmation parallèle
- Apport et objectifs de la programmation parallèle.
- La librairie « OpenMP » C++ (programmation mémoire partagée).
- La librairie « OpenMPI » (programmation mémoire distribuée).
- Utiliser les GPU des cartes graphiques pour le calcul.
- Kits de NVidia (CUDA) et ATI.
- La librairie « OpenAcc » pour la programmation GPU.
- La librairie « OpenCL » pour la programmation parallèle CPU et GPU.
Travaux pratiques
Paralléliser des algorithmes avec « OpenMP » en C++. Utilisation de l’API OpenCL.
Synthèse et conclusion
Avenir du C++ avec le multicore.
Conclusion des techniques étudiées.