triSYCL — это исследовательский проект, целью которого является экспериментирование со спецификациями стандарта SYCL и предоставление отзывов SYCL_committee группы Khronos, а также комитету ISO C++.
Совсем недавно этот проект использовался для экспериментов с программированием высокого уровня на C++ для AMD AIE CGRA, вдохновленным некоторыми концепциями SYCL, как описано в ACAP++ и AIE++: расширения C++ для архитектуры AMD Versal AIE CGRA.
Из-за нехватки ресурсов эта реализация SYCL очень неполна и не должна использоваться обычным конечным пользователем. К счастью, сейчас доступно множество других реализаций SYCL, включая некоторые сильные реализации, такие как DPC++ или hipSYCL, которые можно использовать для различных целей.
Эта реализация в основном основана на функциях C++23, поддерживаемых OpenMP или TBB для параллельного выполнения на ЦП, с Boost.Compute для уровня взаимодействия OpenCL с не одним исходным кодом и с экспериментальной версией LLVM/Clang для компилятора устройства (из 2017–2018, который уже устарел), предоставляя полную возможность использования SYCL из одного источника, обычно ориентированную на устройство SPIR. Поскольку в SYCL существует резервный вариант хоста, эту реализацию ЦП также можно рассматривать как реализацию этого резервного варианта.
Примерно с 2018 года Intel приложила немало усилий в своем собственном проекте oneAPI DPC++ SYCL для преобразования SYCL в LLVM/Clang, есть еще один проект по слиянию реализации oneAPI DPC++ SYCL с triSYCL по адресу https://github.com/triSYCL. /sycl, чтобы обеспечить удобство работы с AMD FPGA вместо использования нашего устаревшего экспериментального неуклюжего компилятора устройств. Но это все еще очень экспериментально, поскольку набор инструментов AMD основан на старых несовместимых версиях LLVM/Clang, и ничего из них не поддерживается группами разработчиков продуктов AMD.
triSYCL использовался для экспериментов и предоставления отзывов о SYCL 1.2, 1.2.1, 2.2, 2020 и даже о языке ядра OpenCL C++ 1.0 из OpenCL 2.2.
Он предоставляется «как есть», без каких-либо гарантий, с той же лицензией, что и LLVM/Clang.
Технический руководитель: Ронан в Кериелл-Пойнт, Франция. Разработки начались сначала в AMD, затем в основном финансировались Xilinx, а теперь снова AMD, поскольку Xilinx была приобретена AMD в 2022 году.
Вы можете пройти оплачиваемую стажировку в рамках triSYCL, если у вас есть некоторые навыки, связанные с этим проектом. Свяжитесь с техническим руководителем по этому поводу. AMD также нанимает сотрудников в этой области... :-)
SYCL — это современный DSEL (предметно-ориентированный встроенный язык) на основе C++ и открытый стандарт от Khronos, предназначенный для облегчения программирования гетерогенных ускорителей за счет использования существующих концепций, вдохновленных OpenCL, CUDA, C++AMP, OpenMP...
Типичное ядро при его запуске выглядит следующим образом:
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 ;
});
});
Полный пример см., например, на https://github.com/triSYCL/triSYCL/blob/master/tests/examples/demo_parallel_matrix_add.cpp.
SYCL разрабатывается комитетом SYCL Khronos, поэтому дополнительную информацию о SYCL можно найти на https://www.khronos.org/sycl.
Обратите внимание: даже если концепции, лежащие в основе SYCL, вдохновлены концепциями OpenCL, модель программирования SYCL представляет собой очень общую модель асинхронного графа задач для гетерогенных вычислений, ориентированных на различные платформы и API, и не имеет никакого отношения к самому OpenCL, за исключением случаев использования режима взаимодействия API OpenCL. , как и любая другая цель.
Информацию об экосистеме SYCL см. на https://sycl.tech.
Большая часть наших текущих усилий сосредоточена на расширениях, таких как AMD FPGA и Versal ACAP AIE CGRA, предоставляющих возможность одновременного программирования CPU, GPU, FPGA и CGRA в программе C++ с одним исходным кодом.
Этот проект находится в стадии разработки, и в настоящее время мы частично нацелены только на первое поколение устройств, AIE/AIE1, тогда как текущие модели AMD RyzenAI, такие как Ryzen 9 7940HS, имеют AIE-ML/AIE2 в качестве XDNA/NPU/. МПС.
Модель программирования первого поколения, ACAP++, была основана на конструкциях C++17/C++20.
См. https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/acap/test_aie_mandelbrot.cpp и другие каталоги,tests/acap и другие каталоги, начинающиеся с acap, для некоторых примеров кода, работающего на чистом C++. эмуляция процессора библиотеки с помощью этого проекта.
Посмотрите doc/acap.rst, чтобы узнать больше о том, как установить/использовать среду ACAP++.
Среда выполнения для эмуляции ЦП и устройства AIE находится в include/triSYCL/vendor/Xilinx, для чего также требуется специальный компилятор, предоставляемый https://github.com/triSYCL/sycl, для работы на платах VCK190.
Модель программирования второго поколения, AIE++, основана на конструкциях C++23/C++26, что позволяет использовать еще более краткий синтаксис.
Некоторые примеры см. на https://github.com/triSYCL/sycl/blob/sycl/unified/master/sycl/test/aie/mandelbrot.cpp.
Среда выполнения для эмуляции ЦП и поддержки устройств AIE находится в include/aie, а компилятор для поддержки устройств — https://github.com/triSYCL/sycl.
Другие проекты с открытым исходным кодом, связанные с AIE, которые интересны для программирования AIE:
Некоторая документация по AMD AIE CGRA:
Пожалуйста, ознакомьтесь с информацией о SYCL, чтобы иметь некоторый контекст, список презентаций и некоторые связанные проекты.
SYCL — это библиотека шаблонов, поэтому установка не требуется.
Однако есть несколько примеров, которые вы можете построить.
См. Тестирование.
Архитектура среды выполнения и компилятора triSYCL описывает базу кода с некоторыми высокоуровневыми диаграммами, а также то, как можно было скомпилировать и использовать устаревший компилятор устройств, например, на некоторых AMD FPGA. Теперь вместо этого посмотрите https://github.com/triSYCL/sycl.
Некоторые сведения о конфигурации и организации CMake можно найти в CMake.
Да, в triSYCL используются некоторые макросы! Посмотрите макросы препроцессора, используемые в triSYCL, чтобы узнать о некоторых из них.
См. раздел Переменные среды с triSYCL.
См. Возможное будущее.
Документацию по самой реализации triSYCL можно найти в https://trisycl.github.io/triSYCL/Doxygen/triSYCL/html и https://trisycl.github.io/triSYCL/Doxygen/triSYCL/triSYCL-implementation-refman. .pdf
ctest
и работает в Windows 10 с Visual Studio 2017. Он также работает с Ubuntu WSL в Windows. :-) Подробнее