triSYCL es un proyecto de investigación para experimentar con la especificación del estándar SYCL y dar retroalimentación al comité SYCL_committee del Grupo Khronos y también al comité ISO C++.
Más recientemente, este proyecto se ha utilizado para experimentar con programación C++ de alto nivel para AMD AIE CGRA inspirada en algunos conceptos de SYCL, como se explica en ACAP++ & AIE++: Extensiones C++ para la arquitectura AMD Versal AIE CGRA.
Debido a la falta de recursos , esta implementación de SYCL es muy incompleta y no debería ser utilizada por un usuario final normal. Afortunadamente, ahora hay muchas otras implementaciones de SYCL disponibles, incluidas algunas implementaciones sólidas como DPC++ o hipSYCL que se pueden usar en varios objetivos.
Esta implementación se basa principalmente en funciones de C++ 23 respaldadas con OpenMP o TBB para la ejecución paralela en la CPU, con Boost.Compute para la capa de interoperabilidad OpenCL que no es de fuente única y con una versión experimental de LLVM/Clang para el compilador de dispositivos (de 2017-2018, que ahora está obsoleto) que proporciona una experiencia SYCL completa de fuente única, generalmente dirigida a un dispositivo SPIR. Dado que en SYCL hay un respaldo del host, esta implementación de CPU también puede verse como una implementación de este respaldo.
Desde aproximadamente 2018, Intel ha puesto mucho esfuerzo en su propio proyecto oneAPI DPC++ SYCL para actualizar SYCL a LLVM/Clang, hay otro proyecto sobre la fusión de la implementación oneAPI DPC++ SYCL con triSYCL en https://github.com/triSYCL /sycl para brindar una mejor experiencia de usuario para AMD FPGA en lugar de usar nuestro obsoleto y torpe compilador de dispositivos experimentales. Pero esto todavía es muy experimental porque la cadena de herramientas de AMD se basa en versiones antiguas e incompatibles de LLVM/Clang y los equipos de productos de AMD no admiten nada de esto.
triSYCL se ha utilizado para experimentar y proporcionar comentarios para SYCL 1.2, 1.2.1, 2.2, 2020 e incluso el lenguaje del kernel OpenCL C++ 1.0 de OpenCL 2.2.
Se proporciona tal cual, sin garantía alguna, con la misma licencia que LLVM/Clang.
Líder técnico: Ronan en keryell point FR. Los desarrollos comenzaron primero en AMD, luego fueron financiados principalmente por Xilinx y ahora nuevamente por AMD desde que AMD adquirió Xilinx en 2022.
Es posible realizar una pasantía remunerada en triSYCL, si tienes algunas habilidades relacionadas con este proyecto. Póngase en contacto con el líder técnico sobre esto. AMD también está contratando en esta área... :-)
SYCL es un DSEL (lenguaje integrado específico de dominio) moderno de fuente única basado en C++ y un estándar abierto de Khronos destinado a facilitar la programación de aceleradores heterogéneos aprovechando conceptos existentes inspirados en OpenCL, CUDA, C++AMP, OpenMP...
Un kernel típico con su lanzamiento se parece a este código C++ puro y moderno:
queue {}.submit([&](handler &h) {
auto accA = bufA. get_access < access ::mode:: read >(h);
auto accB = bufB. get_access < access ::mode:: write >(h);
h. parallel_for < class myKernel >(myRange, [=](item i) {
accA[i] = accB[i] + 1 ;
});
});
Mire, por ejemplo, https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp para ver un ejemplo completo.
SYCL se desarrolla dentro del comité Khronos SYCL y, por lo tanto, para obtener más información sobre SYCL, consulte https://www.khronos.org/sycl
Tenga en cuenta que incluso si los conceptos detrás de SYCL están inspirados en los conceptos de OpenCL, el modelo de programación SYCL es un modelo de gráfico de tareas asíncrono muy general para computación heterogénea dirigida a varios marcos y API y no tiene relación con OpenCL en sí, excepto cuando se utiliza el modo de interoperabilidad de la API de OpenCL. , como cualquier otro objetivo.
Para conocer el ecosistema SYCL, consulte https://sycl.tech
La mayoría de nuestros esfuerzos actuales se centran en extensiones, como AMD FPGA y Versal ACAP AIE CGRA, proporcionando una forma de programar CPU, GPU, FPGA y CGRA al mismo tiempo en un programa C++ de fuente única.
Este proyecto es un trabajo en progreso y actualmente nos enfocamos parcialmente solo en la primera generación de dispositivos, AIE/AIE1, mientras que los modelos actuales de AMD RyzenAI, como el Ryzen 9 7940HS, tienen un AIE-ML/AIE2 como XDNA/NPU/ UIP.
El modelo de programación de primera generación, ACAP++, se basó en construcciones C++17/C++20.
Consulte https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp y alrededores, tests/acap y otros directorios que comienzan con acap para ver algunos ejemplos de código que se ejecutan en C++ puro. Emulación de CPU de biblioteca con este proyecto.
Mire doc/acap.rst para saber más sobre cómo instalar/usar el entorno ACAP++.
El tiempo de ejecución para la emulación de CPU y el dispositivo AIE se encuentra en include/triSYCL/vendor/Xilinx, que también requiere un compilador especial proporcionado por https://github.com/triSYCL/sycl para ejecutarse en placas VCK190.
El modelo de programación de segunda generación, AIE++, se basa en construcciones C++23/C++26, lo que permite una sintaxis aún más concisa.
Consulte https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp para ver algunos ejemplos.
El tiempo de ejecución para la emulación de CPU y la compatibilidad con dispositivos AIE se encuentra en include/aie y el compilador para la compatibilidad con dispositivos es https://github.com/triSYCL/sycl.
Otros proyectos de código abierto relacionados con AIE que son interesantes para programar AIE:
Alguna documentación sobre AMD AIE CGRA:
Consulte sobre SYCL para tener algo de contexto, una lista de presentaciones y algunos proyectos relacionados.
SYCL es una biblioteca de plantillas, por lo que no se requiere ninguna instalación real.
Sin embargo, hay algunos ejemplos que puedes construir.
Ver Pruebas.
La arquitectura del compilador y tiempo de ejecución triSYCL describe la base del código con algunos diagramas de alto nivel, pero también cómo fue posible compilar y utilizar el compilador de dispositivo obsoleto en algunas FPGA AMD, por ejemplo. Ahora mire https://github.com/triSYCL/sycl en su lugar.
Se pueden encontrar algunos detalles sobre la configuración y organización de CMake en CMake.
¡Sí, hay algunas macros utilizadas en triSYCL! Mire las macros de preprocesador utilizadas en triSYCL para descubrir algunas de ellas.
Consulte Variables de entorno con triSYCL.
Ver Futuros posibles.
La documentación de la implementación de triSYCL se puede encontrar en https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html y https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
y funciona en Windows 10 con Visual Studio 2017. También funciona con Ubuntu WSL en Windows. :-) Más información