2012-08-15 68 views
4

我是CUDA編程新手,對其不太瞭解。你能告訴我'CUDA計算能力'是什麼意思嗎?當我在我的大學服務器上使用以下代碼時,它向我顯示了以下結果。'計算能力'是什麼意思w.r.t. CUDA?

for (device = 0; device < deviceCount; ++device) 
{ 
    cudaDeviceProp deviceProp; 
    cudaGetDeviceProperties(&deviceProp, device); 
    printf("\nDevice %d has compute capability %d.%d.\n", device, deviceProp.major, deviceProp.minor);  
} 

結果:

Device 0 has compute capability 4199672.0. 
Device 1 has compute capability 4199672.0. 
Device 2 has compute capability 4199672.0. 
. 
. 

cudaGetDeviceProperties返回兩個領域的主要和次要。你能告訴我這是什麼4199672.0.意味着什麼?

+0

當然,您的機器上CUDA的主要和次要版本。 http://www.divms.uiowa.edu/help/linux/cuda.html – duffymo 2012-08-15 16:32:30

+3

這很可能意味着您對'cudaGetDeviceProperties'的調用失敗。檢查它的返回值是否等於'cudaSuccess'。 – aland 2012-08-15 16:36:15

回答

7

計算能力是設備的「功能集」(硬件和軟件功能)。您可能聽說過NVIDIA GPU架構名稱「特斯拉」,「費米」或「開普勒」。這些體系結構中的每一個都具有以前版本可能沒有的功能。

在您的硬盤驅動器上的CUDA工具包安裝文件夾中,查找文件CUDA_C_Programming_Guide.pdf(或谷歌它),並找到附錄F.1。它描述了不同計算能力之間的功能差異。

1

正如@dialer所說,計算能力是您的CUDA設備的一組計算相關功能。隨着NVidia的CUDA API的發展,「計算能力」的數量也隨之增加。在撰寫本文時,NVidia最新的GPU是Compute Capability 3.5。您可以通過在維基百科上檢查this table來了解差異的含義。

正如@aland所示,您的通話可能失敗,並且您獲得的是using an uninitialized variable的結果。您應該用錯誤檢查功能或宏呼叫包裝您的cudaGetDeviceProps()呼叫;看到

What is the canonical way to check for errors using the CUDA runtime API?

爲做到這一點的最佳方式進行了討論。