Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 12
Parallélisation des programmes
Année 2002-2003

Suite N°1...

12.3 UN EXEMPLE

On définit un traitement d'image différent du précédent. Cet exemple est simple tout en étant relativement complet. Il est classique et éprouvé et assez bien adapté aux fins de la deuxième partie du cours d'architectures parallèles pour le traitement du signal. On le trouve sous une forme très semblable dans [CUL97].

L'opération faite sur les valeurs portées par les points de la grille est définie selon le point d'application par :

Cette opération simple est réalisable en construisant soi même un filtre dans de nombreux logiciels de traitement d'images. On peut se procurer pour cela PaintShop Pro version 3 ou suivantes par internet. Ce logiciel fourni pour évaluation est utilisé dans les exercices de la partie traitement du signal.

Le processus se termine quand la différence entre la valeur courante et celle de l'itération précédente est en tout point inférieure à un seuil.

Nous allons traiter cet exemple de façon détaillée,
des exercices porteront sur des variantes.

À cette occasion, le lecteur prendra aisément conscience que nous sommes ici encore plus éloignés d'avoir une solution unique que dans le domaine séquentiel.

Dans toute la suite, les opérations de lecture initiale des tableaux
ainsi que leur utilisation ultérieure ne sont pas détaillées.
Les opérations de lecture sont supposées faites par une macroinstruction 'Initialise'

NOTE : Tous les programmes ci-après sont insérés sous forme d'images pour garder l'indentation de leurs lignes dans toutes les versions de notes de cours.

Remarque : Le traitement du tableau se fait ici par ce que l'on nomme une fenêtre glissante en traitement d'images. On examinera plus complètement les conséquences de ce choix dans le § 12.2.1. Toutefois, on peut dès maintenant observer que cette façon de procéder qui a l'avantage de la simplicité, mélange des valeurs de l'itération précédente à des valeurs de l'itération en cours pendant la prise de moyenne pour chaque point.

Une autre façon de résoudre le problème est de construire deux tableaux. L'un d'eux contient les valeurs acquises soit au chargement initial, soit au cours de la dernière itération terminée, l'autre contient les valeurs en cours de calcul. La consommation de mémoire est bien sur doublée. Les exercices à venir seront tous basés sur cette construction. On la nommera 'itération séparée'.

Exercice 1 : Écrire, toujours en pseudocode le programme séquentiel correspondant à l'itération séparée.

12.3.1 La décomposition

Le plus simple est de commencer par la structure de boucle, comme on le fait habituellement pour les programmes ainsi structurés. On examine chaque boucle pour voir s'il y a possibilité de parallélisation.

Examinons la boucle qui commence à la ligne 15. Elle opère sur la totalité (hors frontières) du tableau. Il n'y a manifestement pas indépendance puisqu'une nouvelle itération reprend les valeurs de la précédente.

Examinons la boucle qui commence ligne 17, sans les lignes où diff intervient et plus précisément la boucle pour commençant à la ligne 18. Chacune de ses itérations lit la valeur (i,j-1) écrite par la précédente. Il s'agit d'une boucle séquentielle. Cette analyse sommaire montre que ces boucles ne portent pas de possibilités de parallélisme.

On ne peut que revenir à l'algorithme de principe, sans tenir compte de son expression séquentielle. Dès lors que le calcul progresse de gauche à droite et de haut en bas, il y a dépendance dans le calcul d'une image vis-à-vis de points à gauche et au dessus comme montré ci-dessous :

On y observe que les éléments d'une antidiagonale n'ont pas de dépendance entre eux et donc peuvent être calculés en parallèle, alors même qu'ils dépendent de l'antidiagonale précédente.

Supposons que nous décidions de décomposer le travail en tableaux de points individuels, tels que la mise à jour d'un seul tableau soit une tâche. On va pouvoir exploiter une telle simultanéité de plusieurs façons.

La synchronisation globale sera néanmoins fréquente, une par antidiagonale. Et surtout le nombre d'itérations dans la boucle intérieure dépendra de l'état de la boucle externe causant des déséquilibres de charge entre processeurs. Pour ces motifs, il n'apparaît pas que ce soit une bonne solution.

Exercice 2 : Reprendre les raisonnements précédents en partant des résultats de l'exercice 1 à itérations séparées.

On va utiliser une méthode dite noir et blanc qui opère sur des domaines disjoints où un point blanc ne dépend que de points noirs et un point noir ne dépend que de points blanc, comme figuré dans la figure suivante :

Le calcul va donc être décomposé en deux phases :

Nous pouvons ainsi calculer N²/2 points en parallèle dans chaque phase. La synchronisation peut être globale ou, plus finement, attachée à chaque point car un point noir n'a pas besoin que tous les points rouges soient connus.

Exercice 3 : Écrire le programme séquentiel et un programme parallèle utilisant la méthode des points noirs et blancs.

La boucle pour_tous..faire analogue à la boucle pour..faire s'applique simultanément à tous les processus. Une seule synchronisation implicite existe en fin de boucle tant_que.

Exercice 4 : Analyser les variantes en itération séparée et écrire un programme leur correspondant.

12.3.2 L'affectation

L'option la plus simple est celle de l'affectation statique où chaque processeur a la charge d'un bloc de lignes parallèles.

La ligne i est affectée au processeur dont le numéro est partie entière de i/p. Une autre affectation statique est l'affectation cyclique où l'on entrelace les lignes : le processeur i reçoit les lignes i, i+p, i+2p etc.

On peut aussi envisager une affectation dynamique où chaque processeur prend en charge une ligne supplémentaire non encore traitée dès qu'il est disponible. Pour notre part nous continuerons à mettre en œuvre le modèle statique de blocs. Deux observations sont possibles dès maintenant :

Nous pouvons maintenant passer à la phase d'orchestration selon les modèles de programmation.

CE FICHIER N'A PAS DE QUESTIONNAIRE

 Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 12
Parallélisation des programmes
Année 2002-2003