Publication de la norme de programmation parallèle OpenMP 6.0

Après trois années de développement, un ensemble de spécifications OpenMP 6.0 (Open Multi-Processing) a été publié, définissant les API et les méthodes d'application des méthodes de programmation parallèle pour les langages C, C++ et Fortran sur multicœurs et hybrides (CPU+GPU /DSP) avec mémoire partagée et vectorisation de blocs (SIMD). La prise en charge initiale de certaines fonctionnalités d'OpenMP 6.0 devrait être incluse dans les versions LLVM/Clang 20 et GCC 15.

Changements majeurs dans OpenMP 6.0 :

  • Le processus de programmation des tâches a été simplifié, définissant des parties indépendantes du programme qui peuvent être exécutées en parallèle avec d'autres parties.
    • Ajout de la possibilité d'effectuer des tâches dans des threads d'agent libre qui ne sont pas liés à des groupes de threads (équipes) qui exécutent des régions parallèles (région parallèle, un bloc de code exécuté dans plusieurs threads).
    • Un support est fourni pour enregistrer un graphique de tâches, qui définit les dépendances entre les tâches et l'ordre dans lequel les tâches sont exécutées, afin d'améliorer l'efficacité des relectures ultérieures.
    • Un mécanisme de tâches transparentes a été mis en place pour simplifier la gestion des dépendances et contrôler automatiquement l'exécution des tâches enfants.
  • Prise en charge étendue des appareils informatiques pouvant être utilisés pour effectuer des tâches parallèles (CPU, GPU, DSP, etc.).
    • Ajout d'une nouvelle syntaxe de tableau pour permettre à la directive "workdistribute" d'être utilisée pour diviser le traitement du tableau entre différentes unités de travail.
    • Les contrôles d'allocation de mémoire ont été améliorés pour faciliter la gestion des variables pour lesquelles la mémoire est allouée dynamiquement.
    • La prise en charge des attributs qui déterminent la façon dont les données sont distribuées par défaut entre les appareils a été étendue.
    • Code d'écriture simplifié pour le transfert de données asynchrone vers des appareils informatiques supplémentaires (GPU).
    • Gestion améliorée de la mémoire et sa liaison aux appareils informatiques.
    • Ajout de la directive "groupprivate" pour attribuer de la mémoire à un groupe de threads exécutés sur un périphérique informatique spécifique.
  • La programmation de certains types de transformations de boucles a été simplifiée, comme la fusion de plusieurs boucles, la modification de l'ordre des boucles imbriquées et l'inversion des boucles.
  • Une nouvelle opération d'induction a été ajoutée pour organiser la parallélisation en boucles de calculs arithmétiques simples et d'opérations utilisateur qui dépendent des valeurs précédentes.
  • Ajout d'une prise en charge complète de la parallélisation des programmes écrits à l'aide des normes C23 (y compris la syntaxe des attributs), Fortran 2023 et C++23. Ajout de nouveaux attributs pour C/C++.
  • Capacités améliorées de stockage et de gestion de la mémoire. De nouveaux attributs ont été ajoutés pour contrôler la manière dont la mémoire doit être allouée et utilisée. Ajout d'une API pour définir et interroger les espaces mémoire.
  • Les fonctionnalités obsolètes dans les spécifications OpenMP 5.0, 5.1 et 5.2 ont été supprimées.

Source: opennet.ru

Ajouter un commentaire