Opencl Nvidia Quadro M2000M上的资源不足

Opencl Nvidia Quadro M2000M上的资源不足,opencl,nvidia,Opencl,Nvidia,昨天,我在新的笔记本电脑上运行了当前应用程序的单元测试,并在这样做的过程中获得了CL_OUT_of_RESOURCES错误。代码本身在ATI卡或英特尔CPU上运行时不会出错 让我怀疑的是M2000M支持“OpenCL1.2 CUDA”。这是标准“OpenCL1.2”还是不同,我需要修改代码 代码如下: __kernel void pointNormals(__global const uint* cellLinkIds, __global const uint* cellLinks,

昨天,我在新的笔记本电脑上运行了当前应用程序的单元测试,并在这样做的过程中获得了CL_OUT_of_RESOURCES错误。代码本身在ATI卡或英特尔CPU上运行时不会出错

让我怀疑的是M2000M支持“OpenCL1.2 CUDA”。这是标准“OpenCL1.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);
    }
}
\uuu内核无效点法线(\uu全局常量uint*cellLinkId,\uu全局常量uint*cellLinks,
__全局常量浮点3*单元格法线,u全局浮点3*点法线,
警察局(点)
{
const uint gid=获取全局id(0);
if(gid
/编辑: 在测试中,我得到了6个错误,首先是调用
clWaitForEvents
,其他错误来自
clEnqueueWriteBuffer

找到了原因

const uint first=select的行(cellLinkId[gid-1],(uint)0,gid==0)gid
0
(第一个元素afaik)时,code>导致无效内存访问


consuint first=gid==0修复了第i个?(uint)0:CellLinkId[gid-1]。但我不明白的是,为什么AMD卡能够处理这个错误,而Nvidia却返回了一个错误。

“OpenCL1.2 CUDA”是标准的OpenCL1.2。哪个API返回了所有资源中的CL?您正在显示内核代码,但只有主机API返回该代码。NVIDIA更严格地检查GPU中的内存访问,AMD则不是。我在AMD上多次遇到系统重启时运行有缺陷的内核,所以这不是一件好事相信我..我们确实在AMD卡上运行了一年多没有问题的代码。。。但很高兴知道NVIDIA更严格。。。因此,他们的开发人员应该修复所有被AMD卡“忽略”的问题