gpt4 book ai didi

double - 我应该如何在 OpenCL 中启用 cl_khr_fp64?

转载 作者:行者123 更新时间:2023-12-02 06:49:35 27 4
gpt4 key购买 nike

我正在尝试获取double精度在我的 OpenCL 内核中工作,但我在启用 cl_khr_fp64 时遇到问题。如果我输入 #pragma OPENCL EXTENSION cl_khr_fp64 : enable在我的内核文件的顶部并定义一个变量 double u = 5.0;然后它定义它并允许我 +-*/u 。但是如果我尝试执行任何数学函数,例如 double u = exp(5.0);它会抛出一个错误,指出找不到重载的 exp类型 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

然后它会抛出不支持 double 的错误。如果我只是说启用它,那么它就会启用,但如果我检查它是否能够启用,那么它就会说不能。

我已经检查了我卡上的分机号,cl_khr_fp64已列出,我还检查了 CL_DEVICE_DOUBLE_FP_CONFIG使用clGetDeviceInfo它返回 63。我在 Yosemite 上使用 MacPro 和 AMD FirePro D700。我想知道我是否启用了 cl_khr_fp64在错误的地方或其他什么地方。我的mykernel.cl的内容文件如下。它只是 Apple 'hello_world' OpenCL Xcode 项目的修改。编写的代码工作得很好,但是如果我将行从 double u = (5.0); 更改为至double u = exp(5.0);它不起作用。最终我想在double上使用数学函数变量。任何帮助将不胜感激!

#pragma OPENCL EXTENSION cl_khr_fp64 : enable

__kernel void square5(global double* input, global double* output, double mul,int nv)
{
size_t i = get_global_id(0);
double u = (5.0);
float left = u/1.2;
if(i==0) {
output[i] = mul*pow((float)u,left)*input[i]*input[i];
} else if (i==nv-1) {
output[i] = mul*u*input[i]*input[i];
} else {
output[i] = 0.25*mul*u*(input[i-1] + input[i+1])*(input[i-1] + input[i+1]);
}
}

最佳答案

double 在 OpenCL 1.2 中成为核心可选功能(这应该是您的设备在 OS X 下支持的版本)。这意味着如果设备支持该扩展,您不需要启用该扩展即可使用它。然而,启用扩展不应产生任何负面影响。

您没有做错任何事情,因此这可能是 Apple 的 OpenCL 实现中的一个错误。对于支持 double 的设备,相同的代码(使用 exp() 函数)在我的 Macbook 上编译得很好。因此,如果您的设备明确报告它支持 double ,那么您应该在 Apple's Bug Reporting System 中提交错误。 .

关于double - 我应该如何在 OpenCL 中启用 cl_khr_fp64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621800/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com