Si vous cherchez une page portant sur les schémas de conception au sens large, vous la trouverez ici.
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
Répertoire de techniques pour implémenter des schémas de conception à l'aide de TBB : https://software.intel.com/en-us/node/506112
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# :
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 :
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.
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.