Opencl Nvidia Quadro M2000M上的资源不足
昨天,我在新的笔记本电脑上运行了当前应用程序的单元测试,并在这样做的过程中获得了CL_OUT_of_RESOURCES错误。代码本身在ATI卡或英特尔CPU上运行时不会出错 让我怀疑的是M2000M支持“OpenCL1.2 CUDA”。这是标准“OpenCL1.2”还是不同,我需要修改代码 代码如下: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,
__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卡“忽略”的问题