CUDA 4.1问题

3
我刚刚从CUDA 4.0更新到最新版本的CUDA 4.1,但我的所有项目都无法正常工作。此外,问题似乎是不稳定的。我可以理解的是,在cudaMalloc之后,一些指向设备内存的指针仍然保持为NULL,但这并非立即发生。N视图和可视化分析器告诉我,一些与内存相关的函数(如cudaMemcpy)返回未知的错误标志。cudaStreamQuery主要也返回未准备好的流标志。
抱歉表述含糊,但这就是问题的要点。不同的项目以不同的方式表现出问题,但主要是空指针。
有人知道是什么原因吗?
更新:在其中一个项目中,Nsight调试器标记了一个超出范围的内存加载错误,但我仍然无法理解为什么会这样。这以前是有效的。此外,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都在尝试访问越界地址。但是yPositionxPosition的值都小于掩码尺寸!此外,除了少数几个线程之外,所有这个warp中的线程都试图访问的地址是0x200000002。我无法理解它。
更新2:我已经解决了最后一个问题——正如预期的那样,这是用户错误。现在我在另一个项目中遇到了另一个问题,这次我可以确认与CUDA 4.1有关。cudaBindTexture2D()引发了一个invalid argument错误,而以前没有。我猜这是一个纹理对齐问题?

1
你也更新了4.1推荐的驱动程序吗? - brano
1
你尝试过对计算机进行冷启动吗?你能够正确地从SDK运行deviceQuery吗? - brano
CUDA可用设备的数量如何?我问这个问题是因为当我安装4.1版本时遇到了同样的问题,而且我没有使用新的驱动程序。这给我带来了奇怪的问题,其中一个问题是deviceQuery报告了几千个CUDA可用设备。只需安装新的驱动程序即可解决此问题。 - brano
1
如果您已经尝试了以上所有方法,但问题仍未解决,请确保您正在使用与4.1一起提供的SDK。同时尝试运行几个SDK示例,看看是否能够重现该问题。如果SDK中的所有内容都正常工作,则怀疑问题出在您的项目中。可能是您为项目链接了错误的CUDA库,请确保包含目录和其他库依赖项设置到正确的文件夹。 - brano
你尝试过按照建议运行几个SDK示例吗?还尝试编译几个SDK示例以查看它们是否正确运行了吗? - brano
显示剩余9条评论
1个回答

0

CUDA在cudaBindTexture2D()上出现了故障,就像我之前说的那样。我通过确保内存分配对齐来解决了这个问题;特别是,我将所有2D(图像)分配更改为使用pitched memory,通过用cudaMallocPitch()替换cudaMalloc()。这解决了对齐问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接