Objectifs
Vous découvrirez les architectures Multicore et leur programmation, les techniques de mise en œuvre d'une approche multithread ou multiprocessus et les langages dédiés à la programmation parallèle. Vous étudierez également les contraintes en matière de synchronisation d'accès aux données et les précautions à prendre.
A qui s'adresse cette formation
Participants :
Développeurs, architectes logiciels, chefs de projet.
Pré-requis :
Bonnes connaissances de C ou de C++. Connaissances de base des concepts liés aux applications Multicore.
Contenu du cours
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
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
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
Synthèse et conclusion
-
Conclusion des techniques étudiées.
-
Avenir du C++ avec le multicore.