2012-08-15 65 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?

为做到这一点的最佳方式进行了讨论。