Na drie jaar ontwikkeling is de set specificaties OpenMP 6.0 (Open Multi-Processing) gepubliceerd, die de API en methoden van parallel programmeren voor de talen C, C++ en Fortran op multicore en hybride (CPU+GPU/DSP) systemen met gedeeld geheugen en SIMD-vectorisatieomgevingen definiƫren. Er wordt verwacht dat initiƫle ondersteuning voor specifieke functies van OpenMP 6.0 zal worden opgenomen in de uitgaven van LLVM/Clang 20 en GCC 15.
Belangrijkste wijzigingen in OpenMP 6.0:
- Het proces voor het programmeren van taken (tasks), die onafhankelijke delen van een programma definiƫren die parallel met andere delen kunnen worden uitgevoerd, is vereenvoudigd.
- De mogelijkheid is toegevoegd om taken uit te voeren in free-agent threads, die niet zijn gebonden aan thread-groepen (teams) die parallelle regio's (parallel region, een blok code dat in meerdere threads wordt uitgevoerd) uitvoeren.
- Er is ondersteuning geboden voor het opslaan van een taakgrafiek (task graph), die afhankelijkheden tussen taken en de volgorde van uitvoering definieert, om de efficiƫntie van latere herhalingen te verbeteren.
- Een mechanisme voor transparante taken ("transparent tasks") is geĆÆmplementeerd om het beheer van afhankelijkheden te vereenvoudigen en de uitvoering van sub-taken automatisch te beheren.
- De ondersteuning voor computerapparaten die gebruikt kunnen worden voor het uitvoeren van parallelle taken (CPU, GPU, DSP, enz.) is uitgebreid.
- Een nieuwe syntaxis voor arrays is toegevoegd, die het mogelijk maakt om de "workdistribute"-directive te gebruiken voor het verdelen van de verwerking van arrays tussen verschillende werk-eenheden.
- De mogelijkheden voor geheugenallocatiebeheer zijn uitgebreid, waardoor het beheer van variabelen waarvoor geheugen dynamisch wordt toegewezen, wordt vereenvoudigd.
- De ondersteuning voor attributen die de standaard gegevensverdeling tussen apparaten definiƫren, is uitgebreid.
- Het schrijven van code voor asynchrone gegevensoverdracht naar extra rekentoestellen (GPU) is vereenvoudigd.
- Het geheugenbeheer en de toewijzing ervan aan rekentoestellen zijn verbeterd.
- Er is een directive "groupprivate" toegevoegd voor het toewijzen van geheugen aan een groep threads die op een specifiek rekentoestel worden uitgevoerd.
- Het programmeren van bepaalde soorten lustransformaties, zoals het samenvoegen van meerdere lussen, het wijzigen van de volgorde van geneste lussen en het omkeren van lussen, is vereenvoudigd.
- Er is een nieuwe inductie-operatie (induction) toegevoegd voor het organiseren van parallelle verwerking in loops van eenvoudige rekenkundige operaties en gebruikersoperaties die afhankelijk zijn van eerdere waarden.
- Volledige ondersteuning voor het parallel verwerken van programma's geschreven met de standaarden C23 (inclusief de syntaxis van attributen), Fortran 2023 en C++23 is toegevoegd. Nieuwe attributen voor C/C++ zijn toegevoegd.
- De mogelijkheden voor het beheren van opslag en geheugen zijn uitgebreid. Nieuwe attributen zijn toegevoegd voor controle over hoe geheugen moet worden toegewezen en gebruikt. Een API is toegevoegd voor het definiƫren en aanvragen van geheugenspecifieke ruimtes (memory space).
- Functionaliteiten die als verouderd zijn gemarkeerd in de specificaties van OpenMP 5.0, 5.1 en 5.2 zijn verwijderd.
Bron: opennet.ru
