stringtranslate.com

Acceso abierto

OpenACC ( 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 de CPU / GPU heterogéneos . [1]

Al igual que en OpenMP , el programador puede anotar el código fuente de C , C++ y Fortran para identificar las áreas que se deben acelerar utilizando directivas del compilador y funciones adicionales. [2] Al igual que OpenMP 4.0 y versiones más recientes, OpenACC puede apuntar a las arquitecturas de CPU y GPU y lanzar código computacional en ellas.

Los miembros de OpenACC han trabajado como miembros del grupo de estándares OpenMP para fusionarse en la especificación OpenMP para crear una especificación común que extienda OpenMP para soportar 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 el soporte de aceleradores que no sean de Nvidia con aportes de proveedores de hardware que participan en OpenMP. [6]

En ISC'12 se demostró que OpenACC funciona en aceleradores 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 de OpenACC versión 2.0. [8] Las nuevas capacidades sugeridas incluyen nuevos controles sobre el movimiento de datos (como un mejor manejo de datos no estructurados y mejoras en el soporte para memoria no contigua), y soporte para llamadas de función explícitas y compilación separada (permitiendo 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 3.2, que se lanzó en noviembre de 2021. [13]

Compatibilidad con compiladores

El soporte de 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 de código abierto de C desarrollado en el Laboratorio Nacional de Oak Ridge para soportar todas las características de la especificación OpenACC 1.0. Un compilador experimental de código abierto, accULL, está siendo 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 del Entorno de Programación del Centro RIKEN para la Ciencia Computacional, Japón, apoyaron OpenACC, XcalableMP  [ja] y XcalableACC  [ja] combinando XcalableMP y OpenACC.

IPMACC [21] es un compilador de 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; esto tradujo el código anotado de OpenACC 1.1 a OpenCL . [17] El anuncio de una implementación "real" se produjo dos meses después, esta vez de NVIDIA y basada en OpenACC 2.0. [23] Esto desató cierta controversia, ya que la implementación solo apuntaría al lenguaje ensamblador PTX de NVIDIA , para el cual no había ningún ensamblador o entorno de ejecución de código abierto disponible. [24] [25] El soporte experimental para OpenACC/PTX terminó en GCC a partir de la versión 5.1. Las series de lanzamiento GCC6 y GCC7 incluyen una implementación muy mejorada de la especificación OpenACC 2.0a. [26] [27] GCC 9.1 ofrece un soporte casi completo para OpenACC 2.5. [28]

Uso

De manera 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 aprovecharlas, 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 paralelo #pragma acc núcleos

Ambos se utilizan para definir núcleos de computación paralelos que se ejecutarán en el acelerador, utilizando semánticas distintas [32] [33]

#pragma datos de contabilidad

Es la directiva principal para definir y copiar datos hacia y desde el acelerador.

#bucle pragma acc

Se utiliza para definir el tipo de paralelismo en una parallelregión kernels.

#pragma acc caché #pragma acc actualización #pragma acc declaración #pragma acc espera

API de tiempo de ejecución

También se definen algunas funciones APIacc_get_num_devices() en tiempo de ejecución: , 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, pero esto se puede anular mediante el uso de grupos y trabajadores. Un grupo consta de trabajadores y opera sobre una serie de elementos de procesamiento (como con un grupo de trabajo en OpenCL).

Véase también

Referencias

  1. ^ "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 desde el original el 17 de noviembre de 2011.{{cite web}}: CS1 maint: URL no apta ( enlace )
  2. ^ "Versión 2.5 del estándar OpenACC" (PDF) . OpenACC.org . Consultado el 2 de junio de 2017 .
  3. ^ "¿Cómo se relaciona la API OpenACC con la API OpenMP?". OpenACC.org . Consultado el 14 de enero de 2014 .
  4. ^ "¿Cómo se originaron las especificaciones OpenACC?". OpenACC.org . Consultado el 14 de enero de 2014 .
  5. ^ "El Consorcio OpenMP publica su primer informe técnico". OpenMP.org . 5 de noviembre de 2012 . Consultado el 14 de enero de 2014 .
  6. ^ "OpenMP en SC12". OpenMP.org . 29 de agosto de 2012 . Consultado el 14 de enero de 2014 .
  7. ^ ab "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 .
  8. ^ "OpenACC versión 2.0 publicada para comentarios". OpenACC.org . 12 de noviembre de 2012 . Consultado el 14 de enero de 2014 .
  9. ^ "OpenACC 2.0 Spec | www.openacc.org". www.openacc.org . Archivado desde el original el 4 de abril de 2016 . Consultado el 23 de marzo de 2016 .
  10. ^ "El grupo de estándares OpenACC anuncia el lanzamiento de la especificación 2.5; los proveedores miembros agregan soporte para ARM y x86 como dispositivos paralelos | www.openacc.org". www.openacc.org . Archivado desde el original el 26 de julio de 2016 . Consultado el 22 de marzo de 2016 .
  11. ^ "¿Qué novedades hay en OpenACC 2.6? | OpenACC". www.openacc.org . Consultado el 1 de mayo de 2018 .
  12. ^ "¡Novedades en OpenACC 2.7! | OpenACC". www.openacc.org . Consultado el 7 de enero de 2019 .
  13. ^ "La interfaz de programación de aplicaciones OpenACC©" (PDF) . OpenACC . Septiembre de 2021. Archivado (PDF) del original el 29 de diciembre de 2022 . Consultado el 13 de diciembre de 2023 .
  14. ^ "Estándar OpenACC para ayudar a los desarrolladores a aprovechar los aceleradores de computación de GPU". Laboratorios Xbit . 16 de noviembre de 2011. Archivado desde el original el 16 de enero de 2014 . Consultado el 14 de enero de 2014 .
  15. ^ "Compilador OpenUH". Archivado desde el original el 25 de enero de 2014 . Consultado el 4 de marzo de 2014 .
  16. ^ "Compilador OpenARC" . Consultado el 4 de noviembre de 2014 .
  17. ^ ab Larabel, Michael (30 de septiembre de 2013). "Se publicó soporte de GCC para OpenACC en la GPU". Phoronix .
  18. ^ "accULL La implementación de la investigación de OpenACC" . Consultado el 14 de enero de 2014 .
  19. ^ "Omni Compiler". omni-compiler.org . Consultado el 18 de noviembre de 2019 .
  20. ^ Omni Compiler para programas en C y Fortran con directivas XcalableMP y OpenACC: omni-compiler/omni-compiler, omni-compiler, 2019-10-17 , consultado el 2019-11-17
  21. ^ "Compilador IPMACC". GitHub . Consultado el 31 de enero de 2017 .
  22. ^ Larabel, Michael (4 de diciembre de 2012). "OpenACC todavía no es del agrado de los compiladores abiertos". Phoronix .
  23. ^ Larabel, Michael (14 de noviembre de 2013). "OpenACC 2.0 con soporte para GPU llega a GCC". Phoronix .
  24. ^ Larabel, Michael (15 de noviembre de 2013). "NVIDIA y Mentor Graphics pueden perjudicar a GCC". Phoronix .
  25. ^ Larabel, Michael (21 de noviembre de 2013). "Continúan las luchas internas por OpenACC en el CCG". Phoronix .
  26. ^ "OpenACC - Wiki del CCG".
  27. ^ Schwinge, Thomas (15 de enero de 2015). "Fusionar el conjunto actual de cambios de OpenACC desde gomp-4_0-branch". gcc (Lista de correo) . Consultado el 15 de enero de 2015 . {{cite mailing list}}: Parámetro desconocido |agency=ignorado ( ayuda )
  28. ^ Jelinek, Jakub (3 de mayo de 2019). "Lanzamiento de GCC 9.1". LWN.net .
  29. ^ "Paralelismo GPU sencillo con OpenACC". Dr.Dobb's . 11 de junio de 2012 . Consultado el 14 de enero de 2014 .
  30. ^ "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 .
  31. ^ "Versión 2.0 del estándar OpenACC" (PDF) . OpenACC.org . Consultado el 14 de enero de 2014 .
  32. ^ "Núcleos OpenACC y construcciones paralelas". PGI Insider . Agosto de 2012 . Consultado el 14 de enero de 2014 .
  33. ^ "Sección paralela de OpenACC frente a kernels". Base de conocimientos de CAPS entreprise . 3 de enero de 2013. Archivado desde el original el 16 de enero de 2014. Consultado el 14 de enero de 2014 .

Enlaces externos