我环顾四周,找不到解决相对简单的 OpenCL 相关问题的方法。
问题是,我刚开始在我的 OpenCL 内核中使用双精度,因为我当前的项目需要这么高的精度。此外,我正在尝试管理所有内容,以便所有内核都具有它们可以使用的相同#DEFINES。
然后我来到了扩展。通过 OpenCL,我必须包括
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
如何将其包含在 clBuildProgram 的构建选项中?
您可以从使用 CL_DEVICE_EXTENSIONS 调用的主机检查设备支持的扩展clGetDeviceInfo
(OpenCL 1.1 规范的第 4.2 节)。如果支持扩展,返回的字符串将包含“cl_khr_fp64”。
使用 编译 OpenCL 代码时clBuildProgram
,如果支持扩展,编译器会定义“cl_khr_fp64”(OpenCL 1.1 规范的第 9.1 节)。
要在 OpenCL 代码中启用扩展,您必须包含 pragma 行。您可以通过将选项传递给clBuildProgram
, like来控制主机代码中扩展的使用-D USE_FP64=1
,然后在 OpenCL 代码中对其进行测试:
#if USE_FP64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#endif