Schémas de conception en programmation parallèle et concurrente

Si vous cherchez une page portant sur les schémas de conception au sens large, vous la trouverez ici.

Généralités

Un groupe de schémas de conception propres au monde de la multiprogrammation est disponible ici : http://www.cs.wustl.edu/~schmidt/patterns-ace.html

Choisir les bonnes pratiques pour des programmes parallèles, présentation de 2011 selon une optique C++ 11 : http://www.justsoftwaresolutions.co.uk/files/picking_parallel_patterns.pdf

Un comparatif portant sur l'efficacité de certaines stratégies d'entrées/ sorties dans des systèmes concurrents est disponible sur http://www.artima.com/articles/io_design_patterns.html

Le groupement d'objets :

Le Double-Checked Locking :

Singleton et initialisation paresseuse avec C#, selon James Michael Hare en 2010 : http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/19/c-system.lazylttgt-and-the-singleton-design-pattern.aspx

Quelques textes de Dzmitry Huba, sur des techniques avec C# :

Selon la littérature

Ce qui suit survole les schémas de conception répertoriés dans Patterns for Parallel Programming. Je les expliquerai en détail éventuellement, mais d'ici là, ceci vous fera un aide-mémoire...

Identifier la concurrence Structure des algorithmes
Structures de support Mécanismes d'implémentation

D'autres avenues existent :

Identifier la concurrence

Décomposer les tâches

Décomposer les données

Regrouper les tâches

Ordonnancer les tâches

Partager les données

Analyser le design

Structure des algorithmes

Choisir une structure

Parallélisme des tâches

Diviser pour régner

Décomposition géométrique

Structures de données récursives

Pipeline

Un pipeline de opérations applique chacune de ces opérations, en séquence, à chaque élément d'un ensemble de échantillons . Dans un pipeline, l'opération sur un échantillon dépend de l'opération sur , mais en retour l'opération sur l'échantillon peut être faite en parallèle avec l'opération sur l'échantillon .

Un pipeline de étapes, bien alimenté et dont la complexité de chaque étape est similaire à celle des autres étapes, permet d'approcher un parallélisme de tâches s'exécutant de manière concurrente.

Coordination événementielle

Structures de support

Single Program, Multiple Data (SPMD)

Maître / esclave

Parallélisme de boucle

Modèle fork / join

Le terme fork apparaît aussi dans le schéma de conception parallèle bien connu qu'est l'approche fork / join :

C'est l'un des modèles préconisés par OpenMP pour des trucs comme un parallel for.

En général, ce modèle permet de lancer (fork) plus de threads qu'on en attend (join). C'est un modèle flexible mais qui exige de la discipline de la part des programmeuses et des programmeurs.

Données partagées

File partagée

Tableau réparti

Mécanismes d'implémentation

Gestion des unités de traitement

Synchronisation

Communication


Valid XHTML 1.0 Transitional

CSS Valide !