关于Nvidia Quadro M2000M的CL_OUT_OF_RESOURCES

时间:2017-03-31 11:11:20

标签: opencl nvidia

昨天我必须在新笔记本上运行当前应用程序的单元测试,并且出现了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

1 个答案:

答案 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确实返回了错误。