triSYCL ist ein Forschungsprojekt, um mit der Spezifikation des SYCL-Standards zu experimentieren und Feedback an das SYCL_committee der Khronos Group und auch an das ISO C++-Komitee zu geben.
In jüngerer Zeit wurde dieses Projekt verwendet, um mit High-Level-C++-Programmierung für AMD AIE CGRA zu experimentieren, inspiriert von einigen SYCL-Konzepten, wie in ACAP++ & AIE++: C++-Erweiterungen für AMD Versal AIE CGRA-Architektur erläutert.
Aufgrund fehlender Ressourcen ist diese SYCL-Implementierung sehr unvollständig und sollte nicht von einem normalen Endbenutzer verwendet werden. Glücklicherweise gibt es mittlerweile viele andere Implementierungen von SYCL, darunter einige starke Implementierungen wie DPC++ oder hipSYCL, die auf verschiedenen Zielen verwendet werden können.
Diese Implementierung basiert hauptsächlich auf C++23-Funktionen, die mit OpenMP oder TBB für die parallele Ausführung auf der CPU unterstützt werden, mit Boost.Compute für die Nicht-Single-Source-OpenCL-Interoperabilitätsschicht und mit einer experimentellen LLVM/Clang-Version für den Geräte-Compiler (von 2017–2018, das inzwischen veraltet ist) bietet vollständige SYCL-Erfahrung aus einer Hand und zielt typischerweise auf ein SPIR-Gerät ab. Da es in SYCL einen Host-Fallback gibt, kann diese CPU-Implementierung auch als Implementierung dieses Fallbacks angesehen werden.
Da Intel etwa 2018 große Anstrengungen in sein eigenes oneAPI DPC++ SYCL-Projekt gesteckt hat, um SYCL in LLVM/Clang zu streamen, gibt es ein weiteres Projekt zur Zusammenführung der oneAPI DPC++ SYCL-Implementierung mit triSYCL unter https://github.com/triSYCL /sycl, um ein besseres Benutzererlebnis für AMD FPGA zu bieten, anstatt unseren veralteten, experimentellen, klobigen Geräte-Compiler zu verwenden. Dies ist jedoch noch sehr experimentell, da die AMD-Toolkette auf alten inkompatiblen Versionen von LLVM/Clang basiert und nichts davon von den AMD-Produktteams unterstützt wird.
triSYCL wurde verwendet, um zu experimentieren und Feedback für SYCL 1.2, 1.2.1, 2.2, 2020 und sogar die OpenCL C++ 1.0-Kernelsprache von OpenCL 2.2 zu geben.
Dies wird ohne jegliche Gewährleistung mit der gleichen Lizenz wie LLVM/Clang bereitgestellt.
Technische Leitung: Ronan am Keryell Point FR. Die Entwicklungen begannen zunächst bei AMD, wurden dann hauptsächlich von Xilinx finanziert und nun wieder von AMD, da Xilinx 2022 von AMD übernommen wurde.
Es ist möglich, ein bezahltes Praktikum rund um triSYCL zu absolvieren, wenn Sie über Kenntnisse im Zusammenhang mit diesem Projekt verfügen. Wenden Sie sich diesbezüglich an den technischen Leiter. AMD stellt auch in diesem Bereich ein... :-)
SYCL ist ein moderner C++-basierter DSEL (Domain Specific Embedded Language) und offener Standard aus einer Quelle von Khronos, der darauf abzielt, die Programmierung heterogener Beschleuniger durch die Nutzung bestehender Konzepte zu erleichtern, die von OpenCL, CUDA, C++AMP, OpenMP usw. inspiriert sind.
Ein typischer Kernel sieht beim Start wie dieser reine moderne C++-Code aus:
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 ;
});
});
Ein vollständiges Beispiel finden Sie beispielsweise unter https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp.
SYCL wird im Khronos SYCL-Komitee entwickelt. Weitere Informationen zu SYCL finden Sie unter https://www.khronos.org/sycl
Beachten Sie, dass, auch wenn die Konzepte hinter SYCL von OpenCL-Konzepten inspiriert sind, das SYCL-Programmiermodell ein sehr allgemeines asynchrones Task-Graph-Modell für heterogenes Computing ist, das auf verschiedene Frameworks und APIs abzielt und keine Beziehung zu OpenCL selbst hat, außer bei Verwendung des OpenCL-API-Interoperabilitätsmodus , wie jedes andere Ziel.
Informationen zum SYCL-Ökosystem finden Sie unter https://sycl.tech
Die meisten unserer aktuellen Bemühungen konzentrieren sich auf Erweiterungen, wie z. B. auf AMD FPGA und Versal ACAP AIE CGRA, die eine Möglichkeit bieten, CPU, GPU, FPGA und CGRA gleichzeitig in einem C++-Programm aus einer Hand zu programmieren.
Dieses Projekt ist in Arbeit und derzeit zielen wir teilweise nur auf die erste Generation von Geräten ab, AIE/AIE1, während aktuelle Modelle von AMD RyzenAI wie der Ryzen 9 7940HS über einen AIE-ML/AIE2 als XDNA/NPU/ verfügen. IPU.
Das Programmiermodell der ersten Generation, ACAP++, basierte auf C++17/C++20-Konstrukten.
Siehe https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp und Umgebung, tests/acap und andere Verzeichnisse, die mit acap beginnen, für einige Codebeispiele, die in reinem C++ ausgeführt werden Bibliotheks-CPU-Emulation mit diesem Projekt.
Weitere Informationen zur Installation/Verwendung der ACAP++-Umgebung finden Sie unter doc/acap.rst.
Die Laufzeit für die CPU-Emulation und das AIE-Gerät befindet sich in include/triSYCL/vendor/Xilinx. Für die Ausführung auf VCK190-Boards ist außerdem ein spezieller Compiler von https://github.com/triSYCL/sycl erforderlich.
Das Programmiermodell der zweiten Generation, AIE++, basiert auf C++23/C++26-Konstrukten und ermöglicht so eine noch knappere Syntax.
Einige Beispiele finden Sie unter https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp.
Die Laufzeit für die CPU-Emulation und die AIE-Geräteunterstützung finden Sie in include/aie und der Compiler für die Geräteunterstützung ist https://github.com/triSYCL/sycl
Weitere Open-Source-Projekte im Zusammenhang mit AIE, die für die Programmierung von AIE interessant sind:
Einige Dokumentationen zu AMD AIE CGRA:
Weitere Informationen zum Kontext, eine Liste der Präsentationen und einige verwandte Projekte finden Sie unter SYCL.
SYCL ist eine Vorlagenbibliothek, daher ist keine echte Installation erforderlich.
Es gibt jedoch einige Beispiele, die Sie erstellen können.
Siehe Testen.
Die Architektur der triSYCL-Laufzeit und des Compilers beschreibt die Codebasis mit einigen High-Level-Diagrammen, aber auch, wie es möglich war, den veralteten Geräte-Compiler beispielsweise auf einigen AMD-FPGAs zu kompilieren und zu verwenden. Schauen Sie sich stattdessen https://github.com/triSYCL/sycl an.
Einige Details zur CMake-Konfiguration und -Organisation finden Sie in CMake.
Ja, in triSYCL werden einige Makros verwendet! Schauen Sie sich die in triSYCL verwendeten Präprozessormakros an, um einige davon zu entdecken.
Siehe Umgebungsvariablen mit triSYCL.
Siehe Mögliche Zukünfte.
Die Dokumentation der triSYCL-Implementierung selbst finden Sie unter https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html und https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
verwenden und funktioniert unter Windows 10 mit Visual Studio 2017. Es funktioniert auch mit Ubuntu WSL unter Windows. :-) Weitere Infos