Programmer vos applications en Multicore / Multithread

Code : MTH

Résumé

Objectif

Ce cours vous permettra de comprendre au sein des systèmes et processeurs les
architectures Multicore et leurs programmations. Vous découvrirez les techniques de mise en œuvre d’une approche multithread ou multiprocess et les techniques et langages dédiés à la programmation parallèle, ainsi que les contraintes en matière de synchronisation d’accès aux données et les précautions à prendre pour conserver une performance optimale des applications.

Exercices

La modélisation UML sera utilisée avec un outil, Visual Studio pour la manipulation des langages C# et C++, Eclipse pour Java.
Les exemples seront démontrés grâce aux langages UML, Java, C++ et Dot Net.

Public

Développeurs

Pré-requis

Connaître un langage objet et être sensibilisé au sujet. Connaître un des trois langages utilisés dans le cours : C#, Java ou C++. La lecture des diagrammes UML est un plus.

Durée

3 jours

Programme détaillé

Programme de la formation


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, loi de Amdahl (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 multiprocessus / 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éboggeurs multi-threads : 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 APIs de threads avec Windows, Java et DOT Net
  • Les APIs de POSIX
  • Travail pratique
  • Threads et synchronisation en DOT Net, Java et C++

Processus

  • Espaces d’adressage des processus, organisation
  • Critères de choix d’une approche multi-processus
  • Ensemble des techniques de communication inter processus (IPC)
  • Techniques de Debugging multiprocess, nouveaux outils (ex : Visual Studio 2008)
  • Avantage et inconvénients des techniques multi processus
  • Particularité : Les « Domain » DOT Net
  • Travail pratique : 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
  • Travail pratique
  • Paralléliser des algorithmes avec PFX C#

La librairie « OpenMP » C++

  • Directives « OpenMP » disponibles
  • Travail pratique
  • Paralléliser des algorithmes avec « OpenMP » en C++

Utiliser les GPUs 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

Synthèse et conclusion

  • Conclusion des techniques étudiées
  • L’avenir de C++ avec le multicore
  • Synthèse des approches de Design, threads, multiprocessus et programmation
  • Parallèle

Au sujet du formateur

bertrand

L’équipe LTM

Formation & développement mobile iOS/Android/Web

Contacter l’équipe
Catégories