Efter tre Ärs utveckling har en uppsÀttning specifikationer för OpenMP 6.0 (Open Multi-Processing) publicerats, vilket definierar API:er och metoder för tillÀmpning av parallell programmering för sprÄk som C, C++ och Fortran pÄ flerprocessor- och hybrid (CPU+GPU/DSP) system med delat minne och SIMD-vektorisering. Det förvÀntas att inledande stöd för vissa funktioner i OpenMP 6.0 kommer att ingÄ i versionerna av LLVM/Clang 20 och GCC 15.
Huvudsakliga förÀndringar i OpenMP 6.0:
- Processen för programmering av uppgifter (task), som definierar oberoende delar av programmet som kan köras parallellt med andra delar, har förenklats.
- Möjligheten att köra uppgifter i free-agent-trÄdar, som inte Àr kopplade till trÄdgrupper (teams), som utför parallella regioner (parallel region, en kodblock som exekveras i flera trÄdar) har lagts till.
- Stöd för att spara taskgrafen (taskgraph), som definierar beroenden mellan uppgifter och ordningen för att utföra uppgifter, har implementerats för att öka effektiviteten vid efterföljande reproduktion.
- En mekanism för transparenta uppgifter ("transparent tasks") har implementerats för att förenkla hanteringen av beroenden och automatisk hantering av exekveringen av underordnade uppgifter.
- Stödet för berÀkningsenheter som kan anvÀndas för att utföra parallella uppgifter (CPU, GPU, DSP osv.) har utvidgats.
- En ny syntax för arrayer har lagts till, vilket möjliggör anvÀndning av direktivet "workdistribute" för att dela upp bearbetningen av arrayer mellan olika arbetsenheter.
- Möjligheterna att hantera minnesallokering har förbÀttrats, vilket förenklar hanteringen av variabler som allokeras dynamiskt.
- Stödet för attribut som definierar standarddatafördelning mellan enheter har utvidgats.
- Kodskrivningen för asynkrona datatransfer till ytterligare berÀkningsenheter (GPU) har förenklats.
- Minneshanteringen och dess bindning till berÀkningsenheter har förbÀttrats.
- Direktivet "groupprivate" har lagts till för att binda minnet till en trÄdgrupp som körs pÄ en specifik berÀkningsenhet.
- Programmeringen av vissa typer av looptransformationer, som sammanslagning av flera loopar, Àndring av ordningen av inbÀddade loopar och reversering av loopar, har förenklats.
- En ny induktionsoperation (induction) har lagts till för att möjliggöra parallellisering i loopar för enkla aritmetiska berÀkningar och anvÀndaroperationer som beror pÄ tidigare vÀrden.
- Fullt stöd för parallellisering av program skrivna med standarder som C23 (inklusive syntax för attribut), Fortran 2023 och C++23 har lagts till. Nya attribut för C/C++ har introducerats.
- Funktionerna för lagrings- och minneshantering har utökats. Nya attribut har lagts till för att kontrollera hur minnet ska allokeras och anvÀndas. Ett API för att definiera och begÀra minnesutrymmen har lagts till.
- Funktioner som har förklarats som förÄldrade i specifikationerna för OpenMP 5.0, 5.1 och 5.2 har tagits bort.
KĂ€lla: opennet.ru
