After three years of development, the OpenMP 6.0 (Open Multi-Processing) specification set has been published, defining the API and methods for using parallel programming methods for the C, C++, and Fortran languages on multi-core and hybrid (CPU+GPU/DSP) systems with shared memory and vectorization units (SIMD). Initial support for individual OpenMP 6.0 features is expected to be included in LLVM/Clang 20 and GCC 15 releases.
Key changes in OpenMP 6.0:
- The process of programming tasks, which define independent parts of a program that can be executed in parallel with other parts, has been simplified.
- Added the ability to execute tasks in free-agent threads that are not tied to teams that execute parallel regions (a block of code executed in multiple threads).
- Support is provided for maintaining a taskgraph that defines the dependencies between tasks and the order in which tasks are executed, to improve the efficiency of subsequent replay.
- A mechanism of transparent tasks has been implemented to simplify dependency management and automatically manage the execution of child tasks.
- Expanded support for computing devices that can be used to perform parallel tasks (CPU, GPU, DSP, etc.).
- Added new array syntax that allows using the "workdistribute" directive to split array processing between different work units.
- Enhanced memory allocation management capabilities make it easier to manage variables for which memory is allocated dynamically.
- Expanded support for attributes that define the default distribution of data between devices.
- Simplified writing of code for asynchronous data transfer to additional computing devices (GPU).
- Improved memory management and its binding to computing devices.
- Added the "groupprivate" directive to assign memory to a group of threads running on a specific computing device.
- Programming of some types of loop transformations, such as combining multiple loops, changing the order of nested loops, and loop reversal, has been simplified.
- Added a new induction operation to organize parallelization in cycles of simple arithmetic calculations and user operations that depend on previous values.
- Added full support for parallelization of programs written using C23 (including attribute syntax), Fortran 2023 and C++23 standards. Added new attributes for C/C++.
- Expanded storage and memory management capabilities. Added new attributes to control how memory should be allocated and used. Added an API to define and query memory spaces.
- Features deprecated in the OpenMP 5.0, 5.1, and 5.2 specifications have been removed.
Source: opennet.ru
