我开始从 Udacity 视频课程(课程 2 岁)学习 CUDA GPU 编程。我在Nvidia GeForce GT 630M GPU上使用CUDA 5.5 和 Visual Studio Express 2012(学生版,因此并非所有 CUDA 调试功能都不可用)。
刚刚实现了一些向量加法和其他简单的操作。
现在我正在尝试将 RGB 图像转换为 Grayscale。我在 OpenCV 的帮助下阅读图像。(无论如何,我尝试过的任何方法都失败了。这就是我在这里的原因)
下面是我的 .cpp 文件:https ://gist.github.com/abidrahmank/7020863
下面是我的 .cu 文件:https ://gist.github.com/abidrahmank/7020910
我的输入图像是一个简单的 64x64 彩色图像(实际上我首先使用了 512x512 图像,没有工作,所以降低到 64x64 以检查是否有问题。似乎不是这样)
问题
我的 CUDA 实现的输出图像是白色图像。全部值为 255。这里和那里的某个地方,有一些灰色像素,可能小于 1%。剩下的一切都是白色的。
我尝试了什么:
三天来,我尝试了以下事情:
- 我认为问题可能是由于图像大小,所以线程数可能不是最佳的或类似的东西,所以减少了图像大小。结果还是一样。
- 我尝试了一个类似的例子,创建了一个 64x64 数组。一次取它的两个像素,然后找到它们和的平方,它工作得很好。这是代码:https ://gist.github.com/abidrahmank/7021023
- 开始在每个阶段一个一个地检查数据。加载到 GPU 之前的输入图像很好。但是输入数据,当我在内核中检查时,总是 255。(在这里检查第 14 行)
- 最后,我使用
CudaMemset
并检查内核内部的输入数据将所有 GPU 数据设置为零,它仍然是 255。
所以我没有任何其他选择可以在 StackOverflow 上进行其他询问。
谁能告诉我我犯了什么错误?