1 Introduction
L’algorithmique distribuée est la branche de l’algorithmique s’intéressant à la conception d’al-
gorithmes dédiés à tout ensemble d’unités de calcul (par exemple des processeurs) indépendants,
exécutant chacun leur propre code, et dont l’objectif est la résolution commune d’un problème,
ou la réalisation commune d’une tâche. La frontière entre algorithmique parallèle et algorith-
mique distribuée est parfois floue. Il convient néanmoins d’insister sur le caractère indépendant
des processeurs impliqués dans l’exécution d’un algorithme distribué. Un tel algorithme ne doit
pas supposer d’unité de contrôle centrale : le contrôle est lui-même distribué 1. Par ailleurs, ou
en conséquence de la nature distribuée du contrôle, un algorithme distribué ne doit pas se baser
sur des hypothèses trop fortes relatives au degré de connaissance dont les processeurs disposent
de leur environnement. L’algorithmique distribuée cherche donc moins la performance comme
dans le parallélisme que savoir gérer l’incertitude liée à l’environnement 2. Cette incertitude est
générée par de multiples causes, dont la distance pouvant séparer les processeurs dans un ré-
seau, la présence potentielle de pannes, le degré d’asynchronisme lié à des vitesses d’exécution
variables, etc.
Internet est l’exemple typique de systèmes distribués. Le processeurs sont interconnectés
par un réseau, ils sont asynchrones et susceptibles de tomber en panne. Internet est composé
de sous-réseaux autonomes (les SA, pour « systèmes autonomes »), gérés individuellement par
des administrateurs distincts, parfois concurrents, voire rivaux. A une toute autre échelle, un
processeur multi-cœurs forme également un système distribué, dans lesquels les cœurs doivent
s’auto-organiser pour exécuter les tâches du système d’exploitation en parallèle. De fait, la liste
des systèmes distribués est immense, des réseaux de communication sans fil aux réseaux de
capteurs, en passant par le « cloud computing » et les systèmes embarqués au sein d’une voiture
ou d’un avion 3.
Dans ce cours, nous distinguerons principalement deux problématiques au cœur de l’algorith-
mique distribuée : (1) gérer les contraintes spatiales, et (2) gérer les contraintes temporelles. Dans
le premier cas, il s’agira d’apprendre à concevoir des algorithmes distribués pour les réseaux,
n’impliquant que des communications entre processeurs à faible distance les uns des autres,
et/ou n’impliquant qu’un faible volume de communication entre les processeurs. Dans le second
cas, il s’agira de concevoir des algorithmes distribués pour des systèmes asynchrones, c’est-à-dire
impliquant des processeurs dont les vitesses d’exécution peuvent varier fortement entre elles et
dans le temps, voire des processeurs pouvant tomber en panne (vitesse nulle).
Le cours abordera dans un second temps la conception de structure de données distribuées,
en insistant sur la conception de structure de petite taille, dite compact. De telles structures de
données peuvent être souhaitables par exemple pour la conception de table de routage dont la
taille ne croît pas trop vite avec la taille du réseau, ou pour la stockage de données XML. Enfin,
une dernière partie du document sera consacrée à une introduction à l’algorithmique parallèle, et
le document se conclut par un aperçu des techniques probabilistes pour résoudre des problèmes
de communications globales comme la diffusion d’un message d’une source à l’ensemble des
processeurs d’un réseau.
Le lecteur est invité à consulter les ouvrages de référence suivant : [1, 3, 4].
1. Pour prendre une analogie militaire, la gestion d’une armée structurée sous les ordres d’un général a trait
au parallélisme, alors que la gestion d’une foule de révolutionnaires sans leader pré-défini a trait au distribué.
2. Cette distinction entre performance et incertitude a été mise en évidence par M. Raynal, de l’Université de
Rennes.
3. L’algorithmique distribuée est également un outil pour comprendre le comportement de systèmes non
technologiques, dont par exemple les colonies de fourmis, les volées d’oiseaux ou les bancs de poissons.
4