Skip to content
A decorative image.
Source: developer.nvidia.com

Moins de code, plus de science : simplifier la modélisation océanique sur GPU avec OpenACC et mémoire unifiée

Sources: https://developer.nvidia.com/blog/less-coding-more-science-simplify-ocean-modeling-on-gpus-with-openacc-and-unified-memory

TL;DR

  • NVIDIA HPC SDK v25.7 fait progresser la programmation en mémoire unifiée pour le HPC avec GPU, automatisant les transferts entre CPU et GPU.
  • La release réduit la gestion manuelle des données, raccourcit les cycles de portage sur GPU et diminue les bugs grâce à un espace d’adressage unique.
  • Des plateformes cohérentes NVIDIA avec une interconnexion à haut débit (Grace Hopper, GB200 NVL72) permettent la migration automatique des données et une mémoire partagée entre CPU et GPU.
  • Le port réel de NEMO (modèle océanique) sur GPU montre des gains autour de 2x à 5x; OpenACC 3.4 introduit le modificateur de capture pour prévenir les conditions de course.
  • La mise à jour s’inscrit dans la stratégie de NVIDIA consistant à simplifier le développement sur GPU et à accélérer les charges scientifiques en océanographie et climatologie.

Contexte et antécédents

La programmation en mémoire unifiée est présentée comme une fonction clé pour le HPC sur les systèmes accélérés par GPU. Des plateformes cohérentes comme Grace Hopper et GB200 NVL72 offrent un espace d’adresses partagé entre CPU et GPU, permettant au driver CUDA de gérer automatiquement les transferts de données. Ces capacités reposent sur des interconnexions haut débit (NVLink-C2C) et sur un modèle de mémoire unifiée qui réduit le besoin de transferts explicites. Depuis fin 2023, NVIDIA intègre progressivement la mémoire unifiée dans l’écosystème HPC, avec des systèmes basés sur Grace Hopper déployés dans des centres majeurs comme CSCS en Suisse et JSC en Allemagne. L’objectif est d’augmenter la productivité des développeurs en les libérant des détails logistiques de mouvement de données. NVIDIA HPC SDK v25.7 release. Dans ce contexte, le portage réel de NEMO, cadre de modélisation océanique, sert d’étude de cas concret. Le code NEMO comporte des structures de données complexes (types dérivés, tableaux alloués) qui nécessitaient historiquement une gestion manuelle des transferts lors du portage vers les GPUs. Le blog explique comment la mémoire unifiée peut réduire ou supprimer ce boilerplate, permettant aux développeurs de se concentrer davantage sur le parallélisme. Le texte souligne aussi que les architectures Grace Hopper offrent une cohérence mémoire CPU-GPU grâce à des interconnexions haut débit, améliorant la locality lors des offloads GPU. NVIDIA HPC SDK v25.7 release.

Quoi de neuf

  • Ensemble d’outils complet pour la programmation en mémoire unifiée : le HPC SDK 25.7 offre un kit complet qui automatise les transferts de données entre CPU et GPU, réduisant la gestion manuelle et facilitant la parallélisation.
  • Moins de gestion des données et portage plus rapide : avec un espace d’adresses partagé, les transferts de données sont gérés par le driver CUDA, réduisant le boilerplate et les bugs.
  • Améliorations OpenACC et gestion des conditions de course : le blog explique que l’exécution asynchrone dans OpenACC peut introduire des conditions de course lorsque le GPU accède à des données partagées pendant que le CPU quitte des fonctions. OpenACC 3.4 introduit le modificateur de capture dans les clauses de données pour résoudre ces conditions, permettant un usage asynchrone plus sûr sans refonte lourde. NVIDIA HPC SDK v25.7 release.
  • Exécution asynchrone et meilleure concurrence : les développeurs peuvent utiliser des directives asynchrones et une gestion de synchronisation (par exemple, !$acc wait) pour superposer calcul et communication, tout en garantissant la visibilité des données pour MPI ou d’autres routines côté CPU.
  • Migration automatique de mémoire et gains de locality : CUDA 12.4 introduit des heuristiques d’accès qui migrent les pages mémoire de la CPU vers la GPU selon le schéma d’utilisation, améliorant la locality sur Grace Hopper. Des mécanismes similaires existent sur des systèmes compatibles Linux avec des noyaux récents.
  • Port NEMO (benchmark GYRE_PISCES) : l’exemple de port NEMO sur GPU illustre le flux de travail et les gains de productivité, avec des gains de performance dans la plage ~2x à ~5x lorsque des portions du code sont déplacées vers Hopper. Ce cas démontre l’équilibre entre productivité et performance lors de l’adoption de mémoire unifiée.

Pourquoi cela compte pour les développeurs et les entreprises

La mémoire unifiée résout un des plus grands défis du développement GPU en HPC : la gestion des données. En offrant un espace d’adresses commun, les équipes peuvent réduire le code boilerplate, accélérer les cycles de portage et tester plus rapidement différentes configurations GPU. L’ajout du modificateur de capture OpenACC 3.4 augmente la fiabilité des exécutions asynchrones, ce qui est crucial pour les simulations à grande échelle. Grâce à la migration automatique des pages mémoire et à la cohérence CPU-GPU, Grace Hopper peut proposer des gains de locality et des performances accrues sans réécrire de grandes portions de code. Ces éléments favorisent une adoption plus large du GPU pour les modèles océaniques et les sciences climatiques, avec des bénéfices mesurables en termes de productivité et de résultats scientifiques.

Détails techniques ou Mise en œuvre

Le billet décrit une trajectoire de portage pratique, illustrant comment une base de code NEMO peut passer d’un exécution CPU à des kernels OpenACC sur GPU, en s’appuyant sur la mémoire unifiée et le driver CUDA pour la gestion des données. Le paragraphe met en évidence le risque de conditions de course lors d’exécutions asynchrones et comment le modificateur de capture du OpenACC 3.4 aide à résoudre ces problèmes sans refactoring massif. Grace Hopper, avec son interconnexion NVLink-C2C, offre une cohérence mémoire entre CPU et GPU, renforçant l’efficacité des portages. CUDA 12.4 complète ce cadre en proposant une migration de mémoire basée sur l’accès fréquent, améliorant ainsi la locality sur les plates-formes Grace Hopper et systèmes compatibles. Le port NEMO est décrit comme un processus graduel : commencer par la diffusion horizontale des traçeurs actifs et passifs, passer à l’advection des traçeurs, puis à la diffusion verticale et au filtrage temporel. À chaque étape, des gains de performance ont été observés lorsque davantage de calculs sont déplacés vers le GPU Hopper, avec des gains allant jusqu’à environ 5x dans certaines portions du pipeline. Cela illustre non seulement les avantages en termes de performance, mais aussi la rapidité avec laquelle les équipes peuvent tester et ajuster des configurations avec un minimum de code supplémentaire. NVIDIA HPC SDK v25.7 release.

Conclusions clés

  • La mémoire unifiée réduit les efforts de gestion des données dans les codes HPC destinés aux GPU.
  • OpenACC bénéficie du support 3.4, atténuant les conditions de course dans les exécutions asynchrones.
  • La migration mémoire automatique et la cohérence Grace Hopper améliorent la locality et les performances sans réécriture majeure du code.
  • Les portages réels, comme NEMO, montrent des gains de productivité et des améliorations de performance.
  • Le HPC SDK 25.7 consolide la transition vers des plateformes CPU-GPU cohérentes pour les sciences computationnelles.

FAQ

  • - **Q : Qu’est-ce que la mémoire unifiée dans cette version ?**

    Cette version offre un ensemble complet d’outils qui automatisent les transferts de données et créent un espace d’adresses unique entre CPU et GPU, réduisant la gestion manuelle. - **Q : Comment cela impacte-t-il le OpenACC sur Grace Hopper ?** **A :** Cela permet un portage plus sûr et productif, réduit le boilerplate de gestion des données et prend en charge le modificateur de capture du OpenACC 3.4 pour éviter les conditions de course. - **Q : Quels gains de performance attendre pour des workloads comme NEMO ?** **A :** Dans l’exemple du port NEMO, les gains observés variaient de ~2x à ~5x, selon les étapes et jusqu’à ce que davantage de code soit déplacé vers le GPU Hopper. - **Q : Et au sujet des conditions de course et de la synchronisation ?** **A :** Le modificateur de capture du OpenACC 3.4 aborde ces conditions dans les scénarios asynchrones, augmentant la fiabilité sans refactorisation majeure. - **Q : Que doivent privilégier les développeurs lors du portage vers mémoire unifiée ?** **A :** Commencer par la parallélisation de boucles critiques avec OpenACC, s’appuyer sur le driver CUDA pour la gestion des données, envisager l’exécution asynchrone avec une synchronisation soignée et utiliser le modificateur de capture au besoin.

References

More news