Публикуван е стандартът за паралелно програмиране OpenMP 6.0

След три години разработка е публикуван набор от спецификации OpenMP 6.0 (Open Multi-Processing), определящи API и методи за прилагане на паралелно програмиране за езиците C, C++ и Fortran на многоядрени и хибридни (CPU+GPU/DSP) системи с обща памет и блокове за векторизация (SIMD). Предполага се, че началната поддръжка на отделни функции от OpenMP 6.0 ще бъде включена в версиите на LLVM/Clang 20 и GCC 15.

Основни промени в OpenMP 6.0:

  • Оптимизиран е процеса на програмиране на задачи (task), определящи независими части от програмата, които могат да се изпълняват паралелно с другите части.
    • Добавена е възможност за изпълнение на задачи в потоци free-agent, не свързани с групи от потоци (teams), изпълняващи паралелни региони (parallel region, блок код, изпълняван в няколко потока).
    • Осигурена е поддръжка за запазване на графа на задачите (taskgraph), определящ зависимостите между задачите и реда на изпълнение на задачите, с цел повишаване на ефективността при последващо повторно възпроизвеждане.
    • Реализиран е механизъм за прозрачни задачи (transparent tasks) за опростяване на управлението на зависимостите и автоматично управление на изпълнението на дъщерни задачи.
  • Разширена е поддръжката на изчислителни устройства, които могат да се използват за изпълнение на паралелни задачи (CPU, GPU, DSP и др.).
    • Добавен е нов синтаксис за масиви, позволяващ използването на директивата «workdistribute» за разделяне на обработката на масиви между различни единици работа.
    • Разширени са възможностите за управление на динамично разпределената памет, опростяващи управлението на променливите.
    • Разширена е поддръжката на атрибути, определящи по подразбиране разпределението на данни между устройствата.
    • Опростено е писането на код за асинхронни предавания на данни към допълнителни изчислителни устройства (GPU).
    • Подобрено е управлението на паметта и нейната връзка с изчислителните устройства.
    • Добавена е директива «groupprivate» за закрепване на паметта за група потоци, изпълнявани на определено изчислително устройство.
  • Опростено е програмирането на някои видове трансформации на цикли, като обединяване на няколко цикъла, смяна на реда на вложени цикли и реверсия на цикли.
  • Добавена нова операция за индукция (induction) за организиране на паралелизация в цикли на прости аритметични изчисления и потребителски операции, зависещи от предишни стойности.
  • Добавена е пълна поддръжка на паралелизация на програми, написани с помощта на стандартите C23 (включително синтаксиса на атрибутите), Fortran 2023 и C++23. Добавени са нови атрибути за C/C++.
  • Разширени са възможностите за управление на хранилището и паметта. Добавени са нови атрибути за контрол над начина, по който трябва да се разпределя и използва паметта. Добавен е API за определяне и заявяване на пространства в паметта (memory space).
  • Премахнати са възможностите, обявени за остарели в спецификациите на OpenMP 5.0, 5.1 и 5.2.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster