用于OpenCL的CUDA式工作流程

问题描述:

OpenCL编程的典型示例工作流程似乎集中于字符串中的源代码,传递给JIT编译器,然后最终入队(使用特定的内核名称);并且编译结果可以被缓存 - 但是这对程序员来说是需要照顾的。用于OpenCL的CUDA式工作流程

在CUDA中,代码以非JIT方式编译为目标文件(与主机端代码一起,但暂时忘记了这一点),然后在上下文中引用设备端函数入队或参数等。

现在,我想要第二种工作流程,但使用OpenCL源代码。也就是说,假设我有一些C主机端代码my_app.c和一些OpenCL内核代码在单独的文件my_kernel.cl(为了讨论的目的是独立的)。我希望能够在my_kernel.cl上运行魔术命令,获得my_kernel.whatever,链接或虚假链接以及my_app.o,并获得二进制文件。现在,在my_app.c中,我希望能够以某种方式将内核称为编译OpenCL程序(或程序+内核名称),即使它不是外部符号,也不会出现编译错误。

这是支持吗?使用nVIDIA的ICD还是与其他ICD一起使用?如果没有,至少是这个支持的一些,比如说魔法内核编译器+生成一个额外的头文件或源代码片段,用于编译my_app.c

调查SYCL,它提供了单一来源的C++ OpenCL。但是,尚未在每个平台上提供。

https://www.khronos.org/sycl

+0

是不是那种轻描淡写?它似乎需要尚未标准的C++功能(C++ 17材料?)另外,这是一个规范/标准;有没有符合SYCL的实现? – einpoklum

+1

是的,也许是轻描淡写;我不使用SYCL,所以我不确定它的可用性。 – Dithermaster

+0

然后,也许在3年左右,我可以接受这个答案:-)你虽然有我的+1。 – einpoklum

已经有持续的努力,使CUDA样的工作流程在TensorFlow,它使用SYCL 1.2 - 这是积极向上流。经由设备工厂

的工作流程是有点不同,因为你没有做的仿函数模板的显式实例为CUDA做https://github.com/lukeiwanski/tensorflow/blob/master/tensorflow/core/kernels/adjust_contrast_op_gpu.cu.cc或任何.cu.cc文件(事实上​​,你不必添加任何新文件 - 避免与构建系统混乱)

以及这件事:https://github.com/lukeiwanski/tensorflow/issues/89;

TL; DR-CUDA可以创建“持久”指针,OpenCL需要通过缓冲区和访问器。

Codeplay的SYCL编译器(ComputeCpp)目前需要SPIR扩展的OpenCL 1.2--这些是Intel CPU,Intel GPU(Beignet工作正在进行中),AMD GPU(尽管较旧的驱动程序) - 其他平台即将推出!

安装说明可以在这里找到:https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

我们的努力可以在我的TensorFlow的叉跟踪:https://github.com/lukeiwanski/tensorflow(分公司开发/ eigen_mehdi)

征使用的是:https://bitbucket.org/mehdi_goli/opencl(分支默认)

我们到达那里!欢迎贡献! :)