Пасля трох гадоў распрацоўкі апублікаваны набор спецыфікацый 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
