0

这是关于 openCL 中的编译时参数。我有一个固定大小的常量数组,我将它作为编译时参数传递,如下所示:

 -DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f

在内核中,我将其解读为,

__kernel void Smoothing(__global const float *in, __global float *out)
{
    float chnWeight[] = {COEFF};

}

这样,使用英特尔 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 中(逗号)也被用作编译时参数的分隔符,这导致了错误。

任何解决此问题的帮助将不胜感激。提前致谢。

4

2 回答 2

0

尝试引用字符串-DCOEFF="0.1f,0.2f,0.5f,0.2f,0.1f"

看起来编译器正在寻找文件“0.2f”,这是第二个元素,所以在第一个元素和逗号之后,编译器已经停止将输入解释为 COEFF 定义的一部分。

于 2013-10-15T15:02:04.293 回答
0

此问题在 937.2 和 1268.1 版本之间的某个时间被引入 AMD OpenCL。这是一个解决方法:

替换 -DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f-D COEFF=0.1f,0.2f,0.5f,0.2f,0.1f

于 2013-10-17T13:51:34.967 回答