【发布时间】:2013-10-15 13:46:07
【问题描述】:
这是关于 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 可以获得相当多的性能优势。
问题出在 AMD 中,它没有被编译。我收到以下错误:
0.2f:
Catastrophic error: cannot open source file "0.2f"
1 catastrophic error detected in the compilation of "0.2f".
Compilation terminated.
我了解在 AMD 中(逗号)也被用作编译时参数的分隔符,这是导致错误的原因。
任何解决此问题的帮助将不胜感激。提前致谢。
【问题讨论】:
-
这适用于我同时使用 Intel 和 AMD opencl。我的 AMD opencl 版本是“OpenCL 1.2 AMD-APP (937.2)”。什么版本产生了这个错误?
-
我正在使用 OpenCL 1.2 AMD-APP (1311.2)
-
我切换到了我能找到的最新的 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}; -
我可能无法使用您的第二个建议,因为我的数组长度不是恒定的。
-DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f,也可以是-DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f,0.1f,0.1,f。通过将其保留在单个动态参数中,我实际上享受了很大的灵活性和性能改进(仅在英特尔中测试)。
标签: opencl intel amd-processor