Aperçu sur le calcul haute performance
Dans ce chapitre subdivisé en trois parties, nous donnons un bref aperçu sur le calcul haute performance. Nous faisons apparaître dans la première partie les motivations pour le calcul haute performance et présentons dans la seconde partie une classification des architectures parallèles et distribuées. Dans la dernière partie, nous nous intéressons aux modèles de programmation parallèle.
Calcul haute performance et parallélisme
Le parallélisme est une stratégie pour accélérer les temps d’exécution de tâches de grande taille. Les tâches sont initialement décomposées en sous-tâches de taille plus pe- tite et celles-çi sont ensuite assignées à plusieurs processeurs qui les exécutent simultané- ment. Traditionnellement, les programmes informatiques étaient écrits pour des machines monoprocesseurs (machines de von Neumann) qui n’exécutent qu’une seule instruction à la fois et ceci tous les 9ns pour les plus rapides d’entre elles [1]. Cette vitesse d’exécu- tion peut paraître élevée mais pour les applications qui nécessitent beaucoup de puissance de calcul, tels que problèmes de simulation et de modélisation de phénomènes naturels complexes, les problèmes nécessitant de grandes capacités de calcul et la manipulation de grandes quantités de données comme le datamining, le traitement d’image, etc. les perfor- mances exigées sont nettement plus élevées. Devant les limites physiques de la taille de la mémoire et de la vitesse de calcul des systèmes monoprocesseurs, le parallélisme apparaît comme une solution compétitive (excellent rapport coût/performance) pouvant répondre aux importants besoins en puissance de calcul (de l’ordre du Gflops et même du Tflops) eten espace mémoire (de l’ordre du To et même du Po) des classes de problèmes citées plus haut. Les machines parallèles permettent au programmeur de disposer d’un nombre im- portant de processeurs. Ce nombre peut être modulable suivant la puissance de traitement nécessaire. D’autres avantages caractérisent ces systèmes tels que leur grande disponibi- lité, leur meilleure tolérance aux pannes, leur grande flexibilité et surtout, ils permettent de partager de nombreuses ressources (processeur, mémoire, disque etc.) à travers un réseau. L’utilisation des machines parallèles introduit cependant un certain nombre de problèmes comme celui de l’équilibrage de charge qui sera étudié dans le chapitre suivant, celui de la distribution des données, de la maîtrise du coût des communications entre processeurs, etc. Ces problèmes ont un grand impact sur les performances des systèmes parallèles qu’ils risquent de dégrader s’ils ne sont pas correctement pris en charge.
Taxonomie des architectures parallèles et distribuées
La multiplication des architectures comportant plusieurs processeurs entraîne une cer- taine confusion dans les terminologies utilisées dans la littérature particulièrement lors- qu’il s’agit de caractériser les systèmes distribués et parallèles. Assez souvent, la frontière entre un système distribué et système parallèle n’est pas très nette. Aussi nous donnons cette caractérisation :– Un système distribué est un système composé de plusieurs processeurs physique- ment distribués et faiblement couplés, reliés entre eux par un réseau conventionnel de communication (ATM, FDDI, Token Ring, Ethernet etc.) et qui collaborent à la résolution d’un ou plusieurs problèmes. Internet, les intranets, les systémes em- barqués, les systèmes mobiles et les systèmes de téléphonie appartiennent à cette catégorie.classes sont établies. Il s’agit des machines SIMD dont les processeurs exécutent la même opération de façon synchrone sur des données différentes et des machines MIMD dont chaque processeur est autonome et exécute son propre programme sur ses propres don- nées. Aujourd’hui les machines SIMD sont abandonnées au profit des machines MIMD qui offrent la souplesse nécessaire à la résolution de certains problèmes. Une classification plus fine des machines MIMD essentiellement basée sur l’organisation de la mémoire et les types d’interconnexion permet de distinguer deux grandes familles : les multiproces- seurs et les multi-ordinateurs [4].
Un multiprocesseur est un système informatique dans lequel deux ou plusieurs pro- cesseurs partagent l’accès total à une mémoire commune [3]. Les processeurs, la mémoire et les périphériques d’entrée et sortie sont reliés par un réseau d’interconnexion pouvant prendre la forme d’un bus commun, d’un switch crossbar ou d’un réseau multi-étages. Il n’y a qu’une seule copie du système d’exploitation qui tourne sur ce type d’architecture. Les multiprocesseurs sont de deux types : Les machines UMA et les machines NUMA.Dans cet archiecture, il existe une mémoire unique, partagée par tous les processeurs. La mémoire est équidistante de tous les processeurs qui ont ainsi le même temps d’accès sur une référence mémoire donnée. Tous les processeurs partagent les ressources globales disponibles (bus, mémoire, E/S) mais peuvent avoir des caches privées (voir Figure 1.1). Toute opération effectuée sur la mémoire est immédiatement visible par l’ensemble des autres processeurs.
Les machines UMA ont l’avantage d’être faciles à programmer. En effet elles sup- portent le modèle de programmation à mémoire partagée qui est proche du modèle sé- quentiel, ce qui simplifie le portage du code séquentiel vers le parallèle. De plus, il est plus facile de concevoir un système d’exploitation qui utilise les processeurs de manière symétrique. Cependant ces systèmes sont peu scalables, car au-delà de quelques dizaines de processeurs il devient très difficile de maintenir la cohérence des caches et un temps d’accès uniforme à la mémoire.