Calcul haute performance et GPGPU

Le calcul haute performance (aussi appelé calcul intensif) fait référence au domaine dédié au développement des architectures matérielles capables d’exécuter plusieurs milliards d’opérations à la seconde ainsi qu’aux méthodes et techniques de programmation massivement parallèles qui leurs sont associées. Parmi les architectures dédiées au HPC, les super-ordinateurs peuvent être vus comme un grand nombre de machines (e.g. des serveurs de calcul) composées de plusieurs milliers de processeurs reliés entres eux par des réseaux à très haut débit et capables de pouvoir traiter plus rapidement :
— Une simulation donnée en partageant sur un ensemble de serveurs le travail à réaliser (en parallélisant le calcul) ;
— Un grand nombre de simulations exécutées sur l’ensemble des serveurs de calcul en faisant varier par exemple des paramètres d’entrées comme la température ou la pression d’un fluide, la déformation d’un solide, la volatilité d’un produit dérivé financier, etc.

Ainsi, un calcul qui s’exécute en 24 heures sur un PC (de l’anglais Personnal Computer) classique ne prendrait que quelques minutes sur un super-ordinateur. Ces gains en temps permettent de réduire les coûts à chaque étape de la vie d’un produit ou d’un process (conception, optimisation, validation) et concernent potentiellement de nombreux domaines de recherche et applicatifs industriels tels que l’environnement, l’automobile, l’aéronautique et le spatial, la chimie, la médecine et la biologie, les matériaux, l’énergie, la finance, le traitement massif de données multimédia, etc.

Une réponse à des besoins de calculs

Les super-ordinateurs sont devenus des outils omniprésents dans le monde de la recherche et du développement car ils offrent la possibilité d’évaluer des situations, d’expérimenter mais aussi de réaliser des expériences qui ne peuvent être menées en laboratoire à cause de coûts trop élevés, de danger, ou d’impossibilité physique de mise en œuvre.

Ainsi, la puissance disponible au sein des super-ordinateurs a augmenté parallèlement aux progrès de l’électronique et suit la théorie énoncée par Gordon MOORE. Cette dernière énonce un doublement de la puissance disponible tous les 18 mois. Pour mesurer cette puissance, il est usuel d’utiliser une unité dédiée : le Flops (de l’anglais Floating point Operations Per Second).

Pour atteindre de telles capacités de calcul, les super-ordinateurs sont obligés d’utiliser un grand nombre de processeurs (plusieurs milliers), aussi appelés CPU (de l’anglais Central Processing Unit), qui vont fonctionner de manière conjointe. Cette utilisation parallèle des CPU est une spécificité introduite par ces super-ordinateurs. En effet, avant l’émergence de ce mouvement de parallélisation, les ordinateurs ne contenaient qu’un seul CPU dont la fréquence de fonctionnement était la seule caractéristique permettant d’évaluer la performance de la machine. La règle était alors relativement simple : plus la fréquence était élevée, plus le CPU était rapide. Ainsi, il était alors possible de permettre à un programme limité par la vitesse du CPU de s’exécuter plus rapidement sans la moindre adaptation (un CPU plus rapide permet d’effectuer plus d’opérations par seconde). Cependant, l’augmentation de la fréquence au sein d’un CPU est limitée par l’apparition de multiple obstacles physiques, notamment en termes de miniaturisation (finesse de gravure du CPU) et de dissipation thermique. Le parallélisme est donc apparu comme la solution pour contourner ces difficultés afin d’augmenter les performances des ordinateurs. L’accroissement de la puissance de calcul est alors réalisée grâce à la multiplication du nombre de CPU et du nombre de cœurs d’exécution (processeur multi-cœurs) et/ou par une interconnexion entre de nombreuses machines (serveurs de calcul).

Le parallélisme 

Les architectures parallèles sont devenues omniprésentes et chaque ordinateur possède maintenant un processeur reposant sur ce type d’architecture matérielle. Le parallélisme consiste à utiliser ces architectures parallèles pour traiter des informations et des données de manière simultanée dans le but de réaliser le plus grand nombre d’opérations par seconde.

La taxonomie de Flynn 

La taxonomie établie par Michael J. FLYNN [Flynn, 1972] est l’un des premiers systèmes de classification qui classe les architectures des ordinateurs selon le type d’organisation du flux de données et du flux d’instructions qu’ils utilisent. Il référence ainsi quatre types différents d’architecture qui vont du plus simple traitant uniquement une donnée à la fois, ils sont dits séquentiels, aux plus complexes traitant de nombreuses données et instructions en simultané, ils sont qualifiés de parallèles.  :
— Architecture SISD (Single instruction Single Data) : systèmes séquentiels qui traitent une donnée à la fois.
— Architecture SIMD (Single instruction Multiple Data) : systèmes parallèles traitant de grandes quantités de données d’une manière uniforme.
— Architecture MIMD (Multiple instruction Multiple Data) : systèmes parallèles traitant de grandes quantités de données de manières hétérogènes.
— Architecture MISD (Multiple instruction Single Data) : systèmes parallèles traitant une seule donnée de manière hétérogène.

LIRE AUSSI :  Relation entre métriques de code et effort de test

Cette classification montre clairement deux types de parallélismes différents : le MIMD et le SIMD. Le MIMD correspond au parallélisme par flot d’instructions, également nommé parallélisme de traitement ou de contrôle, dans lequel plusieurs instructions différentes sont exécutées simultanément. Le SIMD fait référence au parallélisme de données, où les mêmes opérations sont répétées sur des données différentes.

Efficacité du parallélisme

Cependant, il serait naïf de penser que la parallélisation d’un programme ou d’un algorithme apporte nécessairement un gain de performance important. De façon idéale, l’accélération induite par la parallélisation devrait être linéaire. En doublant le nombre d’unités de calcul, on devrait réduire de moitié le temps d’exécution, et ainsi de suite. Malheureusement très peu de programmes peuvent prétendre à de tels résultats. En effet, l’accélération que peut apporter la parallélisation est limitée par le nombre d’exécutions parallèles possibles au sein de l’algorithme ou du programme.

Dans les années 1960, Gene AMDAHL formula une loi empirique restée célèbre [Amdahl, 1967]. La loi d’AMDAHL  affirme qu’il existe, dans tout programme, une partie du code source qui ne peut être parallélisée et qui limite la vitesse d’exécution globale. Ainsi, cette loi établie une relation entre le ratio de code parallélisé et la vitesse globale d’exécution du programme. Dans la pratique, si un programme peut être parallélisé à 90 %, l’accélération maximale théorique sera de ×10, quel que soit le nombre de processeurs utilisés .

D’autres lois ont suivi, telle que la loi de GUSTAFSON [Gustafson, 1988] qui prédit que le gain de vitesse obtenu est proportionnel à la fois au taux que représente la partie non-parallélisable et au nombre de processeurs. La métrique de KARP-FLATT [Karp and Flatt, 1990], proposée en 1990, est plus complexe et efficace que les deux autres lois. Elle intègre le coût lié au temps d’exécutions des instructions qui mettent en œuvre le parallélisme.

Table des matières

Introduction
1 Simulation multi-agent
1.1 Les systèmes multi-agents
1.1.1 Le concept d’agent
1.1.2 Le concept d’environnement
1.2 La simulation multi-agent
1.2.1 Modèles et simulation multi-agent
1.2.2 Plates-formes de simulations multi-agents
1.2.3 Performance des simulations multi-agents
1.2.4 Implémentation de simulations multi-agents
1.3 Résumé du chapitre et objectifs premiers de la thèse
2 Calcul haute performance et GPGPU
2.1 Une réponse à des besoins de calculs
2.2 Le parallélisme
2.2.1 La taxonomie de Flynn
2.2.2 Efficacité du parallélisme
2.2.3 Solutions de parallélisation
2.2.4 Les cartes graphiques : une alternative intéressante pour le calcul intensif
2.3 General-Purpose computing on Graphics Processing Units
2.3.1 Historique et évolution des capacités des GPU
2.3.2 Une nouvelle architecture d’exécution
2.3.3 Modèle de programmation
2.3.4 Exemple d’implémentation
2.3.5 Aspects importants autour de la programmation GPU
2.4 Résumé du chapitre et début de problématique
3 Simulations multi-agents et GPGPU
3.1 Implémentation tout-sur-GPU
3.1.1 Utilisation des fonctions graphiques des GPU
3.1.2 Utilisation des API dédiées au GPGPU
3.1.3 Bilan des implémentations tout-sur-GPU
3.2 Implémentation hybride
3.3 Chronologie et synthèse
3.4 Synthèse de l’utilisation du GPGPU dans les MABS
3.4.1 Nature et généricité des modèles
3.4.2 L’accessibilité des modèles
3.5 Problématiques abordées dans la thèse
 Conclusion

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *