triSYCL 是一个研究项目,旨在试验 SYCL 标准规范并向 Khronos Group SYCL_committee 和 ISO C++ 委员会提供反馈。
最近,该项目已被用于试验 AMD AIE CGRA 的高级 C++ 编程,其灵感来自于一些 SYCL 概念,如 ACAP++ 和 AIE++:AMD Versal AIE CGRA 架构的 C++ 扩展中所述。
由于缺乏资源,该 SYCL 实现非常不完整,普通最终用户不应使用。幸运的是,现在有许多其他 SYCL 实现可用,包括一些强大的实现,如 DPC++ 或 hipSYCL,可用于各种目标。
该实现主要基于 OpenMP 或 TBB 支持的 C++23 功能,用于在 CPU 上并行执行,Boost.Compute 用于非单源 OpenCL 互操作层,以及用于设备编译器的实验性 LLVM/Clang 版本(来自2017-2018(现已过时)提供完整的单源 SYCL 体验,通常针对 SPIR 设备。由于在 SYCL 中存在主机回退,因此该 CPU 实现也可以视为该回退的实现。
自 2018 年左右以来,英特尔在自己的 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 2.2 中的 OpenCL C++ 1.0 内核语言进行实验并提供反馈。
这是按原样提供的,没有任何保证,具有与 LLVM/Clang 相同的许可证。
技术负责人:keryell point FR 的 Ronan。开发工作首先由 AMD 开始,然后主要由 Xilinx 资助,现在又由 AMD 资助,因为 Xilinx 已于 2022 年被 AMD 收购。
如果您具备与该项目相关的一些技能,则可以在 triSYCL 周围进行带薪实习。请联系技术负责人了解此事。 AMD 也在该领域招聘...:-)
SYCL 是一种基于 C++ 的单源现代 DSEL(领域特定嵌入式语言)和 Khronos 的开放标准,旨在通过利用受 OpenCL、CUDA、C++AMP、OpenMP 启发的现有概念来促进异构加速器的编程...
典型的内核及其启动看起来像这样的纯现代 C++ 代码:
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 是在 Khronos SYCL 委员会内部开发的,因此,有关 SYCL 的更多信息,请访问 https://www.khronos.org/sycl
请注意,即使 SYCL 背后的概念受到 OpenCL 概念的启发,SYCL 编程模型也是一个非常通用的异步任务图模型,用于针对各种框架和 API 的异构计算,与 OpenCL 本身没有任何关系,除非使用 OpenCL API 互操作模式,像任何其他目标一样。
对于 SYCL 生态系统,请查看 https://sycl.tech
我们目前的大部分工作都集中在扩展上,例如针对 AMD FPGA 和 Versal ACAP AIE CGRA,提供一种在单源 C++ 程序中同时对 CPU、GPU、FPGA 和 CGRA 进行编程的方法。
该项目仍在进行中,目前我们仅部分针对第一代设备 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++ 中运行的代码示例使用该项目进行库 CPU 仿真。
查看 doc/acap.rst 了解有关如何安装/使用 ACAP++ 环境的更多信息。
CPU 仿真和 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 获取一些示例。
CPU 模拟和 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。它也可以在 Windows 上与 Ubuntu WSL 一起使用。 :-) 更多信息