Апублікаваны стандарт паралельнага праграмавання OpenMP 6.0

Пасля трох гадоў распрацоўкі апублікаваны набор спецыфікацый OpenMP 6.0 (Open Multi-Processing), вызначальных API і спосабы ўжывання метадаў раўналежнага праграмавання для моў Сі, Сі++ і Фортран на шмат'ядравых і гібрыдных (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

Дадаць каментар