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