Después de tres años de desarrollo, se publica el conjunto de especificaciones OpenMP 6.0 (Open Multi-Processing), que define la API y los métodos para aplicar técnicas de programación paralela para los lenguajes C, C++ y Fortran en sistemas multinúcleo e híbridos (CPU+GPU/DSP) con memoria compartida y bloques de vectorización (SIMD). Se espera que el soporte inicial para algunas características de OpenMP 6.0 se incluya en las versiones de LLVM/Clang 20 y GCC 15.
Principales cambios en OpenMP 6.0:
- Se simplifica el proceso de programación de tareas (task), que definen partes independientes del programa que pueden ejecutarse en paralelo con otras secciones.
- Se añade la posibilidad de ejecutar tareas en hilos de agente libre, no vinculados a grupos de hilos (teams), que ejecutan regiones paralelas (parallel region, un bloque de código ejecutado en varios hilos).
- Se garantiza el soporte para la conservación del gráfico de tareas (taskgraph), que define las dependencias entre tareas y el orden de ejecución de las mismas, para mejorar la eficiencia de la posterior reproducción.
- Se implementa un mecanismo de tareas transparentes («transparent tasks») para facilitar la gestión de dependencias y la gestión automática de la ejecución de tareas hijas.
- Se amplía el soporte para dispositivos computacionales que pueden utilizarse para ejecutar tareas paralelas (CPU, GPU, DSP, etc.).
- Se añade nueva sintaxis para arrays, permitiendo utilizar la directiva «workdistribute» para dividir el procesamiento de arrays entre diferentes unidades de trabajo.
- Se amplían las capacidades de gestión de la asignación de memoria, simplificando la gestión de variables para las que se asigna memoria de manera dinámica.
- Se amplía el soporte para atributos que definen la distribución de datos entre dispositivos por defecto.
- Se simplifica la escritura de código para la transmisión asíncrona de datos a dispositivos computacionales adicionales (GPU).
- Se mejora la gestión de memoria y su asignación a dispositivos computacionales.
- Se añade la directiva «groupprivate» para asignar memoria a un grupo de hilos que se ejecutan en un dispositivo computacional específico.
- Se simplifica la programación de algunos tipos de transformación de bucles, como la fusión de varios bucles, el cambio del orden de bucles anidados y la reversión de bucles.
- Se ha añadido una nueva operación de inducción (induction) para la organización de la paralelización en ciclos de cálculos aritméticos simples y operaciones de usuario que dependen de valores anteriores.
- Se ha añadido soporte completo para la paralelización de programas escritos utilizando los estándares C23 (incluido el sintaxis de atributos), Fortran 2023 y C++23. Se han añadido nuevos atributos para C/C++.
- Se han ampliado las capacidades de gestión del almacenamiento y la memoria. Se han añadido nuevos atributos para controlar cómo se debe asignar y utilizar la memoria. Se ha añadido una API para definir y solicitar espacios de memoria (memory space).
- Se han eliminado las características declaradas obsoletas en las especificaciones OpenMP 5.0, 5.1 y 5.2.
Fuente: opennet.ru
