CUDA 4.1问题

时间:2012-02-02 14:26:41

标签: c++ cuda

我刚刚从4.0更新到最新(发布)CUDA 4.1,我的项目都没有正常工作。而且,问题似乎不稳定。我能理解的是,在NULL之后,某些设备内存指针仍然是cudaMalloc,但这不会立即发生。 Nsight和视觉分析器告诉我一些与内存相关的函数(cudaMemcpy等)正在返回未知的错误标志。 cudaStreamQuery也主要返回未就绪的流标志。

对于模糊不清而感到抱歉,但这就是它的要点。不同的项目以不同的方式表现出问题,但主要是空指针。

任何人都知道会给出什么?

更新:好吧,在其中一个项目中,Nsight Debugger正在标记超出范围的内存负载,但我仍然无法理解原因。这之前有用。此外,考虑到代码,CUDA调试器所说的我试图访问的地址没有多大意义:

        //  Get the mask pixel, if it has been supplied.
    if (maskImage != NULL)
        maskPixel = *(static_cast<uchar*>(maskImage->imageData) + maskImage->widthStep * (int) yPosition + (int) xPosition);

现在,根据调试器,整个warp试图访问超出边界的地址。但是yPosition和。{ xPosition值均小于蒙版尺寸!此外,此warp中的所有线程(除少数线程之外)尝试访问的地址为0x200000002。我无法理解它。

更新2:我已经修复了最后一个问题 - 正如预期的那样,这是用户错误。现在我在另一个项目中有另一个,这次,我可以确认它与CUDA 4.1相关。 cudaBindTexture2D()提出invalid argument错误,而不是之前的错误。我想这是一个纹理对齐问题?

1 个答案:

答案 0 :(得分:0)

如上所述,CUDA在cudaBindTexture2D()失败了。我通过确保内存分配完全一致来解决这个问题。特别是,我将所有2D(图像)分配更改为使用间距内存,将cudaMalloc()替换为cudaMallocPitch()。这会解决对齐问题。