【发布时间】:2013-05-12 17:51:09
【问题描述】:
我很难确定为什么在我的代码中的以下行随机出现分段错误:
rc = clEnqueueReadBuffer(ompctx->clctx->queue,
ompctx->result, CL_TRUE, 0, sizeof(int), &pos,
1, &ompctx->clctx->ev1, NULL);
ompctx->result 是一个用作整数数组的内存对象,pos 是一个主机对象,声明为:
int pos
我尝试在堆栈和全局空间中声明 pos,结果没有改变。 我尝试等待最后一个内核完成(如上所述,虽然我不应该这样做,因为我有一个有序的命令队列)并且没有等待,结果仍然相同。
我正在使用 AMD APP v2.8,并尝试了具有 8 个 CPU 的 i7 和 AMD FirePro v8800。两者都表现出相同的问题。
我是否遗漏了一些明显的东西?我还应该检查什么?
【问题讨论】:
-
也许您正在取消引用
null指针?如果没有看到更多代码,就很难说。 -
我打印了指针,在调用 ReadBuffer 之前它们看起来都还不错。队列在此调用之前使用,它总是成功,结果也成功使用,pos 是一个全局变量,无论事件是否存在,它们都没有任何区别。所以我不认为这是一个空指针取消引用。
-
您是否尝试过使用英特尔 OpenCL 平台?它会给你同样的错误吗?
-
您是否检查了到目前为止所有 OpenCL 调用的返回值?
-
ananthonline:没有,但我想过。问题是我需要 AMD 的,但澄清这不是实现的错也无妨。 Eric Bainville:是的,每一个。总是。
标签: c segmentation-fault opencl