我正在尝试在 OpenCL 内核中获得double精确的工作精度,但在启用cl_khr_fp64. 如果我把它放在#pragma OPENCL EXTENSION cl_khr_fp64 : enable内核文件的顶部并定义一个变量,double u = 5.0;那么它就会定义它并允许我+-*/打开u. 但是,如果我尝试执行任何数学函数,例如double u = exp(5.0);它会抛出错误,指出找不到exptype 的重载函数double。我发现奇怪的是,如果我检查是否cl_khr_fp64是通过定义的
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64)
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#else
#error "Double precision floating point not supported by OpenCL implementation."
#endif
Run Code Online (Sandbox Code Playgroud)
然后它会抛出不支持双精度的错误。如果我只是说启用它,那么它就会启用,但如果我检查它是否能够启用,那么它就会说不能。
我已经检查了卡上的扩展并cl_khr_fp64已列出,我还检查了CL_DEVICE_DOUBLE_FP_CONFIG使用clGetDeviceInfo,它返回 63。我在 Yosemite 上使用 MacPro 和 …