Précédent : Environnements exécutifs
Remonter : Fondements scientifiques Suivant :
Outils pour le
débogage et
Mots clés : algorithmique parallèle, modèles de programmation, graphes de tâches, ordonnancement, placement, répartition de charge, programmes synthétiques .
Comme nous l'avons souligné dans le paragraphe 3.1 un algorithme parallèle est un graphe qui modélise les calculs et les dépendances de données entre ces calculs. Les compilateurs-paralléliseurs s'attachent au calcul de ce graphe à partir d'un programme séquentiel. Une approche alternative est de définir un modèle de programmation parallèle qui permet l'expression de la décomposition d'un calcul en sous-calculs parallèles ainsi que l'enchaînement de phases parallèles. Typiquement un calcul est l'évaluation d'une fonction. Cette approche rend possible la génération (par interprétation de certaines instructions du code) d'un graphe de flot de données dont les noeuds sont les tâches (graphe macro-dataflow) et les arrêtes les transferts de données entre tâches (avec les données, est spécifié leur mode d'accès). Ce graphe peut avoir une structure statique (i.e. connue a priori) ou être déterminée dynamiquement (i.e. construite en cours d'exécution). Ce graphe est alors utilisé par un module de répartition de charge qui alloue les tâches statiquement ou dynamiquement, en fonction des caractéristiques du graphe. Cette technique permet ainsi de séparer le programme qui décrit l'algorithme, du programme qui alloue les ressources de la machine aux diverses tâches.
Cette séparation [[5]] doit permettre d'obtenir, par un algorithme de répartition adapté et quelle que soit la machine sous-jacente, une implantation efficace et portable d'un même programme conçu avec un grain suffisamment fin. L'objectif d'une stratégie de répartition (politique de décision) dépend de l'application considérée : ce peut être d'optimiser le temps d'exécution ou l'espace mémoire, généralement un compromis entre les deux. La qualité de la stratégie dépend en outre de la connaissance de l'application (i.e. du graphe de tâches associé) et de la machine d'exécution. Pour les graphes dont la structure est connue statiquement, les algorithmes de répartition de charge utilisées sont des techniques statiques de partitionnement de graphes pondérés par des coûts en volume de calcul et de communication. Dans le cas des graphes dont la structure n'est connue qu'à l'exécution, les méthodes utilisées sont basées sur des algorithmes d'ordonnancement en ligne.