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: thread, gang, worker y vector.[4]

Thread: Es el típico término usado en el paralelismo que es un proceso con un determinado ID y un ciclo de vida.

Gang: Los grupos de trabajadores se llaman gangs (Los programadores de CUDA reconocerán que un gang es otro nombre para un bloque de subprocesos de CUDA). Las Gangs funcionan independientemente unas de otras.[4]

Worker: Los grupos de subprocesos que pueden operar juntos en un SIMD de forma vectorial se denominan trabajadores. (Los programadores de CUDA reconocerán que un trabajador es solo el nombre de OpenAcc para una deformación).[4]

Vectors: Los vectores hacen que los subprocesos de trabajo funcionen al mismo tiempo cuando se ejecutan vectores o instrucciones SIMD.[4]

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 editar

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.[5]

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.[6]

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 editar

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 editar

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.

Cray Inc editar

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).

The Portland Group editar

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.

CAPS Enterprise editar

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 editar

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

IDEs editar

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.[9]

Compiladores comerciales editar

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

Compiladores de código abierto editar

CCG 10.

Compiladores académicos editar

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 editar

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.[10]​ 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().[11]

Campos de Utilización editar

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.

Véase también editar

Referencias editar

  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. a b c d «Google Libros». books.google.es. Consultado el 13 de diciembre de 2022. 
  5. The Past, Present, and Future of OpenACC, consultado el 27 de mayo de 2022 .
  6. 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. 
  7. «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. 
  8. «CAPS Announcing Full Support for OpenACC 2.0 in its Compilers». HPCwire. 14 de noviembre de 2013. Consultado el 14 de enero de 2014. 
  9. «NVIDIA, Cray, PGI, CAPS Unveil 'OpenACC' Programming Standard for Parallel Computing». NVIDIA Newsroom (en inglés estadounidense). Consultado el 27 de mayo de 2022. 
  10. «Easy GPU Parallelism with OpenACC». Dr.Dobb's. 11 de junio de 2012. Consultado el 14 de enero de 2014. 
  11. «OpenACC API QuickReference Card, version 1.0». NVidia. noviembre de 2011. Consultado el 14 de enero de 2014.