Po troch rokoch vývoja bol zverejnený súbor špecifikácií OpenMP 6.0 (Open Multi-Processing), ktoré určujú API a spôsoby aplikácie metód paralelného programovania pre jazyky C, C++ a Fortran na viacjadrových a hybridných (CPU+GPU/DSP) systémom so zdieľanou pamäťou a blokmi vektorizácie (SIMD). Predpokladá sa, že počiatočná podpora niektorých funkcií OpenMP 6.0 bude začlenená do vydaní LLVM/Clang 20 a GCC 15.
Hlavné zmeny v OpenMP 6.0:
- Zjednodušený proces programovania úloh (task), ktoré definujú nezávislé časti programu, ktoré môžu byť vykonávané paralelne s inými časťami.
- Pridaná možnosť vykonávania úloh v prúde free-agent, ktorý nie je viazaný na tímy prúdov (teams) vykonávajúcich paralelné regióny (parallel region, blok kódu vykonávaný v niekoľkých prúdoch).
- Zabezpečená podpora ukládania grafu úloh (taskgraph), ktorý definuje závislosti medzi úlohami a poradie ich vykonávania, s cieľom zvýšiť efektívnosť následného opakovaného vykonávania.
- Realizovaný mechanizmus transparentných úloh („transparent tasks“) pre zjednodušenie správy závislostí a automatické riadenie vykonávania podradených úloh.
- Rozšírená podpora výpočtových zariadení, ktoré sa môžu používať na vykonávanie paralelných úloh (CPU, GPU, DSP atď.).
- Pridaný nový syntax pre polia, ktorý umožňuje použiť direktívu „workdistribute“ na rozdelenie spracovania polí medzi rôzne pracovné jednotky.
- Rozšírené možnosti riadenia alokácie pamäte, ktoré zjednodušujú správu premenných, pre ktoré je pamäť alokovaná dynamicky.
- Rozšírená podpora atribútov, ktoré určujú predvolené rozdelenie dát medzi zariadeniami.
- Zjednodušené písanie kódu pre asynchrónne prenosy dát na ďalšie výpočtové zariadenia (GPU).
- Vylepšené riadenie pamäte a jej priradenie k výpočtovým zariadeniam.
- Pridaná direktíva „groupprivate“ na priradenie pamäte k skupine prúdov, ktoré sa vykonávajú na konkrétnom výpočtovom zariadení.
- Zjednodušené programovanie niektorých typov transformácií cyklov, ako je zlúčenie niekoľkých cyklov, zmena poradia vnorených cyklov a reverzia cyklov.
- Pridaná nová operácia indukcie (induction) na organizáciu paralelizácie v cykloch jednoduchých aritmetických výpočtov a používateľských operácií závislých od predchádzajúcich hodnôt.
- Pridaná plná podpora paralelizácie programov napísaných v súlade so štandardmi C23 (vrátane syntaxe atribútov), Fortran 2023 a C++23. Pridané nové atribúty pre C/C++.
- Rozšírené možnosti správy úložiska a pamäte. Pridané nové atribúty na kontrolu, ako by sa mala pamäť alokovať a používať. Pridané API na určovanie a požiadanie o pamäťové priestory (memory space).
- Odstránené funkcie, ktoré boli označené za zastarané v špecifikáciách OpenMP 5.0, 5.1 a 5.2.
Zdroj: opennet.ru
