Programmation parallèle et langages fonctionnels: de la paresse à l'indulgence

Au cours des dernières années, les performances des ordinateurs se sont accrues de façon impressionnante. Malgré cela, certains problèmes complexes ne peuvent pas toujours être résolus sur des ordinateurs traditionnels. Auparavant, de tels problèmes étaient généralement résolus à l'aide de super-ordinateurs hautement performants (e.g., ordinateurs CRAY). De nos jours, ces super-ordinateurs laissent de plus en plus la place aux ordinateurs massivement parallèles, lesquels obtiennent leur puissance de l'utilisation d'un grand nombre de processeurs simples.

L'un des principaux problèmes empêchant une percée plus importante des ordinateurs massivement parallèles est la difficulté de programmer de telles machines. Une approche souvent suggérée est l'utilisation de la programmation fonctionnelle, approche particulièrement intéressante dans la mesure où son modèle d'exécution sous-jacent est implicitement parallèle plutôt que séquentiel, facilitant ainsi la tâche d'expression et exploitation du parallélisme.

Dans le cadre de cet exposé, nous allons tenter de montrer comment la programmation fonctionnelle peut être une alternative intéressante au modèle classique de programmation impérative pour la programmation de machines massivement parallèles. Pour ce faire, les différentes sortes de langages fonctionnels -- stricts, paresseux et indulgents -- seront présentés et leurs principales caractéristiques -- en termes de pouvoir expressif et d'expression du parallèlisme -- seront examinées. On verra alors que toutes les formes de langages fonctionnels ne sont pas aussi parallèles les unes que les autres.

Finalement, on verra comment l'introduction de certaines constructions non-fonctionnelles ("impures") peuvent, pour certains problèmes, permettre d'exprimer plus simplement certaines solutions tout en améliorant le parallélisme.

Pour obtenir les acétates

Cliquez ici pour obtenir les acétates (postscript).