Simple Science

La science de pointe expliquée simplement

# Informatique# Informatique distribuée, parallèle et en grappes

Évaluation de l'Offloading OpenMP sur les GPU modernes

Une étude sur les performances du déchargement OpenMP pour les GPU Intel et NVIDIA.

― 9 min lire


Insights sur laInsights sur laperformance d'OpenMP etdes GPUOpenMP sur les GPU.Analyse approfondie de l’offloading
Table des matières

Les superordinateurs sont super importants dans plein de domaines scientifiques parce qu’ils permettent aux chercheurs de faire des simulations complexes et d’analyser de grosses quantités de Données. Ces systèmes ont besoin d’une super performance en termes de puissance de calcul et de stockage pour obtenir des résultats précis et détaillés. Avec la demande de meilleures Performances qui augmente, de nouveaux types de matériel informatique ont été conçus. Les GPU généralistes (GPGPU) sont une avancée majeure qui aide à accélérer les calculs couramment utilisés dans des domaines comme la science des matériaux, la chimie, l'astrophysique et l'apprentissage profond.

Les GPU sont construits pour gérer plein de calculs à la fois, ce qui les rend idéaux pour des tâches qui nécessitent un gros niveau de traitement en parallèle, comme faire des simulations et analyser des données. Cependant, écrire des programmes pour les GPU peut être assez compliqué. Leurs conceptions complexes signifient que les programmeurs doivent bien comprendre à la fois le matériel et le logiciel pour faire tourner leurs applications plus vite. En plus, chaque entreprise a ses propres architectures de GPU et méthodes de programmation, ce qui peut compliquer les choses. Par exemple, le modèle de programmation CUDA de Nvidia est spécialement conçu pour les GPU Nvidia, et certains Compilateurs sont faits pour fonctionner avec.

Un autre défi vient de la gestion de la mémoire. Les GPU sont généralement utilisés pour accélérer des calculs qui nécessitent de gérer de grosses quantités de données. Mais faire passer des données entre le GPU et l’ordinateur principal peut prendre un temps fou. Les développeurs doivent écrire leur code avec soin pour réduire ces délais. En plus, les GPU ont souvent moins de mémoire que les CPU traditionnels, ce qui peut ralentir les performances pour certaines applications. Les développeurs doivent être malins sur l’utilisation de la mémoire pour garder leurs programmes efficaces. Déboguer un code qui tourne sur un GPU peut aussi être plus compliqué que sur un CPU classique à cause des nombreuses interactions entre le matériel et le logiciel. Les développeurs ont souvent besoin d’outils spéciaux pour déboguer efficacement le code GPU.

OpenMP pour le calcul multi-cœurs et GPU

Récemment, l'architecture des ordinateurs a évolué vers des systèmes multi-cœurs et many-core pour répondre à la demande de meilleures performances. Pour supporter ces systèmes, les méthodes de programmation ont été mises à jour pour utiliser le parallélisme en mémoire partagée.

OpenMP est l'un des interfaces de programmation les plus utilisées qui permet aux développeurs de travailler avec des systèmes à mémoire partagée. Il propose un ensemble de commandes qui peuvent être ajoutées à un programme pour permettre de tourner en parallèle sur des systèmes multi-cœurs. Une des raisons pour lesquelles OpenMP est populaire, c'est qu'il a une interface conviviale qui est facile à lire et à utiliser.

Au départ, OpenMP était destiné aux systèmes à mémoire partagée comme les CPU multi-cœurs. Cependant, avec l’essor des dispositifs comme les GPU, il y avait une demande croissante pour qu’OpenMP supporte le transfert de tâches vers ces dispositifs. En 2013, OpenMP a introduit le support pour ce genre de transfert dans sa version 4.0. Cette version est arrivée avec des commandes permettant aux programmeurs de déplacer des calculs vers un accélérateur comme un GPU tout en maintenant le code quasiment identique pour le CPU principal et l’accélérateur.

Au début, le support pour déplacer des tâches vers les GPU avec OpenMP était limité et dépendait de compilateurs et bibliothèques spécifiques. Cependant, ces dernières années, ce support s’est élargi, avec de nombreux compilateurs et bibliothèques ajoutant des fonctionnalités pour le transfert OpenMP vers les GPU.

En 2018, OpenMP a introduit la version 5.0, qui a apporté de nouvelles fonctionnalités pour le transfert de tâches vers les GPU, y compris de meilleures façons de gérer les transferts de données entre le CPU et le GPU. La version actuelle est la 5.2, sortie en novembre 2021.

De nombreux compilateurs et bibliothèques populaires, comme GCC et le oneAPI d'Intel, supportent maintenant le transfert OpenMP vers les GPU. En plus, des entreprises comme NVIDIA et Intel ont développé des outils pour optimiser ce processus pour leur matériel. D'autres améliorations matérielles, comme la mémoire à haute bande passante, améliorent aussi les performances.

Le support de divers compilateurs pour les dernières spécifications OpenMP est essentiel pour tirer pleinement parti des GPU dans de nombreux systèmes. La conception matérielle est également importante pour s’assurer que les applications peuvent bien évoluer.

Dans ce contexte, une étude a évalué la performance et la portabilité du transfert OpenMP sur deux GPU modernes : le PVC1100 d'Intel et le A100 de NVIDIA. En utilisant les derniers compilateurs de oneAPI et GNU, l’étude a testé comment OpenMP fonctionne sur ces deux types de matériel.

Pour vérifier la portabilité d'OpenMP sur ces GPU, les chercheurs ont utilisé une suite de tests OpenMP reconnue. Pour les tests de performance, ils ont utilisé le benchmark LULESH, qui est conçu pour faire des simulations de manière à ressembler à de vrais problèmes scientifiques.

Les résultats ont montré que les compilateurs GNU et oneAPI offrent un bon support pour de nombreuses fonctionnalités de transfert OpenMP, surtout pour les versions antérieures. Cependant, le support des dernières fonctionnalités est encore insuffisant. En évaluant les performances, le PVC1100 a surpassé le A100 de jusqu’à 37 %, mettant en avant ses forces en calcul et gestion des données.

Comparaison des GPU HPC

GPU Intel Data Center Max 1100 (Ponte Vecchio)

Le Ponte Vecchio d'Intel, ou PVC, est conçu pour le calcul haute performance et les tâches d'intelligence artificielle. Ses principaux atouts résident dans sa technologie d'emballage avancée, qui permet d'empiler plusieurs puces, offrant ainsi de meilleures performances et une utilisation optimale de l'énergie. Le PVC utilise aussi l'architecture Xe d'Intel, adaptée aux tâches exigeantes comme les calculs matriciels courants dans les applications d'IA.

Le PVC est optimisé pour fonctionner avec le logiciel oneAPI d'Intel, permettant aux développeurs d'écrire du code polyvalent capable de tourner sur différents types de processeurs, facilitant ainsi l’optimisation des performances.

GPU NVIDIA A100

Le GPU A100 de NVIDIA est une option de premier choix pour le calcul haute performance et l'analyse de données. Il possède des capacités avancées pour les tâches d'apprentissage profond et un accès mémoire plus rapide. Le A100 inclut une nouvelle méthode pour gérer les données efficacement et permet des connexions rapides entre plusieurs GPU. En gros, c'est une solution puissante pour un large éventail de besoins informatiques exigeants.

Évaluation du transfert OpenMP

Alors qu'OpenMP continue de se développer, les nouvelles versions apportent des fonctionnalités qui ont besoin d’être testées. La suite de tests SOLLVE de validation et vérification évalue combien bien ces fonctionnalités fonctionnent à travers différents compilateurs. Cette évaluation continue est essentielle pour les développeurs qui comptent sur OpenMP pour améliorer les performances dans leurs projets scientifiques.

Le benchmark LULESH est un autre outil précieux. Il simule un problème de physique et supporte plusieurs méthodes de programmation parallèle. Grâce à son utilisation répandue, LULESH est souvent choisi pour tester de nouveaux matériels ou méthodes de programmation.

Résultats et analyse

Le NVIDIA A100 et l'Intel PVC1100 sont tous les deux conçus pour des tâches de calcul intensives. L’étude a comparé leurs performances grâce à des expériences spécifiques. Pour compiler le code utilisant OpenMP, différents drapeaux ont été définis pour chaque système, permettant des tests efficaces.

Les tests OpenMP ont montré que les deux compilateurs supportaient de nombreuses fonctionnalités des versions antérieures d'OpenMP. Cependant, le support des dernières fonctionnalités doit encore s'améliorer, surtout en ce qui concerne les directives de mémoire unifiée et de mémoire partagée.

Pour ce qui est des performances, les résultats ont indiqué que le GPU PVC1100 performait de façon significativement meilleure (jusqu'à 6 fois) que le A100 sur certaines tâches. La gestion des mouvements de données était aussi plus efficace dans le PVC1100, même si son allocation de mémoire était légèrement plus lente.

Conclusions et travaux futurs

Cette recherche a fourni un aperçu approfondi de la façon dont le transfert OpenMP fonctionne sur les GPU modernes. Les résultats ont montré que, bien que les derniers compilateurs supportent de nombreuses fonctionnalités d'OpenMP, il y a encore des lacunes, surtout en ce qui concerne les directives de gestion de la mémoire.

Le PVC1100 d'Intel a montré des performances impressionnantes par rapport au A100 de NVIDIA, avec un potentiel pour de meilleurs résultats grâce à de futurs efforts de codage et d’optimisation. Pour les études futures, il serait bénéfique de tester d'autres applications utilisant le transfert OpenMP et d'approfondir les scénarios du monde réel pour évaluer encore mieux les performances.

Dans l'ensemble, il y a un grand potentiel pour améliorer la performance et l’efficacité dans le calcul scientifique en tirant parti des dernières avancées en OpenMP et en technologie GPU.

Source originale

Titre: Portability and Scalability of OpenMP Offloading on State-of-the-art Accelerators

Résumé: Over the last decade, most of the increase in computing power has been gained by advances in accelerated many-core architectures, mainly in the form of GPGPUs. While accelerators achieve phenomenal performances in various computing tasks, their utilization requires code adaptations and transformations. Thus, OpenMP, the most common standard for multi-threading in scientific computing applications, introduced offloading capabilities between host (CPUs) and accelerators since v4.0, with increasing support in the successive v4.5, v5.0, v5.1, and the latest v5.2 versions. Recently, two state-of-the-art GPUs -- the Intel Ponte Vecchio Max 1100 and the NVIDIA A100 GPUs -- were released to the market, with the oneAPI and NVHPC compilers for offloading, correspondingly. In this work, we present early performance results of OpenMP offloading capabilities to these devices while specifically analyzing the portability of advanced directives (using SOLLVE's OMPVV test suite) and the scalability of the hardware in representative scientific mini-app (the LULESH benchmark). Our results show that the coverage for version 4.5 is nearly complete in both latest NVHPC and oneAPI tools. However, we observed a lack of support in versions 5.0, 5.1, and 5.2, which is particularly noticeable when using NVHPC. From the performance perspective, we found that the PVC1100 and A100 are relatively comparable on the LULESH benchmark. While the A100 is slightly better due to faster memory bandwidth, the PVC1100 reaches the next problem size (400^3) scalably due to the larger memory size.

Auteurs: Yehonatan Fridman, Guy Tamir, Gal Oren

Dernière mise à jour: 2023-05-14 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2304.04276

Source PDF: https://arxiv.org/pdf/2304.04276

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires