Sous-sections
Mots clés : algorithmique, complexité,
modélisation, ordonnancement, évaluation des performances
.
Résumé :
Dans le domaine de l'algorithmique parallèle, la notion
même d'efficacité ne connaît pas de consensus et il existe
plusieurs modèles de calcul de complexité. Une fois le
parallélisme d'un problème extrait et décrit, il reste à
déterminer l'attribution des ressources (ordonnancement,
placement) de la machine parallèle aux diverses tâches du
programme
. La modélisation
quantitative des exécutions parallèles, permettant de
comprendre les paramètres importants mis en jeu pour la
répartition de charge, est un domaine de recherche
actif.
Algorithmique et complexité
Depuis 20 ans, les recherches ont permis la construction
d'algorithmes parallèles efficaces pour résoudre la plupart
des problèmes admettant déjà une solution séquentielle
efficace. Le modèle de programme unanimement accepté est
celui du graphe de tâches, qui modélise les calculs et les
flots de données entre les calculs. Le modèle de machine
classiquement utilisé, la PRAM (Parallel
Random Access Machine), est constitué d'un nombre
arbitraire de processeurs, fonctionnant de manière synchrone
et coopérant par accès à une mémoire partagée. Il permet
d'évaluer un algorithme en terme de nombre d'opérations ou
travail et temps d'exécution, ainsi que de définir une
classification des algorithmes selon leur temps d'exécution
(classe
par exemple).
Cependant, le modèle PRAM ignore les surcoûts liés aux
synchronisations, aux communications de données et à
l'ordonnancement. Ces surcoûts sont particulièrement
significatifs lorsque les programmes sont irréguliers
[7]. L'analyse d'un algorithme requiert alors
la définition d'un modèle de coût plus précis, donc associé à
un modèle de programmation et de machine permettant de
prendre en compte les surcoûts liés à l'ordonnancement du
programme. Aussi, différentes mesures de coûts (nombre de
synchronisations, volume de communication) ont été introduits
pour obtenir des analyses de complexité plus réalistes sur
des architectures distribuées. Un autre problème lié à la
parallélisation sur un nombre a priori non limité de
ressources est celui de l'explosion de l'utilisation de la
mémoire. En considérant des cadres restreints de programmes,
différents ordonnancements ont été proposés qui permettent de
borner l'utilisation de la mémoire.
Ordonnancement
Les développements théoriques actuels pour le calcul
parallèle ont pour objectif de caractériser des algorithmes
d'ordonnancement (bornes au pire en temps et en mémoire,
optimalité, etc.) pour des modèles d'applications et de
machines réalistes.
Dans le cas des applications, il s'agit de construire des
algorithmes plus compétitifs en les spécialisant à des
classes d'applications caractérisées par un graphe de tâche
particulier. Par exemple, les algorithmes d'ordonnancement
dynamique font l'hypothèse que le programme est très
parallèle et de faible irrégularité. Dans ce contexte, des
techniques de liste permettent d'obtenir un temps d'exécution
asymptotique égal au temps séquentiel divisé par le nombre de
processeurs (donc optimal) [12]. La gestion de la liste (par exemple une
file à priorité) permet de contrôler la mémoire utilisée par
l'exécution parallèle. La prise en compte de connaissances
plus fines sur la structure du programme (par exemple le
programme consiste en une découpe récursive ou est de type
décomposition de domaines [2])
permet d'étendre à d'autres classes de graphe cette
propriété. Dans le cas des machines ( e.g. des
réseaux de stations de travail), il s'agit d'intégrer des
paramètres plus précis permettant d'obtenir une meilleure
modélisation des machines existantes, en particulier des
réseaux de stations.
Modélisation et performance
La compréhension et
l'évaluation quantitative du comportement dynamique
d'applications parallèles, de systèmes distribués ou de
réseaux de communication sont des problèmes difficiles tant
du point de vue de l'analyse a posteriori des phénomènes
observés que de celui de la définition de modèles prédictifs.
En effet, les systèmes modélisés sont caractérisés par un
grand nombre d'éléments constitutifs (processeurs, processus
légers, tâches, messages...) et des interactions complexes
entre ces éléments (communication, synchronisations...). Ils
demandent donc l'analyse d'un grand nombre d'événements pour
observer un comportement global du système.
En ce qui concerne l'analyse a postériori le travail s'est
essentiellement orienté vers la conception d'outils logiciel
de trace et d'analyse de trace. Au niveau de la prédiction de
performances, il a été nécessaire de construire et de
développer des modèles formels couplés avec des outils de
résolution numérique ou de simulation.
À cause de l'indéterminisme temporel des applications
parallèles ou distribuées et de l'imprédictibilité des temps
d'exécution de tâches, les modèles sont exprimés sous la
forme de processus stochastiques multidimensionnels en temps
continu et à espace d'état discret. Les espaces d'état
associés sont de très grande taille et de structure complexe,
cette complexité provenant des synchronisations. Des
techniques formelles spécifiques doivent donc être
développées.
La principale approche retenue actuellement est la
modélisation Markovienne [1].
Pour prendre en compte la structure «distribuée» du système
étudié, le modèle est exprimé sous la forme d'un produit
tensoriel généralisé de processus de Markov. Des algorithmes
numériques performants permettent, en utilisant la structure
du modèle, de réduire l'espace mémoire et de diminuer la
complexité de calcul.
L'approche précédente repose sur la notion de trajectoire
dans un espace d'états (processus de Markov). Une autre voie
explorée ces dernières années porte sur l'analyse des
dépendances entre les événements. Le comportement du système
est alors décrit par des équations d'évolution portant sur
les dates d'occurence des événements. Comme le modèle
comporte des communications et des synchronisations, les
équations d'évolution étudiées s'expriment à l'aide
d'opérateurs, +, -, max, min...Certains cas, comme les modèles de
programmes parallèles itératifs, produisent des systèmes
dynamiques linéaires dans la pseudo-algèbre (max, +). On exprime alors les performances du
système à partir de la description du spectre des opérateurs
linéaires (dans (max,
+) [13]. Ces résultats ont été appliqués aux
systèmes de ressources multiples partagées avec contraintes
d'exclusion et de synchronisation.