关于CUDA,'compute capability'是什么意思?

27

我是CUDA编程的新手,对它了解甚少。请问什么是“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返回两个字段major和minor。请问这个4199672.0.是什么意思?


当然,你需要知道你的机器上CUDA的主要版本和次要版本。http://www.divms.uiowa.edu/help/linux/cuda.html - duffymo
5
很可能意味着你对 cudaGetDeviceProperties 的调用失败了。请检查其返回值是否等于 cudaSuccess - aland
2个回答

24

计算能力是设备的“功能集”(包括硬件和软件功能)。您可能听说过 NVIDIA GPU 架构名称“Tesla”、“Fermi”或“Kepler”。每个架构都具有之前版本可能没有的功能。

在您的硬盘上的 CUDA 工具包安装文件夹中,查找文件 CUDA_C_Programming_Guide.pdf(或通过谷歌搜索),并找到附录F.1。它描述了不同计算能力之间的功能差异。


这里是CUDA C编程指南的链接:https://docs.nvidia.com/cuda/pdf/CUDA_C_Programming_Guide.pdf。请查看第19章(而不是附录)以了解CUDA计算能力的解释。此外,这是一个GPU及其计算能力的列表:https://developer.nvidia.com/cuda-gpus。 - undefined

5
正如@dialer提到的,计算能力是您的CUDA设备的一组与计算相关的功能。随着NVidia的CUDA API的发展,“计算能力”数字也在增加。目前为止,NVidia最新的GPU是计算能力3.5。您可以通过查看维基百科上的这个表格来了解一些差异的细节。
正如@aland建议的那样,您的调用可能失败了,你得到的结果是使用未初始化变量的结果。您应该将您的cudaGetDeviceProps()调用与某种错误检查包装起来;请参见 使用CUDA运行时API进行错误检查的规范方式是什么? 讨论了执行此操作的选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接