OpenCL enqueueNDRangeKernel中的访问冲突错误

时间:2014-05-12 09:58:34

标签: kernel opencl gpu

我尝试使用大量参数启动至少空内核,但是我在函数enqueueNDRangeKernel中遇到了内存访问冲突。请检查我的代码,也许我错过了一些或者只是不知道。

主机代码: https://dl.dropboxusercontent.com/u/71256314/main.cpp 首先进行一些初始化,然后我创建缓冲区,然后设置参数。没有错误出来。它在第一次enqueueNDRangeKernel函数调用时崩溃。

内核代码: https://dl.dropboxusercontent.com/u/71256314/baum_kernel.cl 即使内核为空,它也不起作用。

我猜想缓冲区存在一些问题,但没有返回错误。

版本: AMD APP SDK v2.8 - AMD Catalyst™12.10(9.002) GPU:ATI Mobility Radeon HD 5650

1 个答案:

答案 0 :(得分:1)

1)问题在于

err = kernel.setArg(11, Otr);   checkErr(err, "Kernel::setArg()11");

我将指针传递给float Otr,而不是将相应的OpenCL缓冲区Otr_b传递给setArg函数。 OpenCL一直试图将指针复制到期望缓冲区的内核。毫无疑问存在访问冲突错误。


2)DarkZeros提到的另一个重点:检查您的库链接以及ATI驱动程序和AMD APP SDK之间的版本对应关系。以下是列出驱动程序和SDK兼容性的链接:Versions of AMD APP SDK。我的情况我有AMD APP SDK v2.8.1,它与12.10(9.002)驱动程序不兼容。我最终安装了v2.8.0版本。