这是关于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};
}
这样,使用intel-SDK,与将Coefficients作为内核的另一个参数传递相比,我获得了相当大的性能优势。
问题出在AMD,这不是编译。我收到以下错误:
0.2f:
Catastrophic error: cannot open source file "0.2f"
1 catastrophic error detected in the compilation of "0.2f".
Compilation terminated.
据我所知,AMD(逗号)也被视为编译时参数的分隔符,这导致错误。
任何帮助解决这个问题将不胜感激。提前谢谢。
答案 0 :(得分:0)
尝试将字符串引用到-DCOEFF="0.1f,0.2f,0.5f,0.2f,0.1f"
看起来编译器正在查找文件“0.2f”并且这是第二个元素,因此在第一个元素和逗号之后,编译器已经停止将输入解释为COEFF定义的一部分。
答案 1 :(得分: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