Projet Caps

previous up next contents
Précédent : Composition de l'équipe Remonter : Projet CAPS, Compilation, Architectures Parallèles Suivant : Fondements scientifiques



Présentation générale et objectifs

Panorama

Résumé : Le projet Caps a pour objectif d'étudier les concepts à la fois matériels et logiciels entrant dans la conception des calculateurs hautes performances.

Les performances théoriques des calculateurs croissent régulièrement. Cependant cet accroissement des performances de crête se poursuit au prix d'une complexité matérielle de plus en plus élevée. Ainsi, de nombreux niveaux de parallélisme sont présents sur le matériel, et l'obtention de performances élevées nécessite l'exploitation simultanée de tous ces niveaux par les applications. La mise au point des applications pour la performance devient de plus en plus une activité de haute technologie.

Les recherches menées au sein du projet CAPS visent à exploiter de manière efficace les différents niveaux de parallélisme présents dans les applications et sur les architectures tout en masquant la complexité des matériels et systèmes à l'utilisateur.

Nos recherches en architecture de processeur s'appuient sur une activité de veille technologique diffusée depuis 1991. Ces recherches visent à améliorer le comportement de la hiérarchie mémoire et augmenter le parallélisme d'instructions présenté au matériel. Ainsi, de nouvelles structures matérielles d'antémémoires sont étudiées afin de réduire les pénalités engendrées par les accès à la mémoire principale. D'autre part, nous étudions de nouveaux mécanismes de prédictions de branchements afin d'augmenter le parallélisme d'instructions soumis au matériel par un processus. Cependant, nous explorons aussi l'approche orthogonale, dite multiflot simultané où les instructions présentées aux unités d'exécution sont issues de plusieurs processus différents.

L'obtention de performances sur un processeur passe aussi par une maitrise logicielle du parallélisme d'instructions et de la hiérarchie mémoire. C'est pourquoi, nous étudions des techniques logicielles d'optimisation de code visant à détecter et à exploiter la localité des accès à la mémoire. Des techniques de réordonnancement de codes (pipeline logiciel, déroulage de boucles, ...) sont aussi développées afin de soumettre un parallélisme d'instructions important au matériel. Ces techniques sont appliquées aussi bien aux processeurs généraux qu'aux processeurs enfouis (multimédia par exemple).

Nos recherches en logiciel visent aussi à obtenir des performances sur les architectures multiprocesseurs aussi bien à mémoire partagée que physiquement distribuée. Ainsi, nos travaux au niveau système visent à offrir à l'utilisateur d'un multiprocesseur (ou d'un réseau de stations de travail à mémoire distribuée) la vision d'une mémoire globale à accès uniforme: une mémoire virtuelle partagée. Ces travaux sont complétés par des recherches sur les techniques de compilation permettant d'exploiter au mieux la mémoire virtuelle partagée.

Afin de masquer à l'utilisateur la complexité logicielle de l'optimisation pour la performance, il convient de lui fournir des outils adaptés pour cette optimisation dans des environnements de développement. Une partie importante de notre activité est consacrée au développement de tels environnements.

Enfin, nous poursuivons une activité de recherche et développement pour les algorithmes parallèles en particulier sur les algorithmes de synthèse d'image.


Architectures de processeurs  

Mots-clés : microprocesseur, Risc, antémémoire, prédiction de branchement, multiflot simultané


Résumé : Les progrès technologiques permettent une plus grande densité d'intégration et une plus grande fréquence de fonctionnement des composants pour les processeurs. Ainsi il est aujourd'hui possible d'intégrer sur un même composant une dizaine d'unités fonctionnelles et une grande antémémoire fonctionnant à une fréquence de l'ordre de 500 Mhz.

Cependant ces progrès ne se traduisent pas linéairement en un gain de performances. En effet, le temps de cycle des processeurs décroît plus rapidement que les temps d'accès à la mémoire principale, ce qui rend la performance effective du processeur de plus en plus dépendante du comportement de sa hiérarchie mémoire. De même, le parallélisme d'instructions limité des programmes (dépendences de données et contrôle) réduit les gains liés à l'exécution superscalaire.

Les actions de recherches que nous menons portent sur la structure et les optimisations matérielles et logicielles des hiérarchies mémoire, en particulier antémémoires, sur les mécanismes de lancement des instructions, en particulier prédiction de branchement ainsi que sur les structures de processeur multiflot simultané. Ces actions de recherche s'appuient sur une veille technologique sur les microprocesseurs menée depuis 1991.


L'évolution des microprocesseurs est extrêmement rapide. Depuis début 1991, nous menons une activité de veille technologique et de diffusion d'informations sur les microprocesseurs. Sept rapports détaillés comparant les architectures de processeurs ont été diffusés à ce jour. Cette activité de veille technologique permet d'orienter les recherches du projet en architecture de processeurs.

La différence entre temps d'accès à l'antémémoire sur le composant et temps d'accès à la mémoire principale tend à croître. Il est donc de plus en plus important d'optimiser le comportement des antémémoires. Le taux de succès lors des accès à une antémémoire dépend de nombreux facteurs liés à son organisation matérielle et à l'application. Nos recherches portent à la fois sur l'étude de structures d'antémémoires ``skewed-associative'' [10] ainsi que sur les techniques logicielles de détection et d'exploitation de la localité [4] et d'optimisation du placement de données.

L'allongement des pipelines et l'exécution superscalaire font que le délai entre le chargement d'une instruction et son exécution correspond aujourd'hui à l'exécution de plusieurs dizaines d'instructions. Or, toute instruction de branchement rompt le flot de contrôle et devrait donc en principe arrêter le séquencement. Afin d'éviter un tel arrêt, des mécanismes d'anticipation appelés prédicteurs de branchement sont mis en oeuvre dans les processeurs d'aujourd'hui. D'autre part, avec l'avènement de l'exécution dans le désordre et de l'exécution spéculative très agressive, le chargement en parallèle d'un seul bloc de base (c'est-à-dire l'anticipation d'un seul branchement par cycle) apparaît comme trop limité. Il est maintenant nécessaire de charger plusieurs blocs de base par cycle. Nos travaux dans ce domaine visent à améliorer la précision de le prédiction de branchement ainsi qu'à augmenter le nombre d'instructions chargées par cycle [6].

Si jusqu'à présent, la recherche de la performance ultime sur un seul processus a guidé l'industrie du microprocesseur, l'énorme potentiel d'intégration aujourd'hui disponible permet d'envisager que, d'ici à quelques années, plusieurs processus s'exécutent en parallèle sur le même composant. Parmi les solutions exploitant ces nouvelles données technologiques, le multiflot simultané [TEL95], semble l'une des méthodes les plus prometteuses. Le multiflot simultané est basé sur l'exécution de plusieurs flots d'instructions indépendants ou issus d'une application parallèle sur un processeur superscalaire. Nous étudions les implications de l'utilisation du multiflot simultané dans le processeur.

  
Environnements de développement pour architectures haute performance

Mots-clés : Matlab, programmation parallèle, parallélisation automatique, portage d'applications, optimisation


Résumé : L'obtention de performances sur les architectures hautes performances nécessitent des outils logiciels adaptés qui cachent à l'utilisateur la complexité des matériels et des systèmes.

Les actions de recherches que nous menons visent à fournir aux utilisateurs de calculateurs hautes performances des outils tels que compilateur, aide au portage, optimiseur pour permettre des développements et/ou portages d'applications hautes performances.

Ainsi, nous développons Menhir, un compilateur Matlab pour machines parallèles, TSF, un outil d'aide au portage de codes Fortran sur architectures hautes performances, CT++ un environnement de programmation pour l'analyse d'images basé sur C++ et Salto, un environnement de manipulation de langage d'assemblage.


Différentes approches sont utilisées par les utilisateurs pour développer les applications hautes performances. Nous développons différents environnements pour quelques-unes de ces approches.

Ainsi le langage Matlab est souvent utilisé pour le développement rapide de prototypes de codes numériques. Toutefois, l'exécution par un interpréteur réduit nettement les performances. Les codes de production dérivés des codes numériques sont ensuite entièrement réécrits en langage Fortran. Cependant on perd à travers cette réécriture le parallélisme intrinsèque des fonctions et des opérateurs matriciels de haut niveau. Afin de sauvegarder ce parallélisme, nous avons choisi de développer le compilateur Menhir pour le langage Matlab.

L'arrivée des stations de travail multiprocesseur a banalisé l'usage des machines parallèles. De nombreux progiciels Fortran gagneraient à être portés sur ces architectures afin d'atteindre une vitesse élevée de calcul à un coût raisonnable. Le portage (parallélisation et amélioration de performance) d'applications sur machines hautes performances est une activité techniquement difficile faisant appel à beaucoup de savoir-faire. Aussi, dans l'outil de portage TSF que nous développons au dessus de l'environnement Foresys de Simulog, nous accélérons le portage grâce à l'utilisation conjointe de techniques issues de deux domaines : la parallélisation automatique et le raisonnement à partir de cas.

De même, l'analyse d'images est un domaine se prêtant bien à l'utilisation d'opérations globales sur des tableaux. Ceci en fait un domaine d'application privilégié pour les calculateurs vectoriels SIMD, mais aussi pour les microprocesseurs disposant d'instructions dites multimédia. Nous développons, en collaboration avec le LETI/CEA, l'environnement de programmation CT++ pour l'analyse d'image basé sur C++.

Les systèmes embarqués et à haute performance font un usage de plus en plus fréquent des technologies VLIW, DSP ou Risc. L'optimisation, l'étude de performance, l'analyse des codes nécessitent la mise en oeuvre de méthodes adaptées aux spécificités de ces architectures, en particulier à l'exploitation du parallélisme d'instructions. Toutefois, l'écriture de tels outils requiert du programmeur un investissement significatif qui a peu de chance d'être réutilisable, compte tenu de la diminution de la durée de vie des composants. Le système Salto que nous avons développé propose un environnement de manipulation de programmes en langage assembleur. Il a pour objectif de permettre l'écriture rapide de tous les outils manipulant du langage assembleur : ordonnanceur, optimiseur de code, simulateur, ..

Communication dans les calculateurs parallèles  

Mots-clés : programmation parallèle, tâche migrante, MVP, SCI


MVP: Mémoire Virtuelle Partagée
SCI: Scalable Coherent Interface
Résumé : La maîtrise des communications dans un calculateur parallèle est essentielle pour l'obtention de bonnes performances. Nous étudions deux paradigmes de communication : les tâches migrantes et la mémoire virtuelle partagée. Pour les tâches migrantes, il s'agit de faire migrer les calculs vers les processeurs disposant des données alors que pour la mémoire virtuelle partagée, les données migrent vers les processeurs effectuant des calculs nécessitant celles-ci. Plusieurs implémentations sont en cours d'évaluation à la fois pour des calculateurs massivement parallèles (NEC Cenju-3) et des réseaux de PC à capacité d'adressage (SCI).

Dans la programmation des calculateurs parallèles, l'obtention de bonnes performances est souvent conditionnée par une utilisation judicieuse des mécanismes de communication. Ces mécanismes sont de nature très variées : communication par mémoire partagée ou par échange de message. Ils sont supportés par des architectures de calculateurs disposant respectivement d'un espace d'adressage global ou de plusieurs espaces d'adressage disjoints. Nous nous intéressons à cette dernière catégorie de calculateurs. Il s'agit de calculateurs disposant de mémoires distribuées, chaque processeur disposant de sa propre mémoire locale. La communication est fondée sur l'échange de messages. L'objectif de nos recherches est d'étudier différents paradigmes de communication adaptés aux applications du calcul scientifique et notamment les applications dites irrégulières où les accès aux données sont inconnus lors de l'étape de compilation. Nous étudions essentiellement deux concepts: les tâches migrantes et la mémoire virtuelle partagée.

Le concept de tâches migrantes vise l'exploitation efficace d'un parallélisme à grain fin qui apparaît fréquemment dans les codes de calcul scientifique s'appliquant à des maillages irréguliers ou à des matrices creuses. Dans le modèle d'exécution par migration de tâches, chaque tâche ne peut accéder librement qu'à la mémoire locale du processeur qui l'exécute. Afin d'accéder à une donnée gérée par un autre processeur, l'exécution de la tâche est transférée sur le processeur en charge de cette donnée. Ce modèle d'exécution est tout particulièrement adapté à l'exécution d'applications où la granularité des tâches parallèles est très faible et où le placement des données est inconnu à la compilation. Notre objectif est de proposer une mise en oeuvre performante de ce modèle intégrant compilation et génération de code et basée sur un exécutif spécialisé pour les communications.

Le concept de mémoire virtuelle partagée a pour objectif de fournir un espace d'adressage global pour des calculateurs parallèles disposant d'espaces d'adressage disjoints. Les architectures de calculateurs parallèles que nous visons sont les machines massivement parallèles à mémoire distribuée (NEC Cenju-3) et les réseaux de stations de travail ou de PC. Nous nous intéressons en priorité à ce dernier type de calculateurs. En effet, l'évolution rapide des performances des PC permet d'envisager de les utiliser en réseaux pour exécuter des programmes parallèles. Cependant, pour obtenir de bonnes performances, il est nécessaire d'utiliser une nouvelle technologie d'interconnexion: les réseaux à capacité d'adressage. Il s'agit de réseaux autorisant l'accès distant à la mémoire. Cet accès est réalisé entièrement par le matériel, il permet ainsi un accès très rapide (de l'ordre de quelques micro-secondes). Deux technologies sont d'ores et déjà disponibles: Memory Channel de DEC et SCI de Dolphin ICS. Nous avons pour objectif la conception d'un mécanisme de mémoire virtuelle partagée exploitant la technologie SCI de Dolphin ICS. Nous nous intéressons notamment à la mise en oeuvre efficace de modèle mémoire à cohérence relâchée qui permet de réduire notablement le nombre de communications. L'objectif à terme de nos recherches est de permettre une migration aisée de codes parallèles développés pour des calculateurs parallèles à mémoire partagée sur des réseaux de stations de travail.

Les deux concepts que nous étudions sont complémentaires en soi. Ils peuvent être vus de façon duale. Dans le cas des tâches migrantes, il s'agit de faire migrer les tâches vers les processeurs disposant des données alors que la mémoire virtuelle partagée permet une migration des données vers les processeurs exécutant des tâches. Une comparaison de ces deux techniques est en cours dans le cadre d'une collaboration avec la société NEC.

  
Support exécutif pour la programmation des calculateurs parallèles

Mots-clés : programmation parallèle, NOW, Metacomputing, CORBA


NOW: Network of Workstations
Résumé : La disparition des calculateurs massivement parallèles à mémoire distribuée au profit des réseaux de PC pose le problème du support exécutif pour la programmation de ce type de machine. Un support exécutif doit permettre la gestion de ressources (processeur, mémoire). Ce problème se pose également lors de l'utilisation simultanée de plusieurs ressources hétérogènes de calcul. Nous nous intéressons à la conception de supports exécutifs pour un réseau de PC et une plateforme de <<Metacomputing>> en cours d'installation à l'IRISA. Notre approche s'appuie sur l'utilisation du <<middleware>> CORBA que nous avons étendu pour prendre en compte le parallélisme.

Au cours des dix dernières années, les performances des calculateurs se sont fortement accrues grâce à l'évolution rapide des technologies des processeurs. Parallèlement, dans le domaine de la simulation numérique, les besoins en puissance de traitement ont également augmenté car les utilisateurs souhaitent simuler des phénomènes physiques de plus en plus complexes. Cette complexité est due à l'utilisation simultanée de plusieurs codes numériques prenant en compte l'interaction de plusieurs phénomènes physiques (interaction fluide-structure, thermique-optique, etc.). Pour obtenir des temps de calcul raisonnables, il est nécessaire d'utiliser simultanément plusieurs ressources de calcul ayant une forte hétérogénéité, ces ressources étant connectées par des réseaux d'interconnexion à très haut débit. Cette approche est connue sous le nom de <<Metacomputing>>. L'hétérogénéité de ces ressources s'exprime par des modèles d'exécution, de communication et de programmation très différents. Il est donc nécessaire de concevoir des environnements de programmation permettant de masquer cette hétérogénéité à l'utilisateur. Les applications d'un tel environnement sont variées : travail coopératif pour la simulation, couplage de codes de simulation, etc.

L'objectif de nos recherches est de concevoir des environnements de programmation à la fois pour des réseaux de PC et des réseaux de ressources de calcul hétérogènes. L'originalité de notre approche est de marier deux types de programmation: la programmation des calculateurs parallèles et la programmation des systèmes distribués. Notre approche s'appuie sur l'utilisation d'une technologie <<middleware>>, comme CORBA (Common Object Request Broker Architecture), qui permet la conception d'applications distribuées en utilisant une approche client/serveur. Notre objectif est d'étudier les différents mécanismes logiciels nécessaires à la conception d'un environnement de programmation par composants logiciels CORBA pour le calcul de haute-performance pour des réseaux de stations de travail et des plateformes de Metacomputing. Il s'agit notamment d'étudier le problème de l'allocation de ressources et d'étendre CORBA afin de permettre la conception de services CORBA parallèles.



previous up next contents Précédent : Composition de l'équipe Remonter : Projet CAPS, Compilation, Architectures Parallèles Suivant : Fondements scientifiques