Titre: Contribution au calcul sur GPU: considérations arithmétiques et architecturales
Auteurs: David Defour
Ecole: Université de Perpignan
Résumé: Le calcul est omniprésent dans notre quotidien. Il est aujourd’hui un bien de grande consommation, au même titre qu’une voiture ou un téléphone portable et offre les mêmes propriétés « commerciales » : il est standardisé, performant, fiable et économe.
Le fait de standardiser un outil comme le calcul présente de multiples avantages, tant du point de vue de l’utilisateur que du fabricant. L’utilisateur sait à quoi s’attendre car le standard a été conçu pour répondre aux attentes du plus grand nombre. De leur côté, les fabricants peuvent alors le produire à grande échelle en l’optimisant pour ce standard, réduisant ainsi les coûts de production. L’inconvénient est que le standard ne répond par forcément à toutes les attentes.
Il y a alors deux réponses possibles : soit utiliser les outils génériques pour émuler ces besoins spécifiques, quitte à perdre en performance, soit faire évoluer le standard en fonction des besoins mais aussi des possibilités offertes par la technologie.
Le travail présenté dans ce document s’inscrit dans ce double objectif d’utiliser le matériel nécessaire au calcul, d’en analyser les différentes problématiques et de proposer des évolutions de celui-ci. Il décrit le travail entrepris à l’Université de Perpignan au sein de l’équipe DALI avec l’aide de mes deux doctorants Sylvain Collange puis Manuel Marin. Je soulignerai que l’année de mon arrivée à Perpignan en 2003 a été marquée par plusieurs changements. Ceux d’ordre personnel, puisque j’ai pu profiter de nouvelles collaborations pour traiter le calcul sous un angle plus global. Et enfin ceux relatif aux microprocesseurs, puisque cette période a été marquée par l’abandon de la course au gigahertz par les constructeurs. Cet abandon s’est accompagné par une augmentation du nombre de cœurs de calcul par puce.
Les architectures généralistes ne fournissant plus l’augmentation de performance escomptée, les chercheurs se sont tournés vers les coprocesseurs graphiques pour l’accélération de code scientifique. Dans le même temps, les environnements de développement pour ce type d’architecture se simplifiaient et les capacités de calcul flottant s’amélioraient. L’objet du premier chapitre de ce mémoire est de replacer nos contributions dans ce contexte historique en rappelant le fonctionnement de ces coprocesseurs, leurs évolutions et leurs capacités de calcul en virgule flottante.
L’arrivée des GPU et de leurs nombreuses unités de calculs permet d’envisager l’utilisation d’arithmétiques que nous qualifions de non conventionnelles et réputées coûteuses en temps et en ressources de calcul. Nous montrerons au deuxième chapitre comment la connaissance des comportements des diverses unités de calcul, de leur arrangement et de leurs propriétés peut aider à proposer des implantations logicielles efficaces de ces arithmétiques non standards. Nous décrirons nos contributions à travers des implantations optimisées sur GPU d’arithmétique en Multi-précision, par intervalle, floue et logarithmique.
Dans le troisième chapitre, nous prendrons la liberté de nous soustraire des contraintes architecturales des processeurs existants pour envisager le calcul dans un cadre architectural plus large. Nous y envisagerons la problématique de la simulation fonctionnelle, de l’accès aux registres, des branchements, et des unités de calcul spécialisées. Les GPU sont représentatifs de cette tendance de fond à avoir un nombre grandissant de cœurs de calcul. Même si ceux-ci sont homogènes, gérer efficacement un grand nombre d’unités de calcul pose des problèmes aussi bien au niveau matériel qu’algorithmique. Il devient en effet indispensable de pouvoir en contrôler la consommation électrique, de gérer les inévitables erreurs matérielles ainsi que leur comportement qui se doit d’être le plus régulier possible. Nous avons réalisé des mesures relatives à ces éléments qui nous ont permis de formuler un certain nombre de propositions couvertes dans le quatrième chapitre.
Extrait du sommaire:
Introduction
1 Calcul flottant sur GPU
1.1 Fonctionnement d’un GPU
1.1.1 Modèle de programmation
1.1.2 Un peu d’histoire : le pipeline graphique
1.1.3 GPU modernes
1.1.4 Unités de calcul
1.2 Arithmétique IEEE-754
1.2.1 Tests de l’arithmétique à virgule flottante
1.2.2 Format et performance des calculs
2 Arithmétiques non conventionnelles
2.1 Arithmétique multi-précision
2.1.1 Formats de représentations
2.1.2 Implantation sur GPU.
2.2 Arithmétique par intervalle
2.2.1 Formats de représentations
2.2.2 Implantation sur GPU
2.2.3 Application : lancé de rayon certifié
2.3 Arithmétique floue
2.3.1 Définitions
2.3.2 Optimisation de la représentation et des calculs
2.4 Arithmétique logarithmique
2.4.1 Implantation sur GPU. 17
2.4.2 Evaluation polynomiale par filtrage bilinéaire
3 Considérations architecturales
3.1 Simulation architecturale
3.1.1 La simulation multi-cœur
3.1.2 Barra, un simulateur de GPU NVIDIA
3.2 Le banc de registres
3.2.1 Optimisation de la latence
3.2.2 Optimisation du débit
3.3 Les branchements
3.3.1 Gestion dans le cas superscalaire
3.3.2 Gestion dans le cas vectoriel
3.4 Opérateurs spécialisés
3.4.1 Mécanisme de fusion pour la réalisation d’opérateurs ternaires
3.4.2 Unités de calculs spécialisées avec cache partagé
4 Comportement du calcul
4.1 Régularité dans les calculs
4.1.1 Etude d’une application irrégulière : le parcours d’arbre
4.1.2 Régularité des calculs vs réduction du nombre d’opérations
4.2 Régularité dans les données
4.2.1 Données uniformes et affines
4.2.2 Détection dynamique de valeurs remarquables dans les registres
4.3 Analyse de comportement par mesure de la consommation
4.3.1 Mesure de consommation
4.3.2 Analyse des résultats 34
4.4 Fiabilisation des calculs dans les architectures multicoeurs
4.4.1 Détection d’erreur
4.4.2 Calculer en présence d’erreurs
4.5 Prédictibilité dans les GPU
4.5.1 Sources d’indéterminisme dans les GPU
4.5.2 Mesure de la prédictibilité
5 Conclusion et perspectives
Obtenir le fichier PDF: Contribution au calcul sur GPU