Pärast kolmeaastast arendustööd on avaldatud OpenMP 6.0 (Open Multi-Processing) spetsifikatsioonide kogum, mis määratleb API ja meetodid paralleelprogrammeerimise rakendamiseks C, C++ ja Fortrani keeles mitutükilistes ja hübriidsüsteemides (CPU+GPU/DSP) koos jagatud mälu ja SIMD vektoriseerimise plokkidega. Eeldatakse, et algtoetust OpenMP 6.0 erivõimalustele sisaldavad LLVM/Clang 20 ja GCC 15 versioonid.
OpenMP 6.0 põhimuudatused:
- Tööde (task) programeerimise protsess, mis määratleb sõltumatud programmiosad, mis võivad paralleelselt teiste osadega töötada, on lihtsustatud.
- Lisatud on võimalus käitada ülesandeid vaba agendi (free-agent) threadides, mis ei ole seotud rühmadega (teams), kes teevad paralleelseid piirkondi (parallel region, koodiplokk, mida töötatakse mitmesugustes lõimedes).
- Toetatakse ülesande graafiku (taskgraph) salvestamist, mis määratleb sõltuvusi ülesannete vahel ja ülesannete täitmise järjekorra, et suurendada edasise kordusprotsessi efektiivsust.
- Töötati välja läbinägelike ülesannete mehhanism („transparent tasks“), et lihtsustada sõltuvuste haldamist ja automaatset alamehhanismide käivitamist.
- Suurenes arvutusseadmete tugi, mida saab kasutada paralleelsete ülesannete täitmiseks (CPU, GPU, DSP jne).
- Lisatud uus massiivisüntaks, mis võimaldab kasutada käsku „workdistribute“ massiivide töötlemise jaotamiseks erinevate töösuhte vahel.
- Parandatud mälu eraldamise haldust, lihtsustades dünaamiliselt eraldatud mäluga seotud muutujate haldamist.
- Laienenud atribuutide tugi, mis määravad vaikimisi andmete jaotuse seadmete vahel.
- Lihtsustatud kood kirjutamist andmete asünkroonsete edastamiseks täiendavatele arvutusseadmetele (GPU).
- Parandatud mälu haldamist ja selle seondumist arvutusseadmetega.
- Lisatud käsk „groupprivate“, et seondada mälu teatud arvutusseadmest töötava kiirusgrupi jaoks.
- Mõnede tsüklite transformatsioonide, nagu mitme tsükli ühinemine, sisemise tsüklite järjestuse muutmine ja tsüklite pööramine, lihtsustamine.
- Uus indutseerimise (induction) operatsioon, et korraldada paralleelset töötlemist lihtsate aritmeetiliste arvutuste ja varasemate väärtuste sõltuvate kasutajaoperatsioonide tsüklites.
- Täielik toetuse lisamine programmide paralleelseks töötlemiseks, mis on kirjutatud C23 standardite (sealhulgas atribuutide süntaks), Fortran 2023 ja C++23 abil. Uute atribuutide lisamine C/C++ jaoks.
- Laiendatud salvestuse ja mälu haldamise võimalusi. Uute atribuutide lisamine selle kohta, kuidas mälu peab olema eraldatud ja kasutatud. API, et määrata ja taotleda mäluruume (memory space).
- Eemaldatud võimalused, mis on standardites OpenMP 5.0, 5.1 ja 5.2 deklareeritud aegunuks.
Allikas: opennet.ru
