使用SYCL在任何OpenCL设备上运行代码不需要自定义编译器,因为一切都在一个库中完成(充满了模板魔术),并且标准的GCC / Clang就可以了。它是否正确? (尤其是在使用triSYCL的情况下,...)
如果是这样的话……我知道可以通过在自定义“handle”或“wrapper”类上重载一堆运算符来提取简单的表达式树,但是控制流却并非如此。我错了吗?
this paper的3.1节讨论了将EDSL添加到C++的几种不同方法的优缺点,但我对SYCL使用的方法的实际技术实现更感兴趣。
我试图查看一些与SYCL相关的项目(Eigen,TensorFlow,triSYCL,ComputeCpp等)的源代码,但到目前为止,我在其中找不到答案。
因此:SYCL库(?)如何在不需要自定义/扩展编译器的情况下发现作为普通C++ lambda给出的内核的完整控制流程图?
最佳答案
我想你是对的。
如果您为CPU编译SYCL,则由于SYCL是纯C++可执行DSEL,因此您可以拥有仅使用普通C++编译器的实现。
例如,triSYCL就是这样工作的。 https://github.com/triSYCL/triSYCL
我不知道有关ComputeCpp的详细信息。在https://github.com/triSYCL/triSYCL/blob/master/doc/about-sycl.rst上,有一个有关非常有趣但很旧的演示文稿的链接:
如果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/master/tests/regression/work_efficient_prefix_sum.cpp
关于c++ - 如何从SYCL内核中提取控制流?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48399665/