OpenACC

OpenACC (Para Aceleradores Abiertos) es un estándar de programación para la informática paralela desarrollada por Cray, CAPS, Nvidia y PGI. El estándar está diseñado para simplificar la programación paralela de sistemas heterogéneos de CPU/GPU.[1]​ Al igual que en OpenMP, OpenACC es un estándar de programación donde el programador de C, C++ o Fortran introduce directivas del compilador para acelerar el código.

En ISC'12 OpenACC fue demostrado que trabaja en aceleradores Nvidia, AMD y Intel, sin datos sobre su rendimiento.[2]

Versión 2.5 de la especificación fue publicada en octubre del 2015.[3]


El modelo de ejecución de OpenAcc permite a los usuarios tener cuatro niveles de paralelismo. Estos niveles de paralelismo brindan a los programadores la flexibilidad para expresar y explotar diferentes formas de concurrencia en sus aplicaciones, lo que les permite aprovechar al máximo los recursos de los sistemas aceleradores y mejorar el rendimiento de sus aplicaciones paralelas:

  • Paralelismo de datos: Este nivel de paralelismo se centra en la ejecución simultanea de operaciones en diferentes conjuntos de datos. En OpenACC, el paralelismo de datos se logra utilizando directivas pragma para dividir los bucles y distribuir las iteraciones entre los hilos de ejecución en los aceleradores.
  • Paralelismo de tares: Admite el paralelismo de tareas que permite la ejecución concurrente de diferentes partes del código que no están necesariamente vinculadas a bucles. Los programadores pueden utilizar directivas pragma para identificar regiones de código que pueden ejecutarse de forma independiente y paralela.
  • Paralelismo de funciones: En este nivel, las funciones pueden ser paralelizadas, permitiendo que diferentes partes de una función sean ejecutadas en paralelo en los aceleradores
  • Paralelismo de datos y tareas anidadas: Admite la anidación de paralelismo de datos y tareas, lo que permite la creación de jerarquías de paralelismo más complejas para optimizar el rendimiento de las aplicaciones.

Se puede decir que es un herramienta de código para procesar tareas con dos partes: una forma secuencial por la CPU y partes que tienen funciones de cómputo intensivas, las cuales ameritan mayor procesamiento por parte de la GPU.

Historia

Alrededor del 2010, Los vendedores de compiladores empezaron a buscar directivas para las GPUs para simplificar la forma de programar GPU mediante el compilador. En sus inicios, OpenACC pretendía ser para todo tipo de aceleradores. Sin embargo, terminó soportando solo GPU de Nvidia.

OpenMP, que es un enfoque similar a OpenACC, tiene el objetivo de admitir todos los diferentes tipos de aceleradores. El estándar OpenACC fue lanzado en noviembre de 2011 en la conferencia Súper computación.[4]

Fue desarrollado por un grupo de compañías PGI, CAPS, NVDIA y CRAY con ideas muy similares a OpenMP. OpenACC 1.0 fue la primera versión y fue lanzada en noviembre de 2011, centrado únicamente en directivas de compilación para aceleradores, un enfoque descriptivo de la programación paralela con la portabilidad del rendimiento como una consideración primordial.[5]

Posteriormente, en 2013 aparece la versión 2.0, que brinda un mejor soporte a las estructuras de datos complejas. En los siguientes años se llega hasta la versión 2.7 (2018) que solucionan errores a versiones anteriores. Finalmente en 2019 llega la versión 3.0, en 2020 la versión 3.1 y la 3.2 en 2021, que es la más reciente.

La evolución de OpenACC ha sido fundamental para su alineación con los requerimientos dinámicos de la computación paralela y heterogénea. Cada versión ha aportado avances significativos, en sintonía con la progresión de la tecnología de hardware y las necesidades de los programadores. Por ejemplo, la versión 2.0, lanzada en el año 2013, marcó un salto cualitativo al mejorar el soporte para estructuras de datos más complejas, simplificando la gestión de aplicaciones avanzadas. Posteriormente, las versiones 2.5 y 2.7, se enfocaron en la ampliación de la compatibilidad con diferentes arquitecturas y en la resolución de errores, respectivamente. Con la llegada de la versión 3.0 en el año 2019 y sus sucesoras (las versiones 3.1 y 3.2), OpenACC dio pasos importantes hacia el incremento de la eficiencia y la flexibilidad, integrando funcionalidades avanzadas para mejorar el rendimiento en la computación paralela. Estos desarrollos reflejan el compromiso constante de OpenACC con la innovación y adaptación, asegurando su pertinencia y eficacia en un panorama tecnológico en constante cambio.

Empresas relacionadas

Con el propósito de hacer las cosas más fáciles para que los programadores utilicen las ventajas de la computación paralela, NVIDIA junto a Cray Inc, The Portland Group (PGI) y CAPS Enterprise anunciaron el estándar de programación paralela denominado OpenACC.

NVIDIA

En 1993 fue fundada por Jensen Huang, Chris Malachowsky y Curtis Priem. Para que las directivas de OpenACC se habiliten a la línea de comando del compilador, de manera predeterminada; los compiladores NVIDIA HPC paralelizarán y descargarán las regiones OpenACC a las GPU NVIDIA.

NVIDIA es uno de los principales impulsores de OpenACC pues proporciona hardware, software y herramientas de desarrollo para aceleradores incluidas las GPUs, además que ha integrado el soporte de OpenACC en sus compiladores y herramientas de desarrollo CUDA.

Cray Inc

En 1972, el diseñador de ordenadores Seymour Cray, fundó Cray Research, Inc. “La tecnología Cray está diseñada para permitir que los científicos e ingenieros logren avances notables acelerando el rendimiento, mejorando la eficiencia y ampliando las capacidades de sus aplicaciones más exigentes” (NVIDIA, 2011).

Cray Incorporation ha estado involucrada en el desarrollo y la optimización de aplicaciones para sistemas paralelos, incluidos los que utilizan OpenACC.

The Portland Group (PGI)

Fundado en 1989, “es el principal proveedor de herramientas y compiladores paralelos de Fortran, C y C++ de alto rendimiento para estaciones de trabajo, servidores y clústeres basados en procesadores x64 de Intel y AMD, y aceleradores de GPU de NVIDIA” (NVIDIA, 2011). Los compiladores de PGI incorporan capacidades de optimización global, vectorización, canalización de software y paralelización de memoria compartida dirigidas a procesadores Intel y AMD.

Esta empresa fue uno de los primeros proveedores en ofrecer compiladores y herramientas de desarrollo con soporte para OpenACC. Sus herramientas permiten a los programadores escribir código paralelo utilizando la especificación OpenACC y compilarlo para ejecutarlo en aceleradores.

Hewlett Packard Enterprise (HPE)

Esta empresa ha estado involucrada en el desarrollo y la adopción de tecnologías de computación de alto rendimiento, incluido OpenACC. La empresa ha proporcionado soporte y herramientas para el desarrollo de aplicaciones paralelas.

IBM

IBM ha estado activamente involucrado en la investigación y el desarrollo de tecnologías de computación de alto rendimiento, incluidas las relacionadas con OpenACC. La empresa ha explorado el uso de aceleradores en sus sistemas y ha trabajado en la optimización de aplicaciones para estos entornos.

CAPS Enterprise

Es un importante proveedor de soluciones orientadas a la migración e implementación de aplicaciones en procesadores de muchos núcleos.

Soporte de compilador

Soporte de OpenACC está disponible en compiladores comerciales de PGI (desde versión 12.6), Cray, y CAPS.[2][6][7]

IDEs

Para los entornos de desarrollo integrados se debe poder trabajar con C/C++ y/o Fortran, lenguajes con los que trabaja OpenACC. Los compiladores de OpenACC están diseñados y disponibles para su descarga desde múltiples proveedores y organizaciones académicas, los cuales son los siguientes.[8]

Visual Studio Code (VS Code)

Aunque no es un IDE dedicado a la programación en OpenACC de forma predeterminada, VS Code es altamente personalizable con una amplia gama de extensiones disponibles. Se puede configurar VS Code para usar compiladores OpenACC mediante la personalización de las tareas de compilación y el uso de extensiones que mejoren el soporte para C/C++ o Fortran, facilitando así el desarrollo de aplicaciones OpenACC

Eclipse

Eclipse es un IDE ampliamente utilizado que puede ser configurado para trabajar con diferentes compiladores y lenguajes de programación, incluido OpenACC, a través del uso de plugins y la configuración personalizada del entorno de desarrollo.

CLion

Este IDE de JetBrains para C y C++ puede ser configurado para trabajar con el compilador de NVIDIA HPC SDK y otros compiladores que soporten OpenACC, permitiendo el desarrollo de aplicaciones paralelas

NetBeans

NetBeans es otro IDE que admite C/C++ y Fortran a través de plugins y configuraciones, lo que permite integrar herramientas y compiladores que soporten OpenACC.

Compiladores comerciales

Hewlett Packard, SDK de HPC de NVIDIA y Centro Nacional de Supercomputación de Wuxi.

Compiladores de código abierto

CCG 10.

Compiladores académicos

Proyecto compilador Omni, Riken (Universidad de Tsukuba), OpenARC (Laboratorio nacional de Oak Ridge), OpenUH (Universidad de Houston, Universidad de Stony Brook) y ROSEACC (universidad de Delaware).

Uso

En una manera similar a OpenMP 3.x En sistemas homogéneos o el más antiguo OpenHMPP, el modo primario de programar en OpenACC es directivas.[9]​ Las especificaciones también incluyen una biblioteca de ejecución que define varias funciones de soporte. Para explotarlas, el usuario tendría que incluir "openacc.h" En C o "openacc_lib.h" En Fortran; y entonces llamar la función acc_init().[10]

Por otra parte, OpenACC se utiliza en la programación de aplicaciones científicas y de ingeniería que requieren de un alto rendimiento computacional.

Campos de Utilización

OpenACC beneficia una amplia gama de programadores en los campos de química, biología, física, análisis de datos. En general, es cuando se necesita procesar grandes cantidades de datos y analizarlos de forma rápida como la predicción del clima, la cual tiene muchos datos de entrada al sistema y deben ser procesados rápidamente para llegar a una predicción útil sin que colapse el sistema de cómputo que se está usando.

Ciencias de la vida y bioinformática

Las simulaciones biomoleculares, el análisis genómico y otros tipos de análisis de datos en bioinformática pueden requerir una gran cantidad de cálculos

Física y química computacional

La simulación de procesos físicos y químicos, incluyendo la dinámica molecular y la modelización de materiales, puede ser extremadamente exigente en términos de cálculo.

Meteorología y cambio climático

Los modelos climáticos y meteorológicos se benefician significativamente de la aceleración proporcionada por OpenACC, ya que permite realizar simulaciones más detalladas del clima y sus variaciones a lo largo del tiempo.

Astronomía y astrofísica

El análisis de grandes conjuntos de datos astronómicos y la simulación de fenómenos cósmicos, como la formación de estrellas y galaxias o la dinámica de agujeros negros, pueden mejorarse con el uso de OpenACC para acelerar los cálculos necesarios.

Ingeniería y simulación de fluidos

La dinámica de fluidos computacionales es otro campo que se beneficia enormemente de la computación acelerada. OpenACC se utiliza para optimizar las simulaciones de flujo de fluidos, transferencia de calor y otros fenómenos relacionados.

Finanzas

OpenACC puede acelerar las simulaciones de riesgo y los modelos de precios de opciones, permitiendo a los analistas y a las instituciones financieras obtener resultados más rápidamente, lo que es vital para la toma de decisiones en mercados volátiles.

Energía

La investigación de energías renovables y simulación de reactores nucleares son campos que también aprovechan las capacidades de OpenACC para mejorar la eficiencia y la seguridad de estas tecnologías.


Véase también

  • OpenCL
  • OpenMP

Referencias

  1. «Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing». The Inquirer. 4 de noviembre de 2011. Archivado desde el original el 17 de noviembre de 2011. Consultado el 26 de julio de 2016. 
  2. a b «OpenACC Group Reports Expanding Support for Accelerator Programming Standard». HPCwire. 20 de junio de 2012. Archivado desde el original el 23 de junio de 2012. Consultado el 14 de enero de 2014. 
  3. «OpenACC Standards Group Announces Release of the 2.5 Specification; Member Vendors Add Support for ARM & x86 as Parallel Devices |». Archivado desde el original el 26 de julio de 2016. Consultado el 26 de julio de 2016.  Texto «https://archive.today/20160726113653/http://www.openacc.org/content/openacc-standards-group-announces-release-25-specification-member-vendors-add-support-arm» ignorado (ayuda); Parámetro desconocido |bot= ignorado (ayuda)
  4. The Past, Present, and Future of OpenACC, consultado el 27 de mayo de 2022 .
  5. Cedrik (17 de noviembre de 2011). «NVIDIA, Cray, PGI y CAPS, revelan “OpenACC”, estándar de programación para computación paralela». Consultado el 27 de mayo de 2022. 
  6. «OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators». Xbit laboratories. 16 de noviembre de 2011. Archivado desde el original el 16 de enero de 2014. Consultado el 14 de enero de 2014. 
  7. «CAPS Announcing Full Support for OpenACC 2.0 in its Compilers». HPCwire. 14 de noviembre de 2013. Consultado el 14 de enero de 2014. 
  8. «NVIDIA, Cray, PGI, CAPS Unveil 'OpenACC' Programming Standard for Parallel Computing». NVIDIA Newsroom (en inglés estadounidense). Consultado el 27 de mayo de 2022. 
  9. «Easy GPU Parallelism with OpenACC». Dr.Dobb's. 11 de junio de 2012. Consultado el 14 de enero de 2014. 
  10. «OpenACC API QuickReference Card, version 1.0». NVidia. noviembre de 2011. Consultado el 14 de enero de 2014. 
Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q4045865
  • Wd Datos: Q4045865