• Aucun résultat trouvé

10. Implémentation sur calculateur parallèle

10.2. Méthodologie d'implantation

10.2.1. Architecture des calculateurs parallèles

Les calculateurs parallèles sont constitués par une collection de processeurs et de mémoires capables de fonctionner simultanément et pouvant disposer de capacités de communication entre eux. La manière dont ils vont travailler simultanément et les dispositifs qui leur permettront de communiquer entre eux vont définir leurs architectures respectives.

A un calculateur parallèle est en général associé un frontal, appelé calculateur hôte: il assure les communications avec l'extérieur et peut prendre en charge les parties de calcul séquentiel d'une application.

Un processeur de calcul est généralement subdivisé en deux unités :

− une unité de décodage et de contrôle de l'exécution des instructions ;

− une unité arithmétique et logique qui exécute les instructions.

Deux voies sont alors possibles pour réaliser un calculateur à architecture parallèle :

− les unités de calcul partagent la même unité de contrôle qui décode un même et unique programme d'instructions ;

− les unités de calcul ont leurs propres unités de contrôles qui vont chacune décoder un programme particulier d'instructions.

On parle alors dans le premier cas de calculateur à flot d'instructions simple et dans le second de calculateur à flot d'instructions multiple. Par nature, il s'agit dans un cas d'un calculateur synchrone (une seule horloge séquence un même jeu d'instructions) et dans l'autre d'un calculateur asynchrone (plusieurs horloges séquencent différents jeux). Dans ce dernier cas, le contrôle est alors à la charge du programmeur qui peut disposer de différents mécanismes de synchronisation :

− envoi de messages ;

− sémaphore de contrôle d’accès en mémoire partagée ;

− synchronisation des traitements sur interruption.

Le second élément qui intervient dans les calculateurs à architecture parallèle est le mode d'accès choisi pour que les processeurs puissent accéder aux données en mémoire. De ce point de vue, on distingue :

− les systèmes à mémoire répartie ;

− les systèmes à mémoire partagée.

Dans un système à mémoire répartie, chaque processeur dispose d'une mémoire locale et communique directement avec d'autres processeurs.

Modélisation Hiérarchique Multidimensionnelle : Tome 2 Page 85 Dans un système à mémoire partagée tous les processeurs partagent une mémoire globale et communiquent entre eux au travers de cette mémoire.

Dans les deux cas, un réseau de communication est présent dans le système :

− dans un système à mémoire répartie pour permettre aux processeurs de communiquer entre eux ;

− dans un système à mémoire partagée pour permettre à plusieurs processeurs d'accéder simultanément à la même mémoire.

Figure 12 : Architectures de calcul parallèle

Nous ne progresserons pas plus loin pour détailler les architectures en calcul parallèle, sauf pour mettre en exergue deux particularités qui sont généralement prises en compte dans le développement d'application de calcul parallèle.

D'une part, on parvient à un haut degré de parallélisme si l'application est en capacité de s'exécuter sur tous les processeurs en parallèle, ce qui mène à produire des algorithmes dont une même copie est capable de s'exécuter simultanément sur un nombre quelconque de processeurs pour réaliser l'applicatif. Si différents programmes doivent collaborer à la construction d'une solution, nous sommes rapidement limité dans nos efforts pour générer des traitements à haut degré de parallélisme.

Modélisation Hiérarchique Multidimensionnelle : Tome 2 Page 86 D'autre part, il apparaît souvent que les communications présentent un goulot d'étranglement dans ce type d'architecture. L'importance du goulot varie en fonction du fait que les traitements à réaliser, nécessitent ou pas :

− des communications avec d'autres processeurs ;

− des communications locales avec uniquement des processeurs voisins ;

− des communications globales avec l'ensemble des autres processeurs en suivant des schémas d'accès réguliers ;

− des communications globales avec l'ensemble des autres processeurs en suivant des schémas d'accès irréguliers.

Pour mettre en communication simultanément plusieurs unités, des réseaux de communication sont mis en place. Ceux-ci sont sensibles à ces motifs de communication qui peuvent être la source de collisions dans l'acheminement des informations.

Ces réseaux peuvent être d'architecture très simplifiée, mais à ce moment-là, le routage des messages et la gestion des collisions sont à la charge du programmeur. Les progrès en architecture micro-électronique ont permis d'estomper progressivement ces problèmes.

10.2.2. Méthodologie suivie par la parallélisation

Les étapes suivies pour le portage d'algorithmes sur calculateur parallèle sont celles-ci :

− mise au point d'algorithmes séquentiels parallélisables ;

− adaptation des algorithmes séquentiels au partitionnement en mémoire des processeurs ;

− parallélisation effective des algorithmes ;

− analyse du comportement dynamique des algorithmes.

Des jeux de test sont mis au point sur calculateur séquentiel et servent à contrôler la bonne progression parmi les étapes.

Modélisation Hiérarchique Multidimensionnelle : Tome 2 Page 87 Figure 13 : Méthodologie de parallélisation

Cette progression s'appuie assez fortement sur les possibilités de traitement du calculateur hôte et dissocie la mise au point d'un modèle d'implantation des données en mémoire parallèle avec celle des algorithmes parallèles. Tous les algorithmes ne sont pas systématiquement parallélisables, mais pour une fonction à effectuer il existe souvent un algorithme parallèle qui la réalise.

En fonction de la nature des architectures, on rencontre plus ou moins de difficultés à mettre en œuvre cet exercice. Si le contrôle d'une fonction est aisé à réaliser sur un calculateur synchrone, il n'en limite pas moins la nature des algorithmes qui peuvent être implantés sur ce type de structure.

Sur un calculateur asynchrone, le contrôle étant à la charge de l'algorithme, une plus vaste palette de possibilités s'offre au programmeur, mais cette liberté se paie d'une plus grande difficulté de mise au point : le résultat n'est pas forcément déterministe et certains auteurs ont pu évoquer le sentiment d'angoisse qu'il pouvait susciter chez le programmeur (l'angoisse dite de l"'étreinte mortelle").

En dehors du contrôle des algorithmes, la seconde source de difficulté provient des schémas de communication que peuvent produire ceux-ci. Même si des progrès ont été réalisés sur la mise au point de réseaux permettant d'interconnecter simultanément des sous-ensembles électroniques en parallèle, les débits qu'ils permettent d'obtenir dépendent du volume de communications à assurer et de la régularité des schémas de communication à établir (c'est-à-dire évitant si possible d'employer des tronçons de route communs pour ne pas provoquer de collisions, lors du transport des informations). Un exemple nous est donné par la recherche des composantes connexes :

− l'algorithme de seau est plus performant sur calculateur séquentiel que la croissance hiérarchique de régions ;

Modélisation Hiérarchique Multidimensionnelle : Tome 2 Page 88

− par contre, cette dernière seule assure des schémas de communication réguliers et est effectivement parallélisable.

Ainsi, l'algorithme de seau n'est pas implémentable sur calculateur synchrone et suit un comportement non déterministe en temps de réponse sur calculateur asynchrone.

Les algorithmes parallélisables étant définis, leur version séquentielle sont ensuite testées sur les structures de données parallélisées :

− on réalise ainsi l'adéquation de l'algorithme avec le modèle de représentation des données en mémoire ;

− on conserve la possibilité de revenir à une version séquentialisée, en cas de mauvaises performances.

Le logiciel s'exécute alors sur l'ordinateur hôte tout en accédant aux données parallélisées. L'étape suivante est la parallélisation effective du logiciel : les modifications nécessaires à apporter pour s'exécuter sur les processeurs parallèles sont introduites.

La dernière étape est l'analyse du comportement dynamique du système qui mène à l'optimisation des algorithmes pour tenir compte de la disparité des temps de réaction entre processeurs, mémoires et réseau de communication.

Documents relatifs