包含OpenCL .cl文件的标头

Yak*_*kov 8 c++ header include opencl

我在一个.cl文件中写了一个OpenCL内核.它尝试了#include几个标题.

它的编译失败,因为包含的头文件"找不到".我知道clBuildProgram可以-I dir选择,它将目录添加dir到要搜索头文件的目录列表中.

在khronus网站论坛上,这篇文章http://www.khronos.org/message_boards/viewtopic.php?f=37&t=2535讨论了这个问题.

他们建议使用clCreateProgramWithSource指定所有来源(包括.h文件).

我对这个问题有疑问:

  1. 哪个选项更好?(clBuildProgram对比clCreateProgramWithSource,如上所述)
  2. 如果我使用 clCreateProgramWithSource编译器如何知道包含什么?我的意思是,哪个来源代表哪个包含文件名?
  3. 如果我使用clBuildProgram并且有几个包含文件的目录,我该如何指定它们?

Tim*_*ild 8

OpenCL要求您使用clCreateProgramWithSource()后跟clBuildProgram().

ClCreateProgramWithSource()创建并返回一个 cl_program对象.

cl_program对象输入clBuildProgram().

clBuildProgram()允许您指定包含包含文件目录的编译器选项.在您的情况下,对于头文件包含,它将类似于字符串:

-I myincludedir1 -I myincludedir2  ...
Run Code Online (Sandbox Code Playgroud)

使用的编译器是您正在使用的OpenCL SDK中内部OpenCL编译器.因此,如果您使用AMD的SDK,将使用属于其OpenCL SDKAMD OpenCL编译器.同样适用于Nvidia英特尔.

检查所有OpenCL函数调用的OpenCL状态代码非常重要.这是强制性的clCreateProgramWithSource(),并clBuildProrgam()得到任何编译器错误或消息.还有一整个其他位代码要写入以获取消息的大小,然后自己检索消息.