Pas pas tre vjet për zhvillim, u publikua një paketë specifikimesh OpenMP 6.0 (Open Multi-Processing), e cila përcakton API dhe mënyrat e aplikimit të metodave të programimit paralel për gjuhët C, C++ dhe Fortran në sisteme me shumë bërthama dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe blloqe vektorizimi (SIMD). Parashikohet që mbështetje fillestare për disa funksionalitete të OpenMP 6.0 do të përfshihet në versionet e LLVM/Clang 20 dhe GCC 15.
Ndryshimet kryesore në OpenMP 6.0:
- Procesi i programimit të detyrave (task) është thjeshtuar, duke përcaktuar pjesë të pavarura të programit që mund të ekzekutohen paralelisht me pjesë të tjera.
- Shtuar mundësinë e ekzekutimit të detyrave në tela free-agent, që nuk janë të lidhura me grupe telash (teams), që realizojnë rajone paralele (parallel region, bllok kodi i ekzekutuar në disa tela).
- Siguruar mbështetje për ruajtjen e grafit të detyrave (taskgraph), i cili përcakton varësitë midis detyrave dhe rendin e ekzekutimit të detyrave, për të përmirësuar efikasitetin e rikthimit të ardhshëm.
- Mekanizmi i detyrave transparente («transparent tasks») është realizuar për të thjeshtuar menaxhimin e varësive dhe menaxhimin automatik të ekzekutimit të detyrave nënore.
- Zgjeruar mbështetje për pajisjet kompjuterike që mund të përdoren për ekzekutimin e detyrave paralel (CPU, GPU, DSP, etj.).
- Sintaksa e re e masave është shtuar, duke lejuar përdorimin e direktivës «workdistribute» për të ndarë përpunimin e masave midis njësive të ndryshme të punës.
- Zgjerojnë mundësitë e menaxhimit të alokimit të memories, duke thjeshtuar menaxhimin e variablave për të cilat memoria alokohet dinamikisht.
- Zgjeruar mbështetje për atributet që përcaktojnë shpërndarjen e të dhënave midis pajisjeve sipas parimit default.
- Thjeshtësuar shkrimin e kodit për transferimin asinkron të të dhënave në pajisje të tjera kompjuterike (GPU).
- Përmirësuar menaxhimi i memories dhe lidhja e saj me pajisjet kompjuterike.
- Direktiva «groupprivate» është shtuar për të lidhur memorjen me një grup rrjedhash të cilët ekzekutohen në një pajisje të caktuar llogaritëse.
- Thjeshtësuar programimin e disa llojeve të transformimeve të cikleve, si bashkimi i disa cikleve, ndryshimi i rendit të cikleve të përfshira dhe rrethimi i cikleve.
- Shtuar një operacion të ri induksioni (induction) për organizimin e paralelizimit në cikle të llogaritjeve arithmetic dhe operacioneve përdoruese që varen nga vlerat e mëparshme.
- Shtuar mbështetje të plotë për paralelizimin e programeve të shkruara duke përdorur standardet C23 (duke përfshirë sintaksën e atributeve), Fortran 2023 dhe C++23. Shtuar atribute të rinj për C/C++.
- Zgjeruar mundësitë e menaxhimit të ruajtjes dhe memories. Shtuar atribute të rinj për kontrollin e mënyrës se si duhet të alokohet dhe përdoret memoria. Shtuar API për përcaktimin dhe kërkesën e hapësirave të memories (memory space).
- Hequr mundësitë që u shpallën të vjetruara në specifikimet OpenMP 5.0, 5.1 dhe 5.2.
Burimi: opennet.ru
