【发布时间】:2013-11-25 22:44:11
【问题描述】:
如果我不小心在我的 OpenCL 内核中引用了一个不存在的函数,即使我修复了问题,编译器也会像我没有那样做。例如。
__kernel void doSomething(__global unsigned int *array){
f(array)
}
显然 f 不存在,我会得到一个错误。但是,如果我编写 f 方法,编译器会继续给出此错误。
Exception in thread "main" org.jocl.CLException: CL_BUILD_PROGRAM_FAILURE
Build log for device 0:
kernel referenced an external function f, that could not be found.
无论我更改什么,我都可以删除任何内核的主体,这样 .cl 最终版本就不会包含任何代码,而编译器 仍然 会导致此错误。即使创建一个新文件并将内容复制到其中,或者更改程序参数或名称也没有效果。我被这个错误困住了。重启电脑也不行。
编辑
我在 MacBook Pro 10.9 版上运行它
【问题讨论】:
-
很简单,你并没有真正改变源代码。在将字符串发送到编译器之前检查字符串,您将看到进入编译器的实际代码。
-
发送给编译器的代码是没有错误的更新代码。知道我正在使用 JOCL 编译内核可能会有所帮助。
-
不可能编译一个空的
.cl文件并且编译器会抱怨内核引用了函数“f”。显然,您仍在编译旧的内核源代码。只需在编译之前将发送到编译器的源代码转储即可。 -
我的意思是空的,.cl 文件不是空的,但所有的内核都是空的。在上面的示例中,这意味着删除“f(array);”行。我尝试在编译时打印源代码并且更改存在但错误仍然存在。
-
有趣的是,如果我不正确地缩进随机行,它会起作用。
标签: java parallel-processing kernel opencl