[英]CUDA - convert RGB image to Grayscale
我開始從Udacity視頻課程學習CUDA GPU編程(課程是2歲)。 我在Nvidia GeForce GT 630M GPU上使用CUDA 5.5和Visual Studio Express 2012 (學生版,因此並非所有CUDA調試功能都不可用)。
剛剛實現了一些向量加法和其他簡單的操作。
現在我正在嘗試將RGB圖像轉換為灰度圖像 。 我在OpenCV的幫助下閱讀圖像。 (無論如何,我失敗了我嘗試的任何方法。這就是我在這里的原因)
下面是我的.cpp文件: https : //gist.github.com/abidrahmank/7020863
以下是我的.cu文件: https ://gist.github.com/abidrahmank/7020910
我的輸入圖像是一個簡單的64x64彩色圖像(實際上我首先使用了512x512圖像,沒有工作,所以降到64x64以檢查是否是問題。它似乎不是這樣)
問題
我的CUDA實現的輸出圖像是白色圖像 。 所有值都是255.在這里和那里的某處,有一些灰色像素,可能小於1%。 剩下的一切都是白色的。
我嘗試了什么:
三天,我嘗試了以下事情:
CudaMemset
將所有GPU數據設置為零並檢查內核中的輸入數據,它仍然是255。 所以我沒有任何其他選擇在StackOverflow上做其他的詢問。
誰能告訴我我犯的錯誤是什么?
你的內核簽名說:
__global__ void kernel(unsigned char* d_in, unsigned char* d_out)
但你稱之為:
kernel<<<rows,cols>>>(d_out, d_in);
哪一個是 ,哪一個是呢 ?
在過去完成了相當多的CUDA編程之后,我強烈建議您使用Thrust而不是手工制作內核。 即使thrust::for_each
也很難被原始內核擊敗。
除了DanielKO指出的參數問題,你還有線程/塊設置問題。
由於您已經將二維圖像視為一維數組,因此這里有一個很好的示例,說明如何為任意大小的數據設置線程/塊。
https://developer.nvidia.com/content/easy-introduction-cuda-c-and-c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.