OpenACC (por aceleradores abiertos ) es un estándar de programación para computación paralela desarrollado 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 , el programador puede anotar el código fuente de C , C++ y Fortran para identificar las áreas que deben acelerarse mediante directivas del compilador y funciones adicionales. [ 2 ] Al igual que OpenMP 4.0 y versiones posteriores, OpenACC puede dirigirse tanto a las arquitecturas de CPU como de GPU y ejecutar código computacional en ellas.
Los miembros de OpenACC han trabajado como miembros del grupo de estándares OpenMP para fusionarse con la especificación OpenMP y crear una especificación común que extienda OpenMP para admitir aceleradores en una futura versión de OpenMP. [ 3 ] [ 4 ] Estos esfuerzos dieron como resultado un informe técnico [ 5 ] para comentarios y debate programado para incluir la Conferencia anual de Supercomputación (noviembre de 2012, Salt Lake City ) y para abordar la compatibilidad con aceleradores que no son de Nvidia con aportaciones de los proveedores de hardware que participan en OpenMP. [ 6 ]
En ISC'12 se demostró que OpenACC funciona en aceleradores de Nvidia , AMD e Intel , sin datos de rendimiento. [ 7 ]
El 12 de noviembre de 2012, en la conferencia SC12, se presentó un borrador de la especificación OpenACC versión 2.0. [ 8 ] Entre las nuevas capacidades sugeridas se incluyen nuevos controles sobre el movimiento de datos (como un mejor manejo de datos no estructurados y mejoras en la compatibilidad con memoria no contigua), y compatibilidad con llamadas a funciones explícitas y compilación separada (lo que permite la creación y reutilización de bibliotecas de código acelerado). OpenACC 2.0 se lanzó oficialmente en junio de 2013. [ 9 ]
La versión 2.5 de la especificación se publicó en octubre de 2015, [ 10 ] mientras que la versión 2.6 se publicó en noviembre de 2017. [ 11 ] Posteriormente, la versión 2.7 se publicó en noviembre de 2018. [ 12 ]
La última versión es la versión 3.3, que se lanzó en noviembre de 2022. [ 13 ]
Soporte del compilador
El soporte para OpenACC está disponible en compiladores comerciales de PGI (a partir de la versión 12.6) y (solo para hardware Cray) Cray. [ 7 ] [ 14 ]
OpenUH [ 15 ] es un compilador OpenACC de código abierto basado en Open64 que admite C y FORTRAN, desarrollado por el grupo HPCTools de la Universidad de Houston .
OpenARC [ 16 ] es un compilador C de código abierto desarrollado en el Laboratorio Nacional de Oak Ridge para admitir todas las características de la especificación OpenACC 1.0. Un compilador experimental [ 17 ] de código abierto, accULL, es desarrollado por la Universidad de La Laguna ( solo lenguaje C ). [ 18 ]
Omni Compiler [ 19 ] [ 20 ] es un compilador de código abierto desarrollado en el Laboratorio HPCS de la Universidad de Tsukuba y el Equipo de Investigación de Entornos de Programación del Centro RIKEN para Ciencias Computacionales, Japón, compatible con OpenACC, XcalableMP y XcalableACC combinando XcalableMP y OpenACC.
IPMACC [ 21 ] es un compilador C de código abierto desarrollado por la Universidad de Victoria que traduce OpenACC a CUDA, OpenCL e ISPC. Actualmente, solo se admiten las siguientes directivas: data , kernels , loop y cache .
El soporte de GCC para OpenACC tardó en llegar. [ 22 ] En septiembre de 2013, Samsung anunció una implementación orientada a GPU que traducía el código anotado en OpenACC 1.1 a OpenCL . [ 17 ] Dos meses después, se anunció una implementación "real", esta vez de NVIDIA y basada en OpenACC 2.0. [ 23 ] Esto generó cierta controversia, ya que la implementación solo apuntaría al lenguaje ensamblador PTX de NVIDIA , para el cual no existía ningún ensamblador o entorno de ejecución de código abierto. [ 24 ] [ 25 ] El soporte experimental para OpenACC/PTX finalmente se incluyó en GCC a partir de la versión 5.1. Las series de lanzamientos GCC6 y GCC7 incluyen una implementación mucho mejorada de la especificación OpenACC 2.0a. [ 26 ] [ 27 ] GCC 9.1 ofrece soporte casi completo para OpenACC 2.5. [ 28 ]
Uso
De forma similar a OpenMP 3.x en sistemas homogéneos o al anterior OpenHMPP , el modo principal de programación en OpenACC son las directivas. [ 29 ] Las especificaciones también incluyen una biblioteca de tiempo de ejecución que define varias funciones de soporte. Para utilizarlas, el usuario debe incluir "openacc.h" en C o "openacc_lib.h" en Fortran; [ 30 ] y luego llamar a la función acc_init() .
Directivas
OpenACC define una extensa lista de pragmas (directivas), [ 31 ] por ejemplo:
#pragma acc parallel #pragma acc kernelsAmbos se utilizan para definir núcleos de computación paralela que se ejecutarán en el acelerador, utilizando semánticas distintas [ 32 ] [ 33 ].
#pragma acc dataEs la directiva principal para definir y copiar datos hacia y desde el acelerador.
#pragma acc loopSe utiliza para definir el tipo de paralelismo en una parallelregión kernels.
#pragma acc cache #pragma acc update #pragma acc declare #pragma acc waitAPI de tiempo de ejecución
También se definen algunas funciones de API en tiempo de ejecución : acc_get_num_devices(), acc_set_device_type(), acc_get_device_type(), acc_set_device_num(), acc_get_device_num(), acc_async_test(), acc_async_test_all(), acc_async_wait(), acc_async_wait_all(), acc_init(), acc_shutdown(), acc_on_device(), acc_malloc(), acc_free().
OpenACC generalmente se encarga de la organización del trabajo para el dispositivo de destino; sin embargo, esto se puede modificar mediante el uso de grupos y trabajadores. Un grupo está formado por trabajadores y opera sobre varios elementos de procesamiento (al igual que un grupo de trabajo en OpenCL).
Véase también
Referencias
- ↑ "Nvidia, Cray, PGI y CAPS lanzan el estándar de programación 'OpenACC' para computación paralela" . The Inquirer . 4 de noviembre de 2011. Archivado del original el 17 de noviembre de 2011.
- ↑ "Estándar OpenACC versión 2.5" (PDF) . OpenACC.org . Consultado el 2 de junio de 2017 .
- ↑ "¿Cómo se relaciona la API de OpenACC con la API de OpenMP?" . OpenACC.org . Consultado el 14 de enero de 2014 .
- ↑ "¿Cómo se originaron las especificaciones de OpenACC?" . OpenACC.org . Consultado el 14 de enero de 2014 .
- ↑ "El consorcio OpenMP publica su primer informe técnico" . OpenMP.org . 5 de noviembre de 2012. Consultado el 14 de enero de 2014 .
- ↑ "OpenMP en SC12" . OpenMP.org . 29 de agosto de 2012. Consultado el 14 de enero de 2014 .
- 1 2 "El grupo OpenACC informa de la ampliación del soporte para el estándar de programación de aceleradores" . HPCwire . 20 de junio de 2012. Archivado del original el 23 de junio de 2012. Recuperado el 14 de enero de 2014 .
- ↑ "OpenACC Versión 2.0 Publicada para comentarios" . OpenACC.org . 12 de noviembre de 2012. Consultado el 14 de enero de 2014 .
- ↑ "Especificación OpenACC 2.0 | www.openacc.org" . www.openacc.org . Archivado del original el 4 de abril de 2016. Consultado el 23 de marzo de 2016 .
- ↑ "El Grupo de Estándares OpenACC anuncia el lanzamiento de la especificación 2.5; los proveedores miembros añaden soporte para ARM y x86 como dispositivos paralelos | www.openacc.org" . www.openacc.org . Consultado el 22 de marzo de 2016 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "¿Qué hay de nuevo en OpenACC 2.6? | OpenACC" . www.openacc.org . Consultado el 1 de mayo de 2018 .
- ↑ "¡Novedades de OpenACC 2.7! | OpenACC" . www.openacc.org . Consultado el 7 de enero de 2019 .
- ↑ "La interfaz de programación de aplicaciones OpenACC©" (PDF) . OpenACC . Noviembre de 2022. Archivado (PDF) del original el 25 de enero de 2023. Recuperado el 24 de febrero de 2025 .
- ↑ "Estándar OpenACC para ayudar a los desarrolladores a aprovechar los aceleradores de computación GPU" . Laboratorios Xbit . 16 de noviembre de 2011. Archivado del original el 16 de enero de 2014. Consultado el 14 de enero de 2014 .
- ↑ "Compilador OpenUH" . Archivado del original el 25 de enero de 2014. Consultado el 4 de marzo de 2014 .
- ↑ "Compilador OpenARC" . Archivado del original el 4 de noviembre de 2014. Consultado el 4 de noviembre de 2014 .
- 1 2 Larabel, Michael (30 de septiembre de 2013). "Se publica soporte para GCC para OpenACC en la GPU" . Phoronix .
- ↑ "accULL La implementación de investigación de OpenACC" . Consultado el 14 de enero de 2014 .
- ↑ "Omni Compiler" . omni-compiler.org . Consultado el 18 de noviembre de 2019 .
- ↑ Compilador Omni para programas C y Fortran con directivas XcalableMP y OpenACC: omni-compiler/omni-compiler , omni-compiler, 17/10/2019 , consultado el 17/11/2019.
- ↑ "Compilador IPMACC" . GitHub . Consultado el 31 de enero de 2017 .
- ↑ Larabel, Michael (4 de diciembre de 2012). "OpenACC todavía no es amado por los compiladores de código abierto" . Phoronix .
- ↑ Larabel, Michael (14 de noviembre de 2013). "OpenACC 2.0 con soporte para GPU llegará a GCC" . Phoronix .
- ↑ Larabel, Michael (15 de noviembre de 2013). "NVIDIA y Mentor Graphics podrían perjudicar a GCC" . Phoronix .
- ↑ Larabel, Michael (21 de noviembre de 2013). "Continúan las disputas internas sobre OpenACC en GCC" . Phoronix .
- ↑ "OpenACC - Wiki de GCC" .
- ↑ Schwinge, Thomas (15 de enero de 2015). "Combinar el conjunto actual de cambios de OpenACC de la rama gomp-4_0" . gcc (Lista de correo) . Recuperado el 15 de enero de 2015 a través de gcc.gnu.org.
- ↑ Jelinek, Jakub (3 de mayo de 2019). "GCC 9.1 lanzado" . LWN.net .
- ↑ "Paralelismo sencillo de GPU con OpenACC" . Dr. Dobb's . 11 de junio de 2012. Consultado el 14 de enero de 2014 .
- ↑ "Tarjeta de referencia rápida de la API de OpenACC, versión 1.0" (PDF) . NVidia . Noviembre de 2011. Consultado el 14 de enero de 2014 .
- ↑ "Estándar OpenACC versión 2.0" (PDF) . OpenACC.org . Consultado el 14 de enero de 2014 .
- ↑ "Núcleos OpenACC y construcciones paralelas" . PGI insider . Agosto de 2012. Consultado el 14 de enero de 2014 .
- ↑ "Sección paralela de OpenACC frente a núcleos" . Base de conocimientos de CAPS Entreprise . 3 de enero de 2013. Archivado del original el 16 de enero de 2014. Consultado el 14 de enero de 2014 .
Enlaces externos
- Página principal | OpenACC
- Ejemplo de uso de Nvidia: parte 1 , parte 2
- OpenACC-standard.org: Guía de programación y mejores prácticas de OpenACC (junio de 2015)
- Nvidia: Guía de inicio rápido de OpenACC para compiladores y herramientas PGI (2018).
- Stéphane Ethier: Introducción a la programación de GPU con OpenACC , Curso intensivo de computación para la investigación (1 de noviembre de 2019)
- OpenACC-standard.org: OpenACC: Una guía completa (mayo de 2021)
- Olga Abramkina, Rémy Dubois, Thibaut Véry: OpenACC para GPU: una introducción (02 de junio de 2023)
- Interfaces de programación de aplicaciones
- Familia de lenguajes de programación C
- Fortran
- Computación paralela
- Estándares