2015-06-30 60 views
1

親愛DOWNVOTERS:請讓我知道下投票的原因。我已經接受了一個答案,這意味着這個人能夠理解這個問題,並且不需要一個最低限度的工作示例。其次,我想這是一個概念性問題,而不是一個家庭作業的問題。請讓我知道你的倒票的原因。決定CUDA線程和塊圖像處理

重要:我已經看過幾個線程(例如this)關於線程和塊的分佈,但我有一個特定的查詢。

我在GPU來處理unsigned char形式的圖像數據。我的圖像是大小(1080 x 1920)用3個信道,並且每個像素是unsigned char類型。

GPU Details

NVIDIA Quadro k2000 
2 GB of GDDR5 GPU memory 
384 5MX CUDA parallel processing cores 

正如,我是新來的GPU處理,我不能夠太瞭解每塊塊狀分佈的總數量的線程數目爲我的GPU卡這個具體情況。

問題:當我使用下面的 配置我(1080 x 1920)圖像調用GPU內核的話,我得到了想要的結果,但計算時間實在是太多了

dim3 numOfBlocks((108) , (192)); 
dim3 numOfThreadsPerBlocks(3*10 , 3*10); //multiplied by 3 because we have 3 channel image now 

colorTransformation_kernel<<<numOfBlocks, numOfThreadsPerBlocks>>>(numChannels, step_size, iw, ih, dev_ptr_source, dev_ptr_dst); 

,如果我選擇了以下另一種配置

dim3 numOfBlocks((108/2) , (192/2)); 
    dim3 numOfThreadsPerBlocks(3*10*2 , 3*10*2); //multiplied by 3 because we have 3 channel image now 

然後,我得到一個空白圖像。

+0

做你該做[錯誤檢查](http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda-runtime-api/14038590#14038590)?請發表[最小,完整的,並且可驗證示例](http://stackoverflow.com/help/mcve) –

+0

@ M.S。 :沒有錯誤。請告訴我,最小的工作示例是什麼?這不是一個合乎邏輯的問題嗎?我提供了我的圖像,GPU,numBlocks,還需要什麼所有的細節。請讓我知道需要其他信息,我會發布它。 – skm

+0

你怎麼知道沒有錯誤?如果你得到一個空白圖像,你的內核可能沒有運行,這是你可以通過檢查CUDA API錯誤檢測。甲MCVE通常由可以複製,粘貼,並編譯沒有任何必要的改變重現該問題的代碼。 –

回答

4

如果應用error checking因爲我已經在評論中建議,輸出將是:

invalid configuration argument

您正在使用的Quadro K2000,其has Compute capability 3.0。計算能力3.0允許最大爲1024 threads per block

您正在使用每塊3*10*2 * 3*10*2 = 3600線程,這是高於1024限制。 所以你的內核根本就沒運行,這就是爲什麼你得到一個空白圖像。

+0

非常感謝。 「錯誤檢查」已經幫了很多忙。我發現內核甚至沒有像你提到的那樣加載。我對我的GPU允許的線程數量感到困惑,我無法獲得關於它的信息。 – skm

+0

你可以建議我,可能是什麼可能的優化配置。或者,我只需要做一個可以最大限度地減少塊數並使每塊最大線程數最大化的配置? – skm

+0

@skm看看處理這個問題的各種SO問題,例如:http://stackoverflow.com/questions/11592450/how-to-adjust-the-cuda-number-of-block-and-of-線程獲取最佳性能,http://stackoverflow.com/questions/9985912/how-do-i-choose-grid-and-block-dimensions-for-cuda-kernels –