Introduction
- Les enjeux de la programmation Multicore dans les années à venir.
- Tableau général des technologies utilisables : processus, threads et parallélisme.
- Description et rappel du fonctionnement d'un processeur.
- Les architectures en " Hyperthreading ".
- Les architectures des processeurs INTEL™ et AMD™.
- Les architectures NVidia™ et API™.
- Les aspects synchronisation à prévoir : cas généraux.
Modélisation des applications
- Importance des aspects modélisation.
- Parallélisation des traitements (ex : calcul).
- Utilisation des mécanismes asynchrones : processus, threads…
- Développer une nouvelle application : précautions et modélisation.
- Eviter les " singletons ".
- Modifier une application existante en Multicore : problèmes rencontrés.
- Choix d'architecture : un compromis synchronisation et performance.
- Choix multiprocessusus/multithreads.
Threads
- Organisation d'un système à base de threads.
- Les threads dans les systèmes et les langages (exemple : Java, .NET et C++).
- Apport des threads dans une application industrielle.
- Ordonnancement des threads dans les systèmes : technique du " round robin ".
- Gestion des stacks et " call stack " dans les threads.
- Les débogueurs multithreads : ex Visual Studio et NetBeans™.
- Gestion des objets de synchronisation : sections critiques, Mutex et Sémaphores.
- Développer " Thread safe ".
- Règles pour développer en approche multithread.
- Les API de threads avec Windows, Java et DOT Net.
- Les API de POSIX.
Travaux pratiques
Threads et synchronisation en DOT Net, Java et C++.
Processus
- Espaces d'adressage des processus, organisation.
- Critères de choix d'une approche multiprocessus.
- Ensemble des techniques de communication interprocessus (IPC).
- Techniques de debugging multiprocessus, nouveaux outils (ex : Visual Studio 2005).
- Avantage et inconvénients des techniques multiprocessus.
- Particularité : les " Domain " DOT Net.
Travaux pratiques
Gestion de traitements asynchrones avec l'API Windows.
La programmation parallèle
- L'apport et les objectifs de la programmation parallèle.
- " Parallel FX " la bibliothèque DOT Net pour paralléliser.
- Architecture PFX et philosophie.
- Composants TPL et PLINQ.
- La librairie " OpenMp " C++.
- Directives " OpenMP " disponibles.
- Utiliser les GPU des cartes graphiques pour le calcul.
- Les kits de NVidia (CUDA) et ATI.
- Exemple d'applications utilisant les bibliothèques.
- Exemple de code et commentaires.
Travaux pratiques
Paralléliser des algorithmes avec PFX C#. Paralléliser des algorithmes avec " OpenMP " en C++.
Synthèse et conclusion
- Conclusion des techniques étudiées.
- L'avenir de C++ avec le multicore.
- Synthèse des approches de Design, threads, multiprocessusus et programmation parallèle.