Techniques de décomposition
INTRODUCTION On a vu que la première étape de la conception et l'implémentation d une solution parallèle pour un problème donné est la décompose de ce problème on taches. Ces taches peuvent être exécutées en parallèle. il n'existe pas une technique générale de décomposition. Les techniques présentées en suit peuvent être appliquées sur une large classe des problèmes
la décomptions récursive Applique le principe de (diviser pour gagner) On décompose le problème en sous problèmes. D’une manière récursive les sous problèmes sont décomposés en sous problèmes. ce processus termine lorsque on obtient des taches indécomposables. Cette technique Premièrement En suit
Exemple 1 le tri rapide L'algorithme de tri rapide d'un tableau ou d’une liste A est un algorithme qui favorise la décomposition récursive On commence par le choix d'un élément pivot X. On décompose la liste Q en deux listes A0 et A1 les éléments de A0 <X les éléments de A1 >=X Les listes A0 et A1 sont triées on applique récursivement les étapes précédentes. Si on a un élément dans la liste le processus s'arrête.
Exemple 1 le tri rapide
exemple 2 recherche de plus petit element la recherche de plus petit élément d'un tableau est un problème qui peut être résolu avec la décomposition récursive. La version séquentielle de l'algorithme n'est pas de type diviser pour gagner mais on peut la transformer pour avoir une décomposition récursive.
La version sequentille 1. procedure SERIAL MIN (A; n) 2. begin 3. min = A[0]; 4. for i := 1 to n -1 do 5. if (A[i] < min) min := A[i]; 6. endfor; 7. return min; 8. end SERIAL MIN
La version parallèle récursive 1. procedure RECURSIVE MIN (A; n) 2. begin 3. if (n = 1) then 4. min := A[0]; 5. else 6. lmin := RECURSIVE MIN (A; n/2); 7. rmin := RECURSIVE MIN (&(A[n/2]); n-n/2); 8. if (lmin < rmin) then 9. min := lmin; 10. else 11. min := rmin; 12. endelse; 13. endelse; 14. return min; 15. end RECURSIVE MIN
Déroulement de l'exécution
Décomposition des données Identifier les données sur lesquelles les calculs sont effectués. Partitionner ces données à travers diverses tâches. Cette séparation provoque une décomposition du problème. Les données peuvent être partitionnées de différentes manières, cela a un impact critique sur la performance d'un algorithme parallèle.
La décomposition des données de Sortie Souvent, chaque élément de la sortie peut être calculée de façon indépendante des autres (mais simplement en fonction de l'entrée). Une partition de l'ensemble des données de sortie décompose le problème naturellement. Considérons le problème de la multiplication de deux matrices A et B de nxn éléments pour produire la matrice C. La sortie de la matrice C peut être divisé en quatre tâches, comme suit
La décomposition des données de Sortie
La décomposition des données de Sortie La decomposition des donnees de sortie nest pas unique Par exemple on a le probleme de calcul de produit de deux matrices on peut le decomposer comme suit :
La décomposition des données de Sortie
La décomposition des données de Sortie
La décomposition des données d'entrée La décomposition des données de sortie est applicable si le calcul de ces sorties est en fonction des données d'entrée Ce n'est pas le cas toujours ( les algorithmes de tri, le calcul de Min…..) Dans ce cas on peut décomposer les données d'entrée. On peut crier une tache pour chaque partie On exécute les taches avec le plus possible des données locales. Rassembler les résultats partielles pour produire le résulta final
La décomposition des données d'entrée
La décomposition des données d'entrée
La décomposition exploratoire
décomposition spéculative