triSYCL est un projet de recherche visant à expérimenter la spécification de la norme SYCL et à donner son feedback au SYCL_committee du groupe Khronos ainsi qu'au comité ISO C++.
Plus récemment, ce projet a été utilisé pour expérimenter une programmation C++ de haut niveau pour AMD AIE CGRA inspirée de certains concepts SYCL, comme expliqué dans ACAP++ & AIE++ : extensions C++ pour l'architecture AMD Versal AIE CGRA.
En raison du manque de ressources , cette implémentation de SYCL est très incomplète et ne doit pas être utilisée par un utilisateur final normal. Heureusement, il existe désormais de nombreuses autres implémentations de SYCL disponibles, y compris des implémentations solides comme DPC++ ou hipSYCL qui peuvent être utilisées sur diverses cibles.
Cette implémentation est principalement basée sur des fonctionnalités C++23 soutenues par OpenMP ou TBB pour une exécution parallèle sur le CPU, avec Boost.Compute pour la couche d'interopérabilité OpenCL non monosource et avec une version expérimentale LLVM/Clang pour le compilateur de périphérique (de 2017-2018, désormais obsolète) offrant une expérience SYCL complète à source unique, ciblant généralement un appareil SPIR. Puisque dans SYCL il existe une solution de secours sur l'hôte, cette implémentation du processeur peut également être considérée comme une implémentation de cette solution de repli.
Depuis 2018 environ, Intel a déployé beaucoup d'efforts dans son propre projet oneAPI DPC++ SYCL pour transférer SYCL dans LLVM/Clang. Il existe un autre projet concernant la fusion de l'implémentation oneAPI DPC++ SYCL avec triSYCL sur https://github.com/triSYCL. /sycl pour offrir une meilleure expérience utilisateur pour AMD FPGA au lieu d'utiliser notre compilateur de périphériques expérimental obsolète et maladroit. Mais cela reste encore très expérimental car la chaîne d'outils AMD est basée sur d'anciennes versions incompatibles de LLVM/Clang et rien de tout cela n'est supporté par les équipes produit AMD.
triSYCL a été utilisé pour expérimenter et fournir des commentaires pour SYCL 1.2, 1.2.1, 2.2, 2020 et même le langage du noyau OpenCL C++ 1.0 à partir d'OpenCL 2.2.
Ceci est fourni tel quel, sans aucune garantie, avec la même licence que LLVM/Clang.
Responsable technique : Ronan à Keryell Point FR. Les développements ont commencé d'abord chez AMD, puis ont été principalement financés par Xilinx et maintenant à nouveau par AMD depuis que Xilinx a été racheté par AMD en 2022.
Il est possible d'effectuer un stage rémunéré autour de triSYCL, si vous possédez quelques compétences liées à ce projet. Contactez le responsable technique à ce sujet. AMD recrute également dans ce domaine... :-)
SYCL est un DSEL (Domain Specific Embedded Language) moderne basé sur C++ et un standard ouvert de Khronos visant à faciliter la programmation d'accélérateurs hétérogènes en tirant parti des concepts existants inspirés par OpenCL, CUDA, C++AMP, OpenMP...
Un noyau typique lors de son lancement ressemble à ce code C++ moderne et pur :
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 ;
});
});
Regardez par exemple sur https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp pour un exemple complet.
SYCL est développé au sein du comité Khronos SYCL et donc, pour plus d'informations sur SYCL, consultez https://www.khronos.org/sycl
Notez que même si les concepts derrière SYCL sont inspirés des concepts OpenCL, le modèle de programmation SYCL est un modèle de graphe de tâches asynchrone très général pour le calcul hétérogène ciblant divers frameworks et API et n'a aucun rapport avec OpenCL lui-même, sauf lors de l'utilisation du mode d'interopérabilité de l'API OpenCL. , comme toute autre cible.
Pour l'écosystème SYCL, regardez https://sycl.tech
La plupart de nos efforts actuels se concentrent sur les extensions, telles que le ciblage d'AMD FPGA et de Versal ACAP AIE CGRA, offrant un moyen de programmer simultanément CPU, GPU, FPGA et CGRA dans un programme C++ à source unique.
Ce projet est un travail en cours et actuellement nous ciblons partiellement uniquement la première génération d'appareils, AIE/AIE1, tandis que les modèles actuels d'AMD RyzenAI tels que le Ryzen 9 7940HS ont un AIE-ML/AIE2 comme XDNA/NPU/ UIP.
Le modèle de programmation de première génération, ACAP++, était basé sur des constructions C++17/C++20.
Voir https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp et environs, tests/acap et autres répertoires commençant par acap pour certains exemples de code exécutés en C++ pur émulation CPU de bibliothèque avec ce projet.
Consultez doc/acap.rst pour en savoir plus sur la façon d'installer/utiliser l'environnement ACAP++.
Le moteur d'exécution pour l'émulation CPU et le périphérique AIE se trouve dans include/triSYCL/vendor/Xilinx qui nécessite également un compilateur spécial fourni par https://github.com/triSYCL/sycl pour fonctionner sur les cartes VCK190.
Le modèle de programmation de deuxième génération, AIE++, est basé sur des constructions C++23/C++26, permettant une syntaxe encore plus concise.
Voir autour de https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp pour quelques exemples.
Le moteur d'exécution pour l'émulation du processeur et la prise en charge des périphériques AIE se trouve dans include/aie et le compilateur pour la prise en charge des périphériques est https://github.com/triSYCL/sycl
Autres projets open source liés à AIE qui sont intéressants pour programmer AIE :
Quelques documentations sur AMD AIE CGRA :
Veuillez consulter SYCL pour avoir un peu de contexte, une liste de présentations, des projets connexes.
SYCL est une bibliothèque de modèles, aucune installation réelle n'est donc requise.
Il existe cependant quelques exemples que vous pouvez créer.
Voir Tests.
L'architecture du runtime et du compilateur triSYCL décrit la base de code avec quelques diagrammes de haut niveau mais aussi comment il était possible de compiler et d'utiliser le compilateur de périphérique obsolète sur certains FPGA AMD par exemple. Maintenant, regardez plutôt https://github.com/triSYCL/sycl.
Certains détails sur la configuration et l'organisation de CMake peuvent être trouvés dans CMake.
Oui, certaines macros sont utilisées dans triSYCL ! Regardez les macros de pré-processeur utilisées dans triSYCL pour en découvrir certaines.
Voir Variables d'environnement avec triSYCL.
Voir Futurs possibles.
La documentation de l'implémentation triSYCL elle-même peut être trouvée sur https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html et https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman .pdf
ctest
et fonctionne sur Windows 10 avec Visual Studio 2017. Il fonctionne également avec Ubuntu WSL sous Windows. :-) Plus d'infos