我有一个使用 OpenCL 内置平方根函数 (sqrt) 的内核,但是当我尝试在 GPU 上运行内核时,我在构建时收到无法识别的命令错误,如果我使用浮点数它可以正常工作,但是当使用双精度时它确实不行。我在 Mac OS X 10.7.5 上运行,我的显卡是 ATI Radeon HD 6750 卡。
有谁知道是什么问题?
我有一个使用 OpenCL 内置平方根函数 (sqrt) 的内核,但是当我尝试在 GPU 上运行内核时,我在构建时收到无法识别的命令错误,如果我使用浮点数它可以正常工作,但是当使用双精度时它确实不行。我在 Mac OS X 10.7.5 上运行,我的显卡是 ATI Radeon HD 6750 卡。
有谁知道是什么问题?
显然您的 gpu 不支持双精度浮点数: http ://clbenchmark.com/device-environment.jsp?config=12011396
支持双报告扩展的 AMD 卡:cl_khr_fp64(或 cl_amd_fp64)。
您可以通过这种方式在 openCL 编译时检查:
#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
或者您可以在不运行 opencl 编译的情况下进行检查:
status = clGetDeviceInfo (oclInfo->device, CL_DEVICE_DOUBLE_FP_CONFIG, sizeof configFp64, &configFp64, NULL);