Efter tre års udvikling er sæt specifikationer for OpenMP 6.0 (Open Multi-Processing) offentliggjort, som definerer API og metoder til anvendelse af parallelt programmering for C, C++ og Fortran på flerkernede og hybrid (CPU+GPU/DSP) systemer med delt hukommelse og vektorisering (SIMD). Det forventes, at den indledende støtte til nogle funktioner i OpenMP 6.0 vil blive inkluderet i udgivelserne af LLVM/Clang 20 og GCC 15.
Væsentlige ændringer i OpenMP 6.0:
- Processen til programmering af opgaver (task), der definerer uafhængige dele af programmet, som kan køre parallelt med andre dele, er blevet forenklet.
- Muligheden for at udføre opgaver i frie tråde (free-agent), der ikke er bundet til grupper af tråde (teams), der kører parallelle regioner (parallel region, et kodeblok, der udføres i flere tråde).
- Understøttelsen af opbevaring af opgavernes graf (taskgraph), der definerer afhængigheder mellem opgaver og rækkefølgen for udførelse af opgaver, er blevet sikret for at øge effektiviteten af efterfølgende reproduktion.
- Mekanismen for gennemsigtige opgaver ('transparent tasks') er implementeret for at forenkle håndteringen af afhængigheder og automatisk styre udførelsen af underopgaver.
- Understøttelsen af beregningsenheder, der kan anvendes til at udføre parallelle opgaver (CPU, GPU, DSP osv.), er blevet udvidet.
- Der er tilføjet en ny syntaks for arrays, der muliggør anvendelsen af direktivet 'workdistribute' til at fordele behandlingen af arrays mellem forskellige arbejdsenheder.
- Mulighederne for at styre hukommelsesallokering er blevet udvidet, hvilket forenkler styringen af variabler, for hvilke hukommelsen allokeres dynamisk.
- Støtten til attributter, der definerer standard datafordeling mellem enheder, er blevet udvidet.
- Det er blevet lettere at skrive kode til asynkrone dataoverførsler til yderligere beregningsenheder (GPU).
- Forvaltningen af hukommelse og dens binding til beregningsenheder er blevet forbedret.
- Direktivet 'groupprivate' er tilføjet for at knytte hukommelsen til en gruppe tråde, der udføres på en bestemt beregningsenhed.
- Programmering af visse typer looptransformationer, såsom sammensætning af flere loops, ændring af rækkefølgen af indlejrede loops og reversering af loops, er blevet forenklet.
- En ny induktionsoperation (induction) er blevet tilføjet til organisering af parallelisering i løkker med enkle aritmetiske beregninger og brugerdefinerede operationer, der afhænger af tidligere værdier.
- Der er tilføjet fuld støtte til parallelisering af programmer skrevet med standarderne C23 (inklusive syntaks for attributter), Fortran 2023 og C++23. Nye attributter er tilføjet til C/C++.
- Mulighederne for styring af lager og hukommelse er blevet udvidet. Nye attributter er tilføjet til kontrol over, hvordan hukommelsen skal tildeles og anvendes. En API er blevet tilføjet til at bestemme og anmode om hukommelsesrum (memory space).
- Muligheder, der er blevet erklæret forældede i specifikationerne OpenMP 5.0, 5.1 og 5.2, er blevet fjernet.
Kilde: opennet.ru
