我正在编写一个用于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]与内核中的某些内容不匹配?任何帮助都会得到很多应用。谢谢。
答案 0 :(得分:1)
问题很明显,您正在一个上下文(上下文B)中运行内核,在另一个上下文的队列中(上下文A)。
这是不允许的,所有对象只能与自己的上下文对象进行交互。这适用于内核,缓冲区,队列,事件等。
但是,设备等硬件资源可以在不同的环境中使用。