1

使用 SYCL 在任何 OpenCL 设备上运行代码不需要自定义编译器,因为一切都在库中完成(充满了模板魔法),标准 GCC/Clang 就可以了。这个对吗?(特别是在我正在使用的 triSYCL 的情况下......)

如果是这样...我知道可以通过在自定义“句柄”或“包装器”类上重载一堆运算符来提取简单的表达式树,但控制流并非如此。我错了吗?

本文的第 3.1 节讨论了向 C++ 添加 EDSL 的几种不同方法的优缺点,但我对 SYCL 使用的方法的实际技术实现更感兴趣。

我试图查看一些与 SYCL 相关的项目(Eigen、TensorFlow、triSYCL、ComputeCpp 等)的源代码,但到目前为止我无法在其中找到答案。

那么:SYCL 库(?)如何在不需要自定义/扩展编译器的情况下发现内核的完整控制流图,以普通 C++ lambda 形式给出?

4

2 回答 2

2

我想你是对的。

如果您为 CPU 编译 SYCL,由于 SYCL 是纯 C++ 可执行 DSEL,您可以有一个只使用普通 C++ 编译器的实现。例如,这就是 triSYCL 的工作方式。https://github.com/triSYCL/triSYCL

我不知道有关 ComputeCpp 的详细信息。在https://github.com/triSYCL/triSYCL/blob/master/doc/about-sycl.rst上有一个关于一个非常有趣但旧的演示文稿的链接:

使用 Clang/LLVM 实现 OpenCL SYCL 共享源 C++ 编程模型,Gordon Brown。2014 年 11 月 17 日,HPC 中的 LLVM 编译器基础架构研讨会,SuperComputing 2014 http://www.codeplay.com/public/uploaded/publications/SC2014_LLVM_HPC.pdf

在 triSYCL 以设备为目标的情况下,还有一个设备编译器。我要推送一个带有设计文档的新版本...同时,您可以查看https://github.com/triSYCL/triSYCL/tree/device https://github.com/triSYCL/llvm https: //github.com/triSYCL/clang

sycl-gtx 正在使用一些基于宏的 SYCL 语法扩展来在内核中拥有控制流的元表示,如本示例所示:https ://github.com/ProGTX/sycl-gtx/blob/主/测试/回归/work_efficient_prefix_sum.cpp

于 2018-01-25T10:02:00.553 回答
1

答案是:这不是它的做法,我仍然认为这是不可能的。

甚至我的第一个假设也是错误的。如果您只有一个普通的 C++ 编译器,那么任何 SYCL 内核都只能由运行“控制器”代码的主机设备(CPU)“在软件中”执行。

要将内核转换为 OpenCL(或 SPIR-V)以在任何其他设备上执行,需要“增强”编译器;或两个编译器,一个用于主机,一个用于计算设备。

可以在这里找到一个很好的解释:https ://www.codeplay.com/portal/introduction-to-sycl

最相关的部分是“SYCL 工作流程是什么样的?”

于 2018-01-24T17:04:58.317 回答