openCL中的上下文无效错误

时间:2013-12-13 16:02:14

标签: opencl

我正在编写一个用于n-body算法的OpenCL代码。我尝试执行它时遇到无效上下文错误。该错误出现在调用内核以在GPU上执行的代码部分。我在这里粘贴了我的代码。如果有人能帮助我理解为什么我会收到这个错误并帮我解决,我将不胜感激。

  if (gpuSize) {
/*launch the kernel on second device (GPU)*/
ret = clEnqueueNDRangeKernel(
                           accelState.queues[1],
                           accelState.kernel,
                           1,
                           global_work_offset1,
                           global_work_size1,
                           NULL, /*let OpenCL determine localWorkSize*/
                           1, &enqEvents[noOfQEvents-1],
                           &enqEvents[noOfEvents]
                           );
 /*noOfEvents++;*/
 checkResult(ret);
}

我在最后一行checkResult(ret)上遇到错误但是据我所知,我的命令队列accelState.queues [1]与内核中的某些内容不匹配?任何帮助都会得到很多应用。谢谢。

1 个答案:

答案 0 :(得分:1)

问题很明显,您正在一个上下文(上下文B)中运行内核,在另一个上下文的队列中(上下文A)。

这是不允许的,所有对象只能与自己的上下文对象进行交互。这适用于内核,缓冲区,队列,事件等。

但是,设备等硬件资源可以在不同的环境中使用。