这是关于openCL编译时参数的问题。 我有固定大小的常数的阵列,并且我将它作为编译时参数,如下所示:AMD编译时参数错误
-DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f
而在内核,我读它作为,
__kernel void Smoothing(__global const float *in, __global float *out)
{
float chnWeight[] = {COEFF};
}
这样,使用intel-SDK,与将系数作为内核的另一个参数传递相比,我获得了相当大的性能优势。
问题出在AMD上,这是没有得到编译。我收到以下错误:
0.2f:
Catastrophic error: cannot open source file "0.2f"
1 catastrophic error detected in the compilation of "0.2f".
Compilation terminated.
据我所知,在AMD(逗号)也作为对编译时间参数的分隔符,这是造成错误。
任何帮助解决这个问题将不胜感激。提前致谢。
这同时使用英特尔和AMD的OpenCL为我工作。我的AMD opencl版本是“OpenCL 1.2 AMD-APP(937.2)”。什么版本产生这个错误? – ScottD
我使用OpenCL 1.2 AMD-APP(1311.2) – Neeba
我切换到了我能找到的最新AMD Windows OpenCL(OpenCL 1.2 AMD-APP(1268.1)),现在我遇到了与您完全相同的问题。我所知道的只是使用一个较老的OpenCL,或者是一个有些丑陋的解决方法,比如用'-DCOEFF0 = 0.1f -DCOEFF1 = 0.2f -DCOEFF2 = 0.5f -DCOEFF3 = 0.2f -DCOEFF4 = 0.1f'编译以及使用C代码:'float chnWeight [] = {COEFF0,COEFF1,COEFF2,COEFF3,COEFF4};' – ScottD