1

我环顾四周,找不到解决相对简单的 OpenCL 相关问题的方法。

问题是,我刚开始在我的 OpenCL 内核中使用双精度,因为我当前的项目需要这么高的精度。此外,我正在尝试管理所有内容,以便所有内核都具有它们可以使用的相同#DEFINES。

然后我来到了扩展。通过 OpenCL,我必须包括

#pragma OPENCL EXTENSION cl_khr_fp64 : enable

如何将其包含在 clBuildProgram 的构建选项中?

4

1 回答 1

2

您可以从使用 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
于 2012-04-11T17:24:20.453 回答