我正在編寫一個程序將rgba圖像轉換爲灰度。我在這方面做了很多工作,並正確地實現了內核。然而,網格大小可能是錯誤的,即使它的邏輯是正確的。CUDA:無法計算網格大小
內核:
__global__
void rgba_to_greyscale(const uchar4* const rgbaImage,
unsigned char* const greyImage,
int numRows, int numCols)
{
int x = (blockIdx.x * blockDim.x) + threadIdx.x;
int y = (blockIdx.y * blockDim.y) + threadIdx.y;
if(x >= numCols || y >= numRows)
return;
uchar4 rgba = rgbaImage[x+y];
float channelSum = 0.299f*rgba.x + 0.587f*rgba.y + 0.114f*rgba.z;
greyImage[x+y] = channelSum;
}
和內核啓動:
const dim3 blockSize(10, 10, 1); //TODO
size_t gridSizeX, gridSizeY;
gridSizeX = numCols + (10 - (numCols % 10)); //adding some number to make it multiple of 10
gridSizeY = numRows + (10 - (numRows % 10)); //adding some number to make it multiple of 10
const dim3 gridSize(gridSizeX, gridSizeY, 1); //TODO
rgba_to_greyscale<<<gridSize, blockSize>>>(d_rgbaImage, d_greyImage, numRows, numCols);
我創建多個線程則需要數,然後應用在內核綁定檢查。
這是一個廣泛使用的邏輯,用於創建更多數量的線程並在內核中執行綁定檢查。這是計算網格大小的通用公式。 'gridSizeX =(numCols + blockSize.x - 1)/blockSize.x;' – sgarizvi
[this]的可能重複(http://stackoverflow.com/questions/14711668/colored-image-to-greyscale-image-using- cuda並行處理)。我認爲它的標準問題來自udacity當然.. –
@SagarMasuti;我也讀過這篇文章,但是我無法弄清楚我的代碼中出現了什麼問題。如果您可以將錯誤指向我的(邏輯上正確的)代碼,這將會很有幫助。 –