SYCL (pronunciado "sickle") es un modelo de programación de alto nivel para mejorar la productividad de programación en varios aceleradores de hardware . Es un lenguaje específico de dominio integrado de fuente única ( eDSL ) basado en C++17 puro . Es un estándar desarrollado por Khronos Group , anunciado en marzo de 2014.
Origen del nombre
SYCL (pronunciado 'sickle') originalmente significaba SY stem-wide C ompute Language , [2] pero desde 2020 los desarrolladores de SYCL han declarado que SYCL es un nombre y han dejado en claro que ya no es un acrónimo y no contiene ninguna referencia a OpenCL . [3]
Objetivo
SYCL es una capa de abstracción multiplataforma libre de regalías que se basa en los conceptos subyacentes, la portabilidad y la eficiencia inspirados en OpenCL que permite escribir código para procesadores heterogéneos en un estilo de "fuente única" utilizando C++ completamente estándar . SYCL permite el desarrollo de fuente única donde las funciones de plantilla de C++ pueden contener código de host y dispositivo para construir algoritmos complejos que usan aceleradores de hardware y luego reutilizarlos en todo su código fuente en diferentes tipos de datos.
Si bien el estándar SYCL comenzó como el subgrupo de modelos de programación de nivel superior del grupo de trabajo OpenCL y se desarrolló originalmente para su uso con OpenCL y SPIR , SYCL es un grupo de trabajo de Khronos Group independiente del grupo de trabajo OpenCL desde el 20 de septiembre de 2019 y, a partir de SYCL 2020, SYCL se ha generalizado como un marco heterogéneo más general capaz de apuntar a otros sistemas. Esto ahora es posible con el concepto de un backend genérico para apuntar a cualquier API de aceleración al tiempo que permite la interoperabilidad total con la API de destino , como el uso de bibliotecas nativas existentes para alcanzar el máximo rendimiento junto con la simplificación del esfuerzo de programación. Por ejemplo, la implementación de Open SYCL apunta a ROCm y CUDA a través del HIP de múltiples proveedores de AMD .
Versiones
SYCL se presentó en GDC en marzo de 2014 con la versión provisional 1.2, [4] luego la versión final de SYCL 1.2 se presentó en IWOCL 2015 en mayo de 2015. [5]
La última versión de la serie SYCL 1.2.1 anterior es SYCL 1.2.1 revisión 7, que se publicó el 27 de abril de 2020 (la primera versión se publicó el 6 de diciembre de 2017 [6] ).
La versión provisional de SYCL 2.2 se presentó en IWOCL 2016 en mayo de 2016 [7], destinada a C++14 y OpenCL 2.2. Sin embargo, el comité de SYCL prefirió no finalizar esta versión y avanzar hacia una especificación SYCL más flexible para abordar la creciente diversidad de aceleradores de hardware actuales , incluidos los motores de inteligencia artificial , lo que condujo a SYCL 2020.
La última versión es la revisión 6 de SYCL 2020, que se publicó el 13 de noviembre de 2022, una evolución de la primera versión de la revisión 2, que se publicó el 9 de febrero de 2021, [8] teniendo en cuenta los comentarios de los usuarios e implementadores sobre la revisión 1 de la Especificación provisional de SYCL 2020 publicada el 30 de junio de 2020. [9] La compatibilidad con C++17 y OpenCL 3.0 son los principales objetivos de esta versión. La memoria compartida unificada (USM) es una característica principal de las GPU con compatibilidad con OpenCL y CUDA.
En IWOCL 2021 se presentó una hoja de ruta. DPC++, ComputeCpp, Open SYCL, triSYCL y neoSYCL son las principales implementaciones de SYCL. El próximo objetivo en desarrollo es la compatibilidad con C++20 en el futuro SYCL 202x. [10]
Implementaciones
- Data Parallel C++ (DPC++): un proyecto de código abierto de Intel para introducir SYCL para LLVM y oneAPI . C++17 y partes de C++20 con SYCL 2020 son la base de este marco de compilación. [11] [12]
- ComputeCpp: marco de trabajo compatible con SYCL 1.2.1 de la empresa Codeplay con versión comunitaria. [13] [14] Ahora obsoleto en favor de DPC++. [15]
- AdaptiveCpp (anteriormente hipSYCL y Open SYCL): compatibilidad incompleta con la versión 1.2.1 sin imágenes ni interoperabilidad con OpenCL; parcialmente compatible con SYCL 2020. [16] Admite AMD (ROCm), Nvidia (CUDA), Intel (Level Zero a través de SPIR-V) y CPU (LLVM + OpenMP). [17] Puede producir binarios completamente genéricos utilizando un entorno de ejecución justo a tiempo. Admite paralelismo estándar de C++ (
std::execution) además de SYCL. [18] - triSYCL: basado en C++20, OpenMP y OpenCL, desarrollo lento, incompleto, con una versión basada en DPC++ [19]
- neoSYCL: SYCL 1.2.1 casi completo, para hpc SX-Aurora Tsubasa, sin características específicas de OpenCL como soporte de imágenes [20] [21]
- SYCL-gtx: soporte para C++11, para OpenCL 1.2+, lejos de estar completo, sin desarrollo actual [22]
- Sylkan es una implementación de SYCL para dispositivos Vulkan en estado experimental. [23]
- Polygeist tiene una bifurcación que compila SYCL a través de MLIR [24] que está respaldada por la empresa Inteon. [25]
Extensiones
La seguridad de SYCL es crítica
En marzo de 2023, el Grupo Khronos anunció la creación del Grupo de Trabajo SYCL SC [26] , con el objetivo de crear un marco de computación heterogénea de alto nivel para sistemas críticos para la seguridad . Estos sistemas abarcan varios campos, incluidos los sectores de la aviónica, la automoción, la industria y la medicina.
El marco de trabajo de seguridad crítica de SYCL cumplirá con varios estándares de la industria para garantizar su confiabilidad y seguridad. Estos estándares incluyen MISRA C++ 202X, [27] que proporciona pautas para el uso de C++ en sistemas críticos, RTCA DO-178C / EASA ED-12C, [28] que son estándares para consideraciones de software en sistemas y certificación de equipos aerotransportados, ISO 26262/21448, [29] que se refiere a la seguridad funcional de los vehículos de carretera, IEC 61508 , que cubre la seguridad funcional de los sistemas eléctricos/electrónicos/electrónicos programables relacionados con la seguridad, e IEC 62304 , que se relaciona con los requisitos del ciclo de vida del software de dispositivos médicos. [26]
Software
Algunos campos de software notables que utilizan SYCL incluyen los siguientes (con ejemplos):
- Bioinformática
- GROMACS : un software de dinámica molecular ampliamente utilizado en bioinformática y química computacional. A partir de su versión acelerada en 2021, GROMACS utiliza SYCL 2020 para realizar cálculos eficientes en varios aceleradores de hardware. [30]
- LiGen: un software de acoplamiento molecular que utiliza SYCL para acelerar las tareas computacionales relacionadas con el análisis de la estructura molecular y las simulaciones de acoplamiento. [31]
- Autodock : otro software de acoplamiento molecular que aprovecha SYCL para acelerar el proceso de predicción de cómo las moléculas pequeñas se unen a un receptor de una estructura 3D conocida. [32]
- Inteligencia artificial
- llama.cpp : una biblioteca de software de código abierto que realiza inferencias en varios modelos de lenguaje grandes como Llama . [33]
- Industria automotriz
- ISO 26262 : Norma internacional para la seguridad funcional de los sistemas eléctricos y electrónicos de automoción. SYCL se utiliza en aplicaciones de automoción para acelerar los cálculos y simulaciones críticos para la seguridad, garantizando el cumplimiento de los estándares de seguridad más estrictos. [34]
- Cosmología
- CRK-HACC: código de simulación cosmológica de n cuerpos que se ha adaptado a SYCL. Utiliza SYCL para acelerar los cálculos relacionados con la formación y la dinámica de estructuras a gran escala en el universo. [35]
Recursos
Khronos mantiene una lista de recursos SYCL. [36] Codeplay Software también proporciona tutoriales en el sitio web sycl.tech junto con otra información y noticias sobre el ecosistema SYCL.
Licencia
Los archivos fuente para crear la especificación, como Makefiles y algunos scripts, los encabezados SYCL y los ejemplos de código SYCL están bajo la licencia Apache 2.0 . [37]
Comparación con otras herramientas
Los estándares abiertos SYCL y OpenCL son similares a los modelos de programación de la pila propietaria CUDA de Nvidia y HIP de la pila de código abierto ROCm , compatible con AMD . [38]
En el ámbito de Khronos Group , OpenCL y Vulkan son las API de bajo nivel que no tienen una única fuente y que proporcionan un control detallado sobre los recursos y operaciones de hardware. OpenCL se utiliza ampliamente para la programación paralela en varios tipos de hardware, mientras que Vulkan se centra principalmente en tareas de computación y gráficos de alto rendimiento. [39]
Por otro lado, SYCL es el lenguaje de dominio específico integrado de C++ de alto nivel y fuente única (eDSL). Permite a los desarrolladores escribir código para sistemas informáticos heterogéneos, incluidas CPU, GPU y otros aceleradores, utilizando un enfoque de fuente única. Esto significa que tanto el código del host como el del dispositivo se pueden escribir en el mismo archivo fuente de C++. [40]
CUDA
En comparación, la versión de CUDA de código fuente único para lenguaje específico de dominio integrado C++ , que se denomina "CUDA Runtime API ", es algo similar a SYCL. De hecho, Intel lanzó una herramienta llamada SYCLOMATIC que traducía automáticamente el código de CUDA a SYCL. [41] Sin embargo, existe una versión de CUDA menos conocida que no es de código fuente único, que se denomina "CUDA Driver API", similar a OpenCL y que se utiliza, por ejemplo, en la propia implementación de CUDA Runtime API. [38]
SYCL amplía las características de C++ AMP , liberando al programador de la necesidad de transferir datos explícitamente entre el host y los dispositivos mediante el uso de búferes y descriptores de acceso. Esto contrasta con CUDA (antes de la introducción de la memoria unificada en CUDA 6), donde se requerían transferencias de datos explícitas. A partir de SYCL 2020, también es posible utilizar la memoria compartida unificada (USM) para aumentar, en lugar de reemplazar, las interfaces basadas en búfer, [42] proporcionando un modelo de programación de nivel inferior similar a la memoria unificada en CUDA. [43]
SYCL es de nivel superior a C++ AMP y CUDA, ya que no es necesario crear un gráfico de dependencias explícitas entre todos los núcleos y proporciona una programación asincrónica automática de los núcleos con superposición de comunicación y cálculo. Todo esto se hace utilizando el concepto de accesores sin necesidad de ningún soporte del compilador. [44]
A diferencia de C++ AMP y CUDA, SYCL es un eDSL de C++ puro sin ninguna extensión de C++. Esto permite una implementación de CPU básica que se basa en un entorno de ejecución puro sin ningún compilador específico. [40]
Tanto los compiladores DPC++ [45] como AdaptiveCpp [46] proporcionan un backend para las GPU NVIDIA, de forma similar a como lo hace CUDA. Esto permite compilar y ejecutar código SYCL en hardware NVIDIA, lo que permite a los desarrolladores aprovechar las abstracciones de alto nivel de SYCL en GPU compatibles con CUDA. [45] [46]
ROCm cadera
ROCm HIP está orientado a GPU Nvidia, GPU AMD y CPU x86. HIP es una API de nivel inferior que se parece mucho a las API de CUDA. [47] Por ejemplo, AMD lanzó una herramienta llamada HIPIFY que puede traducir automáticamente el código CUDA a HIP. [48] Por lo tanto, muchos de los puntos mencionados en la comparación entre CUDA y SYCL también se aplican a la comparación entre HIP y SYCL. [49]
ROCm HIP tiene algunas similitudes con SYCL en el sentido de que puede apuntar a varios proveedores (AMD y Nvidia) y tipos de aceleradores (GPU y CPU). [50] Sin embargo, SYCL puede apuntar a una gama más amplia de aceleradores y proveedores. SYCL admite múltiples tipos de aceleradores simultáneamente dentro de una sola aplicación a través del concepto de backends. Además, SYCL está escrito en C++ puro, mientras que HIP, como CUDA, usa algunas extensiones de lenguaje. Estas extensiones evitan que HIP se compile con un compilador C++ estándar. [49]
Los compiladores DPC++ [45] y AdaptiveCpp [46] proporcionan backends para GPU NVIDIA y AMD, de manera similar a como lo hace HIP. Esto permite compilar y ejecutar código SYCL en hardware de estos proveedores, lo que ofrece a los desarrolladores la flexibilidad de aprovechar las abstracciones de alto nivel de SYCL en una amplia gama de dispositivos y plataformas. [46] [45]
Coccos
SYCL tiene muchas similitudes con el modelo de programación Kokkos , [51] incluido el uso de objetos de matriz multidimensionales opacos (buffers SYCL y matrices Kokkos), rangos multidimensionales para ejecución paralela y reducciones (agregadas en SYCL 2020). [52] Se agregaron numerosas características en SYCL 2020 en respuesta a los comentarios de la comunidad Kokkos.
SYCL se centra más en sistemas heterogéneos; gracias a su integración con OpenCL, puede adoptarse en una amplia gama de dispositivos. Kokkos, por otro lado, apunta a la mayoría de las plataformas HPC, [53] por lo que está más orientado a HPC para el rendimiento.
A partir de 2024, el equipo de Kokkos está desarrollando un backend SYCL [54] , que permite a Kokkos apuntar al hardware de Intel además de las plataformas que ya admite. Este desarrollo amplía la aplicabilidad de Kokkos y permite una mayor flexibilidad para aprovechar diferentes arquitecturas de hardware dentro de las aplicaciones de HPC. [51]
Raja
Raja [55] [56] es una biblioteca de abstracciones de software C++ para permitir la portabilidad de la arquitectura y la programación de aplicaciones HPC.
Al igual que SYCL, proporciona código portátil en plataformas heterogéneas. Sin embargo, a diferencia de SYCL, Raja introduce una capa de abstracción sobre otros modelos de programación como CUDA, HIP, OpenMP y otros. Esto permite a los desarrolladores escribir su código una vez y ejecutarlo en varios backends sin modificar la lógica central. Raja se mantiene y desarrolla en el Laboratorio Nacional Lawrence Livermore (LLNL), mientras que SYCL es un estándar abierto mantenido por la comunidad. [39]
Al igual que Kokkos, Raja está más orientado a casos de uso de HPC, centrándose en el rendimiento y la escalabilidad en entornos informáticos de alto rendimiento. Por el contrario, SYCL admite una gama más amplia de dispositivos, lo que lo hace más versátil para diferentes tipos de aplicaciones más allá de HPC. [56]
A partir de 2024, el equipo de Raja está desarrollando un backend SYCL [57] que permitirá a Raja apuntar también al hardware de Intel. Este desarrollo mejorará la portabilidad y flexibilidad de Raja, lo que le permitirá aprovechar las capacidades de SYCL y expandir su aplicabilidad a una gama más amplia de plataformas de hardware. [39]
OpenMP
OpenMP apunta a la descarga computacional a aceleradores externos, [58] enfocándose principalmente en arquitecturas multinúcleo y GPU. SYCL, por otro lado, está orientado a una gama más amplia de dispositivos debido a su integración con OpenCL, que permite soporte para varios tipos de aceleradores de hardware. [59]
OpenMP utiliza un enfoque basado en pragmas , en el que el programador anota el código con directivas y el compilador se encarga de la complejidad de la ejecución paralela y la gestión de la memoria. Esta abstracción de alto nivel facilita a los desarrolladores la paralelización de sus aplicaciones sin tener que lidiar con los intrincados detalles de las transferencias de memoria y la sincronización. [60]
Tanto OpenMP como SYCL son compatibles con C++ y están estandarizados. OpenMP está estandarizado por la OpenMP Architecture Review Board (ARB), mientras que SYCL está estandarizado por el Khronos Group. [39]
OpenMP tiene un amplio soporte de varios compiladores, como GCC y Clang . [61]
estándar::par
std::par es parte del estándar C++17 [62] y está diseñado para facilitar la ejecución paralela de algoritmos estándar en contenedores estándar de C++. Proporciona una forma estándar de aprovechar los aceleradores externos al permitir que los desarrolladores especifiquen una política de ejecución para operaciones paralelas, como std::for_each, std::transformy std::reduce. Esto permite un uso eficiente de procesadores multinúcleo y otro hardware paralelo sin requerir cambios significativos en el código. [63]
SYCL se puede utilizar como backend para std::par, lo que permite la ejecución de algoritmos estándar en una amplia gama de aceleradores externos, incluidas las GPU de Intel, AMD y NVIDIA, así como otros tipos de aceleradores. [64] Al aprovechar las capacidades de SYCL, los desarrolladores pueden escribir código C++ estándar que se ejecuta sin problemas en entornos informáticos heterogéneos. Esta integración permite una mayor flexibilidad y optimización del rendimiento en diferentes plataformas de hardware. [64]
El uso de SYCL como backend std::pardepende del compilador, lo que significa que requiere un compilador que admita tanto SYCL como las políticas de ejecución paralela introducidas en C++17. [64] Algunos ejemplos de estos compiladores incluyen DPC++ y otros compiladores compatibles con SYCL. Con estos compiladores, los desarrolladores pueden aprovechar las abstracciones de SYCL para la gestión de memoria y la ejecución paralela mientras siguen utilizando los algoritmos y políticas de ejecución estándar de C++. [45]
Véase también
Referencias
- ^ "Registro SYCL de Khronos - The Khronos Group Inc". registration.khronos.org .
- ^ Keryell, Ronan (17 de noviembre de 2019). «SYCL: Un estándar de C++ de fuente única para computación heterogénea» (PDF) . Khronos.org . Consultado el 26 de septiembre de 2023 .
- ^ Keryell, Ronan. "Significado de SYCL". GitHub . Consultado el 5 de febrero de 2021 .
- ^ Khronos Group (19 de marzo de 2014). «Khronos lanza la especificación provisional SYCL 1.2». Khronos . Consultado el 20 de agosto de 2017 .
- ^ Khronos Group (11 de mayo de 2015). «Khronos lanza la especificación final de SYCL 1.2». Khronos . Consultado el 20 de agosto de 2017 .
- ^ Khronos Group (6 de diciembre de 2017). «The Khronos Group Releases Finalized SYCL 1.2.1». Khronos . Consultado el 12 de diciembre de 2017 .
- ^ Khronos Group (18 de abril de 2016). «Khronos lanza la especificación provisional de OpenCL 2.2 con lenguaje de núcleo OpenCL C++». Khronos . Consultado el 18 de septiembre de 2017 .
- ^ Khronos Group (9 de febrero de 2021). «Khronos lanza la especificación SYCL 2020». Khronos . Consultado el 22 de febrero de 2021 .
- ^ Khronos Group (30 de junio de 2020). «Khronos avanza hacia una implementación generalizada de SYCL con el lanzamiento de la especificación provisional SYCL 2020». Khronos . Consultado el 4 de diciembre de 2020 .
- ^ "Discurso inaugural sobre el estado de la Unión de SYCL SYCLCon 2021" (PDF) . www.iwocl.org .
- ^ Reinders, James. "SYCL, DPC ++, XPU, oneAPI" (PDF) . www.iwocl.org .
- ^ "Compilar arquitectura cruzada: compilador Intel® oneAPI DPC++/C++".
- ^ "Inicio - ComputeCpp CE - Productos - Codeplay Developer".
- ^ "Guías - ComputeCpp CE - Productos - Codeplay Developer".
- ^ "El futuro de ComputeCpp". www.codeplay.com . Consultado el 9 de diciembre de 2023 .
- ^ "Compatibilidad con funciones de AdaptiveCpp". GitHub . 4 de julio de 2023.
- ^ "AdaptiveCpp/doc/compilation.md en desarrollo · AdaptiveCpp/AdaptiveCpp". GitHub .
- ^ "AdaptiveCpp (antes conocido como hipSYCL/Open SYCL)". GitHub . 4 de julio de 2023.
- ^ "triSYCL". GitHub . 6 de enero de 2022.
- ^ Ke, Yinan; Agung, Mulya; Takizawa, Hiroyuki (2021). "NeoSYCL: una implementación de SYCL para SX-Aurora TSUBASA". La Conferencia Internacional sobre Computación de Alto Rendimiento en la Región Asia-Pacífico . págs. 50– 57. doi :10.1145/3432261.3432268. ISBN 9781450388429. Número de identificación del sujeto 231597238.
- ^ Ke, Yinan; Agung, Mulya; Takizawa, Hiroyuki (2021). "NeoSYCL: una implementación de SYCL para SX-Aurora TSUBASA". La Conferencia Internacional sobre Computación de Alto Rendimiento en la Región Asia-Pacífico . págs. 50– 57. doi :10.1145/3432261.3432268. ISBN 9781450388429. Número de identificación del sujeto 231597238.
- ^ "Sycl-GTX". GitHub . 10 de abril de 2021.
- ^ Thoman, Peter; Gogl, Daniel; Fahringer, Thomas. "Sylkan: hacia una plataforma de computación Vulkan para SYCL" (PDF) .
- ^ "Polygeist". GitHub . 25 de febrero de 2022.
- ^ "Inteon". 25 de febrero de 2022.
- ^ ab "Khronos creará el estándar abierto SYCL SC para computación heterogénea basada en C++ de importancia crítica para la seguridad". The Khronos Group . 2023-03-15 . Consultado el 2024-07-10 .
- ^ "MISRA" . Consultado el 11 de julio de 2024 .
- ^ "Capacitación sobre estándares de software de aviación ED-12C - Aerotransportada". Eurocae . Consultado el 11 de julio de 2024 .
- ^ "SOTIF – formación práctica". www.kuglermaag.com . Consultado el 11 de julio de 2024 .
- ^ Trevett, Neil. "Estado de la Unión del Grupo de Trabajo OpenCL" (PDF) . www.iwocl.org .
- ^ Crisci, Luigi; Salimi Beni, Majid; Cosenza, Biagio; Scipione, Nicolò; Gadioli, Davide; Vitali, Emanuele; Palermo, Gianluca; Beccari, Andrea (10 de mayo de 2022). "Hacia un canal portátil de descubrimiento de fármacos con SYCL 2020". Taller Internacional sobre OpenCL . IWOCL '22. Nueva York, NY, EE.UU.: Asociación de Maquinaria de Computación. págs. 1– 2. doi :10.1145/3529538.3529688. ISBN 978-1-4503-9658-5.
- ^ Solis-Vasquez, Leonardo; Mascarenhas, Edward; Koch, Andreas (18 de abril de 2023). "Experiencias de migración de CUDA a SYCL: un estudio de caso de acoplamiento molecular". Taller internacional sobre OpenCL . IWOCL '23. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1– 11. doi :10.1145/3585341.3585372. ISBN . 979-8-4007-0745-2.
- ^ "Llama.CPP/Docs/Backend/SYCL.md en master · ggerganov/Llama.CPP". GitHub .
- ^ Rudkin, Illya. "¿Pueden SYCL y OpenCL afrontar los retos de la seguridad funcional?" (PDF) . 2021-04-09 .
- ^ Rangel, Esteban Miguel; Pennycook, Simon John; Pope, Adrian; Frontiere, Nicholas; Ma, Zhiqiang; Madananth, Varsha (12 de noviembre de 2023). "Una implementación SYCL portátil de alto rendimiento de CRK-HACC para exaescala". Actas de los talleres SC '23 de la Conferencia Internacional sobre Computación de Alto Rendimiento, Redes, Almacenamiento y Análisis . SC-W '23. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1114– 1125. arXiv : 2310.16122 . doi :10.1145/3624062.3624187. ISBN . 979-8-4007-0785-8.
- ^ "Recursos SYCL". khronos.org . Grupo Khronos. 20 de enero de 2014.
- ^ "Especificación de código abierto SYCL". GitHub . 10 de enero de 2022.
- ^ ab Breyer, Marcel; Van Craen, Alexander; Pflüger, Dirk (10 de mayo de 2022). "Una comparación de SYCL, OpenCL, CUDA y OpenMP para la clasificación de máquinas de vectores de soporte masivamente paralelas en hardware de múltiples proveedores". Taller internacional sobre OpenCL . IWOCL '22. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1– 12. doi :10.1145/3529538.3529980. ISBN 978-1-4503-9658-5.
- ^ abcd "SYCL - Programación heterogénea de código fuente único en C++ para descarga de aceleración". The Khronos Group . 2014-01-20 . Consultado el 2024-07-12 .
- ^ ab "Especificación SYCL™ 2020 (revisión 8)". registration.khronos.org . Consultado el 12 de julio de 2024 .
- ^ oneapi-src/SYCLomatic, oneAPI-SRC, 2024-07-11 , consultado el 2024-07-11
- ^ "Especificación SYCL™ 2020 (revisión 9), 4.8. Memoria compartida unificada (USM)" . Consultado el 30 de octubre de 2024 .
- ^ Chen, Jolly; Dessole, Monica; Varbanescu, Ana Lucia (24 de enero de 2024), Lecciones aprendidas al migrar CUDA a SYCL: un estudio de caso de HEP con ROOT RDataFrame , arXiv : 2401.13310
- ^ "Modos de acceso al búfer". Intel . Consultado el 11 de julio de 2024 .
- ^ abcde "Documentación de DPC++: documentación del compilador oneAPI DPC++". intel.github.io . Consultado el 11 de julio de 2024 .
- ^ abcd "AdaptiveCpp/doc/sycl-ecosystem.md en desarrollo · AdaptiveCpp/AdaptiveCpp". GitHub . Consultado el 11 de julio de 2024 .
- ^ ROCm/HIP, software AMD ROCm™, 11 de julio de 2024 , consultado el 11 de julio de 2024
- ^ "HIPIFY/README.md en amd-staging · ROCm/HIPIFY". GitHub . Consultado el 11 de julio de 2024 .
- ^ ab Jin, Zheming; Vetter, Jeffrey S. (noviembre de 2022). "Evaluación de la reducción no uniforme en HIP y SYCL en GPU". 2022 IEEE/ACM 8th International Workshop on Data Analysis and Reduction for Big Scientific Data (DRBSD) . IEEE. págs. 37– 43. doi :10.1109/DRBSD56682.2022.00010. ISBN 978-1-6654-6337-9.OSTI 1996715 .
- ^ Reguly, Istvan Z. (12 de noviembre de 2023). "Evaluación de la portabilidad del rendimiento de SYCL entre CPU y GPU en aplicaciones limitadas por el ancho de banda". Actas de los talleres SC '23 de la Conferencia internacional sobre computación de alto rendimiento, redes, almacenamiento y análisis . SC-W '23. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1038– 1047. arXiv : 2309.10075 . doi :10.1145/3624062.3624180. ISBN . 979-8-4007-0785-8.
- ^ ab Hammond, Jeff R.; Kinsner, Michael; Brodman, James (2019). "Un análisis comparativo de Kokkos y SYCL como modelos de programación paralela heterogéneos para aplicaciones C++". Actas del Taller internacional sobre OpenCL . págs. 1– 2. doi :10.1145/3318170.3318193. ISBN 9781450362306. Número de identificación del sujeto 195777149.
- ^ Dufek, Amanda S.; Gayatri, Rahulkumar; Mehta, Neil; Doerfler, Douglas; Cook, Brandon; Ghadar, Yasaman; DeTar, Carleton (noviembre de 2021). "Estudio de caso del uso de Kokkos y SYCL como marcos portables de rendimiento para el benchmark Milc-Dslash en GPU NVIDIA, AMD e Intel". Taller internacional de 2021 sobre rendimiento, portabilidad y productividad en HPC (P3HPC) . IEEE. págs. 57– 67. doi :10.1109/P3HPC54578.2021.00009. ISBN . 978-1-6654-2439-4.
- ^ Trott, Christian R.; Lebrun-Grandié, Damien; Arndt, Daniel; Ciesko, Jan; Dang, Vinh; Ellingwood, Nathan; Gayatri, Rahulkumar; Harvey, Evan; Hollman, Daisy S. (2022), Kokkos 3: Extensiones del modelo de programación para la era de la exaescala , consultado el 10 de julio de 2024
- ^ Arndt, Daniel; Lebrun-Grandie, Damien; Trott, Christian (8 de abril de 2024). "Experiencias con la implementación del backend SYCL de Kokkos". Actas del 12.º Taller internacional sobre OpenCL y SYCL . IWOCL '24. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1– 11. doi :10.1145/3648115.3648118. ISBN . 979-8-4007-1790-1.OSTI 2336667 .
- ^ LLNL/RAJA, Laboratorio Nacional Lawrence Livermore, 8 de julio de 2024 , consultado el 10 de julio de 2024
- ^ ab Beckingsale, David A.; Scogland, Thomas RW; Burmark, Jason; Hornung, Rich; Jones, Holger; Killian, William; Kunen, Adam J.; Pearce, Olga; Robinson, Peter; Ryujin, Brian S. (noviembre de 2019). "RAJA: Rendimiento portátil para aplicaciones científicas a gran escala". Taller internacional IEEE/ACM de 2019 sobre rendimiento, portabilidad y productividad en HPC (P3HPC) . IEEE. págs. 71– 81. doi :10.1109/P3HPC49587.2019.00012. ISBN . 978-1-7281-6003-0.OSTI 1488819 .
- ^ Homerding, Brian; Vargas, Arturo; Scogland, Tom; Chen, Robert; Davis, Mike; Hornung, Rich (8 de abril de 2024). "Habilitación de RAJA en GPU Intel con SYCL". Actas del 12.º Taller internacional sobre OpenCL y SYCL . IWOCL '24. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1– 10. doi :10.1145/3648115.3648131. ISBN . 979-8-4007-1790-1.
- ^ tim.lewis. "Inicio". OpenMP . Consultado el 10 de julio de 2024 .
- ^ "OpenCL - El estándar abierto para la programación paralela de sistemas heterogéneos". The Khronos Group . 2013-07-21 . Consultado el 2024-07-12 .
- ^ Friedman, Richard. "Guías de referencia". OpenMP . Consultado el 12 de julio de 2024 .
- ^ "Compiladores y herramientas OpenMP".
- ^ "std::execution::seq, std::execution::par, std::execution::par_unseq, std::execution::unseq - cppreference.com". es.cppreference.com . Consultado el 10 de julio de 2024 .
- ^ "Aceleración de C++ estándar con GPU mediante stdpar". Blog técnico de NVIDIA . 2020-08-04 . Consultado el 2024-07-10 .
- ^ abc Alpay, Aksel; Heuveline, Vincent (8 de abril de 2024). "AdaptiveCpp Stdpar: paralelismo estándar de C++ integrado en un compilador SYCL". Actas del 12.º Taller internacional sobre OpenCL y SYCL . IWOCL '24. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1– 12. doi :10.1145/3648115.3648117. ISBN 979-8-4007-1790-1.
Enlaces externos
- Página web de Khronos SYCL
- Las especificaciones SYCL en el registro de Khronos
- C++17 ParallelSTL en SYCL
- Recursos tecnológicos de SYCL
- Implementación de SYCL ComputeCpp de Codeplay
- Implementación de SYCL iniciada por Intel con el objetivo de la transmisión ascendente de Clang/LLVM
- AdaptiveCpp (antes conocido como hipSYCL / Open SYCL)
- Implementación de SYCL de código abierto triSYCL
- "SYCL 2020 se lanza con un nuevo nombre, nuevas funciones y gran ambición", artículo de HPCWire (9 de febrero de 2021)
- James Reinders, Ben Ashbaugh, James Brodman, Michael Kinsner, John Pennycook, Xinmin Tian: "Data Parallel C++: dominar DPC++ para la programación de sistemas heterogéneos usando C++ y SYCL", Apress (2021), OpenAccess.