昨天我必须在新笔记本上运行当前应用程序的单元测试,并且出现了CL_OUT_OF_RESOURCES错误。代码本身在ATI卡或Intel CPU上运行时没有错误。
令我怀疑的是M2000M支持' OpenCL 1.2 CUDA'。这个标准是' OpenCL 1.2'或者它是否有所不同,我是否需要修改代码?
这里是代码:
__kernel void pointNormals(__global const uint* cellLinkIds, __global const uint* cellLinks,
__global const float3* cellnormals, __global float3* pointnormals,
const uint nrPoints)
{
const uint gid = get_global_id(0);
if(gid < nrPoints)
{
const uint first = select(cellLinkIds[gid-1], (uint)0, gid==0);
const uint last = cellLinkIds[gid];
float3 pointnormal = (float3)0.f;
for(uint i = first; i < last; ++i)
{
pointnormal += cellnormals[cellLinks[i]];
}
pointnormals[gid] = normalize(pointnormal);
}
}
/编辑:
在测试中,我得到6个错误,首先是clWaitForEvents
来电,其他人来自clEnqueueWriteBuffer
答案 0 :(得分:0)
当const uint first = select(cellLinkIds[gid-1], (uint)0, gid==0);
为gid
0
时,const uint first = gid == 0 ? (uint)0 : cellLinkIds[gid - 1];
行导致无效内存访问(第一个元素为afaik)。
用{{1}}修正ith。但我没有得到的是为什么AMD卡确实可以使用该bug并且Nvidia确实返回了错误。