在OpenCL中使用带双精度的平方根函数(sqrt)

在OpenCL中使用带双精度的平方根函数(sqrt),opencl,Opencl,我有一个内核,它使用OpenCL内置的平方根函数(sqrt),但是当我试图在GPU上运行内核时,我在构建时遇到了一个无法识别的命令错误,如果我使用float,它可以正常工作,但是当使用double时,它不起作用。我在Mac OS X 10.7.5上运行,我的图形卡是ATI Radeon HD 6750卡 有人知道问题出在哪里吗 显然,您的gpu不支持双精度浮点: 支持双报告扩展的AMD卡:cl_khr_fp64(或cl_AMD_fp64) 您可以通过以下方式在openCL编译时进行检查: #i

我有一个内核,它使用OpenCL内置的平方根函数(sqrt),但是当我试图在GPU上运行内核时,我在构建时遇到了一个无法识别的命令错误,如果我使用float,它可以正常工作,但是当使用double时,它不起作用。我在Mac OS X 10.7.5上运行,我的图形卡是ATI Radeon HD 6750卡


有人知道问题出在哪里吗

显然,您的gpu不支持双精度浮点:

支持双报告扩展的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
status = clGetDeviceInfo (oclInfo->device, CL_DEVICE_DOUBLE_FP_CONFIG, sizeof configFp64, &configFp64, NULL);
或者,您可以通过以下方式进行检查,而无需运行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
status = clGetDeviceInfo (oclInfo->device, CL_DEVICE_DOUBLE_FP_CONFIG, sizeof configFp64, &configFp64, NULL);

取决于您的OpenCL版本(特别是CL 1.1及以下版本)您可能需要一个
#pragma OPENCL扩展名clu khr_fp64:在使用任何
双精度
s之前在内核中启用
。即使在我的内核文件顶部添加该扩展名也没有什么区别,我仍然会收到functionWow调用的以下未声明的构建错误函数“Z9_ucl_sqrtd”,想不到这一代的卡牌没有双精度支持。我认为这对于DX11/GL4是强制性的。但维基百科也同意你的观点。