Po třech letech vývoje byl zveřejněn soubor specifikací OpenMP 6.0 (Open Multi-Processing), které definují API a způsoby použití metod paralelního programování pro jazyky C, C++ a Fortran na víceprocesorových a hybridních (CPU+GPU/DSP) systémech s sdílenou pamětí a bloky vektorování (SIMD). Předpokládá se, že počáteční podpora jednotlivých funkcí OpenMP 6.0 bude zahrnuta v vydáních LLVM/Clang 20 a GCC 15.
Hlavní změny v OpenMP 6.0:
- Byl zjednodušen proces programování úloh (task), které definují nezávislé části programu, jež mohou být vykonávány paralelně s jinými částmi.
- Byla přidána možnost vykonávání úloh ve vláknech free-agent, které nejsou vázány na skupiny vláken (teams), vykonávající paralelní oblasti (parallel region, blok kódu vykonávaný v několika vláknech).
- Byla zajištěna podpora pro uchovávání grafu úloh (taskgraph), který definuje závislosti mezi úlohami a pořadí jejich vykonávání, za účelem zvýšení efektivity následného opětovného provedení.
- Byl realizován mechanismus transparentních úloh („transparent tasks“) pro zjednodušení správy závislostí a automatické řízení vykonávání podúloh.
- Byla rozšířena podpora výpočetních zařízení, která mohou být použita pro vykonávání paralelních úloh (CPU, GPU, DSP atd.).
- Byla přidána nová syntaxe polí, která umožňuje používat direktivu „workdistribute“ pro rozdělení zpracování polí mezi různými pracovními jednotkami.
- Byly rozšířeny možnosti řízení alokace paměti, což zjednodušuje správu proměnných, pro které je paměť alokována dynamicky.
- Byla rozšířena podpora atributů, které určují výchozí rozdělení dat mezi zařízení.
- Bylo zjednodušeno psaní kódu pro asynchronní přenos dat k dalším výpočetním zařízením (GPU).
- Bylo zlepšeno řízení paměti a její přidělování k výpočetním zařízením.
- Byla přidána direktiva „groupprivate“ pro přiřazení paměti k skupině vláken, které běží na určitém výpočetním zařízení.
- Bylo zjednodušeno programování některých typů transformace cyklů, jako je sloučení několika cyklů, změna pořadí vnořených cyklů a reverze cyklů.
- Byla přidána nová indukční operace (induction) pro organizaci paralelizace v cyklech jednoduchých aritmetických výpočtů a uživatelských operací závislých na předchozích hodnotách.
- Byla přidána plná podpora paralelizace programů napsaných s využitím standardů C23 (včetně syntaxe atributů), Fortran 2023 a C++23. Byly přidány nové atributy pro C/C++.
- Byly rozšířeny možnosti správy úložiště a paměti. Byly přidány nové atributy pro kontrolu toho, jak by měla být paměť alokována a používána. Byl přidán API pro určení a požadování paměťových prostorů (memory space).
- Byly odstraněny možnosti, které byly prohlášeny za zastaralé ve specifikacích OpenMP 5.0, 5.1 a 5.2.
Zdroj: opennet.ru
