Considérations de parallélisme et de concurrence
Pour des raisons historiques, vous trouverez aussi des
articles sur des sujets connexes dans la section sur les
systèmes client/
serveur de ce site.
Vous trouverez dans cette section du site quelques articles portant sur des
thématiques en lien avec le parallélisme et la programmation concurrente.
Si vous avez des questions, vous pouvez évidemment me contacter (mes
coordonnées sont sur la page où se trouve mon horaire); je fais toujours
de mon mieux pour
répondre dans des délais raisonnables.
Conditions du parallélisme
Voir Bernstein, A. J. (Oct. 1966).
Analysis of Programs for Parallel Processing. IEEE Transactions on Electronic Computers. EC-15 (5): 757–763
pour le texte original.
En 1966, A. J. Bernstein, a mis de l'avant un
certain nombre de conditions devant s'avérer pour que deux « segments de
programme » puissent s'exécuter correctement en parallèle. Les conditions de
Bernstein, comme on les appelle, sont :
- Soit un segment de programme avec intrants et extrants
- Soit un segment de programme avec intrants et extrants
- et peuvent être exécutés en parallèle si et et
(donc s'il n'y a pas de dépendances de données entre eux)
- en particulier, cela signifie que deux passages et
peuvent être exécutés en parallèle si l'un ne dépend pas du fruit de
l'exécution de l'autre
Aujourd'hui, on privilégie les
continuations pour réduire le blocage même en situation de dépendance de
données; on fait ainsi une « lecture créative » des résultats
classiques. Cela dit, on constate ici que les conditions de Bernstein
rejoignent l'acception du
parallélisme tel que mis de l'avant par plusieurs experts.
À propos du mot « parallélisable »
En général, j'utiliserai le néologisme « parallélisable » pour « qui est
susceptible d'être traité en parallèle ». Le mot me semble bien formé, mais
n'existe malheureusement pas en français et je n'y vois pas d'équivalent évident
(je suis ouvert aux suggestions si vous en avez!)
Lectures complémentaires
Comment
Leslie Lamport percevait les problèmes fondamentaux de la programmation
concurrente, en 1983 (même si le texte a été publié en
1984) :
http://research.microsoft.com/en-us/um/people/lamport/pubs/solved-and-unsolved.pdf
Je ne suis pas très porté sur les vidéos, faute de temps, mais
http://www.infoq.com/presentations/Thinking-Parallel-Programming par
Guy
Steele est vraiment intéressant. De même, cette conversation entre
Bjarne
Stroustrup,
Carl Hewitt et
David Ungar est fort instructive :
http://channel9.msdn.com/Blogs/Charles/A-Conversation-with-Bjarne-Stroustrup-Carl-Hewitt-and-Dave-Ungar
Discussions d'idées générales sur l'immuabilité :
Discussions d'idées générales sur le parallélisme :
- La vogue du parallélisme, un retour de vieilles idées?
http://cacm.acm.org/magazines/2010/6/92479-the-resurgence-of-parallelism/fulltext
- Si vous ne pouvez pas le rendre rapide, rendez-le parallèle :
http://blog.cyll.org/post/880597454/if-you-cant-make-it-fast-make-it-parallel
- Les périls du passage au parallélisme, selon Steve Apiki en 2009 : http://drdobbs.com/high-performance-computing/214500497
- Développer des bibliothèques de parallélisme à
haute performance :
http://www.drdobbs.com/go-parallel/article/showArticle.jhtml;jsessionid=MUIULNTFUDRZZQE1GHPSKH4ATMY32JVN?articleID=227501006
- Paralléliser la multiplication de matrices, texte intéressant d'Alex Voicu
en 2014 :
http://blogs.msdn.com/b/nativeconcurrency/archive/2014/09/04/raking-through-the-parallelism-tool-shed-the-curious-case-of-matrix-matrix-multiplication.aspx
- Considérations de design pour fins de programmation en parallèle, par David Callahan en 2008 : http://msdn.microsoft.com/en-us/magazine/cc872852.aspx
- Amélioration des « performances » par voie de
parallélisme :
- L'impact systémique d'un
thread consommant trop de ressources, par
Raymond Chen en 2005 :
http://blogs.msdn.com/b/oldnewthing/archive/2005/12/01/498882.aspx
- Quelques questions et quelques réponses sur la programmation parallèle, entrevue de 2009 avec James Reinders : http://drdobbs.com/high-performance-computing/214500435
- Le parallélisme est important, mais la
complexité
algorithmique l'est souvent plus. Un exemple en
Scala,
par Juan Cruz Nores en 2011 : http://www.codng.com/2011/09/parallelism-performance-why-o-notation.html
- En 2012, Daniel Holden prétend que ce
n'est pas tant le parallélisme que l'optimisation
qui est complexe : http://theorangeduck.com/page/parallel-programming-isnt-hard-optimisation
- Publication de 2012 par des membres d'une
équipe menée par Joe Duffy (voir
http://www.bluebytesoftware.com/blog/2012/12/08/ImperativeFunctional.aspx), portant sur une extension au langage
C# permettant
certaines formes de parallélisation automatiques en formalisant des concepts
tels que l'immuabilité et l'isolation :
http://research.microsoft.com/pubs/170528/msr-tr-2012-79.pdf
- Un peu à contre-courant, Andrew Binstock écrit en
2012 pour nous dire que le parallélisme ne lève pas (côté
client, du moins), au sens d'une application multiprogrammée tirant mieux
profit des
multiples coeurs mis à sa
disposition. Par contre, la
multiprogrammation à plusieurs
processus,
elle, se porte selon lui très bien :
http://www.drdobbs.com/parallel/will-parallel-code-ever-be-embraced/240003926
- Exemple d'optimisation
de code parallèle, par Aater Suleman en 2011 :
http://www.futurechips.org/tips-for-power-coders/writing-optimizing-parallel-programs-complete.html
- Les I/O Completion Ports, expliqués par
Kenny
Kerr en 2014 :
https://kennykerr.ca/2014/11/29/io-completion-ports/
Discussions d'idées générales sur la concurrence :
Quelques problèmes fondamentaux de la synchronisation :
Quelques articles de
Herb
Sutter :
Quelques articles de 2005 par Larry Osterman, programmeurs
système pour la plateforme
Microsoft
Windows :
Réflexions de
Bartosz Milewski sur le futur de la programmation concurrente :
Pourquoi la programmation concurrente est-elle difficile? Réflexion de Stefan
Marr en 2014 :
http://www.stefan-marr.de/2014/07/why-is-concurrent-programming-hard/
Quelques présentations d'Anthony Williams :